簡體   English   中英

如何將Jess(.jar文件)庫轉換為.dex文件,或在Android上運行Java類文件?

[英]How to convert Jess (.jar files) libraries to .dex file, or run java class files on Android?

我試圖在終端IDE(android)上運行Jess,但是當我嘗試運行以下命令時:

terminal++@192.168.0.102:~/sdcard/myJess$ dx --dex --output=jess.dex Jess71p2/lib/jess.jar

我收到消息:

warning: Ignoring InnerClasses attribute for an anonymous inner class that doesn't come with an associated EnclosingMethod attribute. (This class was probably produced by a broken compiler.)
warning: Ignoring InnerClasses attribute for an anonymous inner class that doesn't come with an associated EnclosingMethod attribute. (This class was probably produced by a broken compiler.)
warning: Ignoring InnerClasses attribute for an anonymous inner class that doesn't come with an associated EnclosingMethod attribute. (This class was probably produced by a broken compiler.)
warning: Ignoring InnerClasses attribute for an anonymous inner class that doesn't come with an associated EnclosingMethod attribute. (This class was probably produced by a broken compiler.)
warning: Ignoring InnerClasses attribute for an anonymous inner class that doesn't come with an associated EnclosingMethod attribute. (This class was probably produced by a broken compiler.)

UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError
    at java.util.HashMap.makeTable(HashMap.java:569)
    at java.util.HashMap.doubleCapacity(HashMap.java:589)
    at java.util.HashMap.put(HashMap.java:419)
    at com.android.dx.rop.code.RegisterSpec.intern(RegisterSpec.java:71)
    at com.android.dx.rop.code.RegisterSpec.makeLocalOptional(RegisterSpec.java:124)
    at com.android.dx.rop.code.RegisterSpec.withReg(RegisterSpec.java:482)
    at com.android.dx.ssa.SsaRenamer$BlockRenamer$RenamingMapper.map(SsaRenamer.java:325)
    at com.android.dx.ssa.RegisterMapper.map(RegisterMapper.java:53)
    at com.android.dx.ssa.NormalSsaInsn.mapSourceRegisters(NormalSsaInsn.java:43)
    at com.android.dx.ssa.SsaRenamer$BlockRenamer.visitNonMoveInsn(SsaRenamer.java:555)
    at com.android.dx.ssa.NormalSsaInsn.accept(NormalSsaInsn.java:199)
    at com.android.dx.ssa.SsaBasicBlock.forEachInsn(SsaBasicBlock.java:957)
    at com.android.dx.ssa.SsaRenamer$BlockRenamer.process(SsaRenamer.java:341)
    at com.android.dx.ssa.SsaRenamer$1.visitBlock(SsaRenamer.java:146)
    at com.android.dx.ssa.SsaMethod.forEachBlockDepthFirstDom(SsaMethod.java:787)
    at com.android.dx.ssa.SsaRenamer.run(SsaRenamer.java:143)
    at com.android.dx.ssa.SsaConverter.convertToSsaMethod(SsaConverter.java:53)
    at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:100)
    at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:74)
    at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:269)
    at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:131)
    at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:85)
    at com.android.dx.command.dexer.Main.processClass(Main.java:299)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:278)
    at com.android.dx.command.dexer.Main.access$100(Main.java:56)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:250)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:136)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:113)
    at com.android.dx.command.dexer.Main.processOne(Main.java:247)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:183)
    at com.android.dx.command.dexer.Main.run(Main.java:139)
    at com.android.dx.command.dexer.Main.main(Main.java:120)
    at com.android.dx.command.Main.main(Main.java:89)
    at com.spartacusrex.spartacuside.external.dx.main(dx.java:14)
    at dalvik.system.NativeStart.main(Native Method)

我嘗試了其他方法,例如通過ssh連接到其他計算機,但是它不可用並且無法像本地一樣快速。 有誰知道解決方案或其他方法?

Jess 7與Android不兼容。 傑西8,將會在今天的任何一天發布。 因此,請留意www.jessrules.com。

您需要在dx選項中添加--no-strict ,並且如果您遇到OutOfMemory異常,則應編輯 dx腳本並擴展內存范圍:

dalvikvm -Xss262912 -Xmx500M -cp $APK com.spartacusrex.spartacuside.external.dx $@

-Xmx500M更改為所需的內存

也就是說,直到停止接收OOM異常為止。

對我來說,從JDK的tools.jar中-Xmx900M tools.jar時,限制是-Xmx900M此后,由於我的手機有大約900-990MB的可用空間,因此無法分配更多的內存。

  • 解壓縮類文件后的下一步是重新打包jess.jar中所有剩余的資源文件,因為dex文件沒有資源。
  • 使用java命令或winrar或任何文件瀏覽器觀察該jar文件的內容,並找到資源文件夾。 您可能會發現多個這樣的resources文件夾,並將其全部提取出來。
  • 確保您的dex文件具有名稱classes.dex然后將所有文件重新打包到一個新的jess_for_android.jar中,並將所有資源與原始jess.jar文件中的資源保持在同一目錄樹中

  • 最后,當您嘗試使用它時,請使用dalvikvm命令,而不要使用java否則(可能)會出現錯誤:

     dalvikvm -cp path_To_your_repacked_jar Main_className $@ 

內存選項-Xss和-Xmx是可選的。

希望對您有所幫助,如果您可以使用Jess工具,請提供指向它的鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM