Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java源代码创建DEX文件_Java_Android_Jar_Dex_Dx - Fatal编程技术网

从Java源代码创建DEX文件

从Java源代码创建DEX文件,java,android,jar,dex,dx,Java,Android,Jar,Dex,Dx,我在网上搜索了大量关于使用Android SDK DX工具创建Android DEX文件(Java Dalvik字节码)的综合指南 我的目标是创建一个Jar文件,其中包含可以由应用程序在运行时加载的DEX字节码 要创建Jar文件,我一直遵循以下步骤: 包含公共类(Name.Java)的Java源代码 使用javac Name.java 从类文件创建了一个Jar文件jar cvf output.jar name.class 使用dx工具将类文件转换为classes.dex/dx--dex--out

我在网上搜索了大量关于使用Android SDK DX工具创建Android DEX文件(Java Dalvik字节码)的综合指南

我的目标是创建一个Jar文件,其中包含可以由应用程序在运行时加载的DEX字节码

要创建Jar文件,我一直遵循以下步骤:

  • 包含公共类(Name.Java)的Java源代码
  • 使用
    javac Name.java
  • 从类文件创建了一个Jar文件
    jar cvf output.jar name.class
  • 使用dx工具将类文件转换为classes.dex
    /dx--dex--output=classes.dex output.jar
  • 使用aapt将classes.dex文件与jar文件重新打包
  • 到目前为止,我已经成功地完成了第4步,这是我遇到问题的地方。运行dx工具时,出现以下错误:

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.io.FileNotFoundException: /home/del/Desktop/AndroidJarBuilder/output.jar (No such file or directory)
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:215)
        at java.util.zip.ZipFile.<init>(ZipFile.java:145)
        at java.util.zip.ZipFile.<init>(ZipFile.java:159)
        at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:244)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
        at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
        at com.android.dx.command.dexer.Main.processOne(Main.java:632)
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)
        at com.android.dx.command.dexer.Main.run(Main.java:246)
        at com.android.dx.command.dexer.Main.main(Main.java:215)
        at com.android.dx.command.Main.main(Main.java:106)
    1 error; aborting
    
    意外的顶级异常:
    java.io.FileNotFoundException:/home/del/Desktop/AndroidJarBuilder/output.jar(没有这样的文件或目录)
    位于java.util.zip.ZipFile.open(本机方法)
    位于java.util.zip.ZipFile。(ZipFile.java:215)
    位于java.util.zip.ZipFile。(ZipFile.java:145)
    位于java.util.zip.ZipFile(ZipFile.java:159)
    位于com.android.dx.cf.direct.ClassPathPener.processArchive(classPathPener.java:244)
    位于com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    位于com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    位于com.android.dx.command.dexer.Main.processOne(Main.java:632)
    位于com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    位于com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)
    位于com.android.dx.command.dexer.Main.run(Main.java:246)
    位于com.android.dx.command.dexer.Main.Main(Main.java:215)
    位于com.android.dx.command.Main.Main(Main.java:106)
    1错误;流产
    
    我想知道以前是否有人遇到过这个问题,我找不到关于堆栈溢出的任何答案,而web的其他部分也没有为我提供任何解决方案


    提前谢谢

    结果表明jar命令的输出需要与类的名称相同


    output.jar
    重命名为
    Name.jar
    似乎可以解决问题。

    错误很明显,“output.jar”不存在。是的,这很清楚。但是output.jar确实存在。如果output.jar不存在,我不会在output.jar上运行dx命令,是吗!我知道的唯一获得该异常的方法是,如果文件不存在,或者运行dx的用户对文件/包含目录/等没有正确的权限。这没有任何意义。jar的名称是任意的,jar通常包含许多类。