java - 使用ant发布android包时编译错误

标签 java android ant

我的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文件

  1. 对于非库项目,它将是 ${project_name}.jar
  2. 对于库项目,它将是classes.jar

编译主项目时,Ant 需要classes.jar 作为其依赖项的输入来制作最终的包。所以这个过程到这里就停止了。我必须使用一个愚蠢的解决方案来修复它:在 lib 项目发布后,我将 ${project_name}.jar 重命名为classes.jar 并解决了这个问题。

关于java - 使用ant发布android包时编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012265/

相关文章:

java - atomicLong 如果 atomic long 大于某个数字,是否可以进行 compareAndSet?

java - getter和setter有什么用

android - 无法使用 `ShareCompat.IntentBuilder` 设置粗体电子邮件正文

java - 安卓工作室;底部导航 View = 空

svn - Subversion Ant 更新任务永远无法完成

java - 防止触摸 View android

Java 能否保证WeakHashMap entry check后不会消失

MenuItem 上的 Android 工具提示

android - 在 ant for Android 中启用 `--multi-dex` 选项

ant - 运行 bat 文件时使命令行保持打开状态