我的Android项目有两个外部库:A和B。使用Ant命令行编译Android项目时,遇到以下错误。库 A 的路径为 D:\Workspace\library
。
我在project.properties文件中将Project A标记为库,这是来自the post的指令。然而,它仍然没有成功。显然,编译时并没有把Project A当作一个库,而是需要classes.dex文件。
还有什么建议吗?
错误:
[dex] Converting compiled files and external libraries into d:\apk\compile\classes.dex...
[dx]
[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
[dx] java.io.FileNotFoundException: D:\Workspace\library\bin\classes.jar (系统找不到指定的文件。)
[dx] at java.util.zip.ZipFile.open(Native Method)
[dx] at java.util.zip.ZipFile.<init>(Unknown Source)
[dx] at java.util.zip.ZipFile.<init>(Unknown Source)
[dx] at java.util.zip.ZipFile.<init>(Unknown Source)
[dx] at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:244)
[dx] at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
[dx] at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
[dx] at com.android.dx.command.dexer.Main.processOne(Main.java:596)
[dx] at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
[dx] at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
[dx] at com.android.dx.command.dexer.Main.run(Main.java:230)
[dx] at com.android.dx.command.dexer.Main.main(Main.java:199)
[dx] at com.android.dx.command.Main.main(Main.java:103)
[dx]
[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
[dx] java.io.FileNotFoundException: D:\Workspace\YimianBaseLib\bin\classes.jar (系统找不到指定的文件。)
[dx] at java.util.zip.ZipFile.open(Native Method)
[dx] at java.util.zip.ZipFile.<init>(Unknown Source)
[dx] at java.util.zip.ZipFile.<init>(Unknown Source)
[dx] at java.util.zip.ZipFile.<init>(Unknown Source)
[dx] at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:244)
[dx] at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
[dx] at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
[dx] at com.android.dx.command.dexer.Main.processOne(Main.java:596)
[dx] at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
[dx] at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
[dx] at com.android.dx.command.dexer.Main.run(Main.java:230)
[dx] at com.android.dx.command.dexer.Main.main(Main.java:199)
[dx] at com.android.dx.command.Main.main(Main.java:103)
[dx] 2 errors; aborting
最佳答案
这个错误的根本原因是这两个lib项目没有被视为一个库,尽管它们两个在project.properties中被明确标注为“android.library=true”(我在这里很困惑,但很确定我尽一切努力将其标记为lib。)对于Ant的编译机制,它会根据是否是lib生成具有不同名称但内容相同的jar文件
- 对于非库项目,它将是 ${project_name}.jar
- 对于库项目,它将是classes.jar
编译主项目时,Ant 需要classes.jar 作为其依赖项的输入来制作最终的包。所以这个过程到这里就停止了。我必须使用一个愚蠢的解决方案来修复它:在 lib 项目发布后,我将 ${project_name}.jar 重命名为classes.jar 并解决了这个问题。
关于java - 使用ant发布android包时编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012265/