Ant构建失败,出现“意外的顶级异常(已添加)”

时间:2012-07-25 17:36:27

标签: android ant

我已经看到很多关于这个错误的帖子,但没有一个可以解决我的奇怪场景。首先是基础知识:

我有6个项目,所有项目都是按比例缩小的测试项目,模仿我的应用程序结构,我只是试图让构建工作。他们的依赖关系如下:

  • exampleLib 是一个不需要其他jar的库
    • 包含Widget.java
  • exampleLib2 是一个不需要其他jar的库
    • 包含Widget2.java
  • exampleLibNester 是一个需要 exampleLib exampleLib2 的库
    • 包含WidgetPartDeux.java
  • exampleLibNester2 是一个需要 exampleLib exampleLib2 exampleLibNester 的库
    • 包含WidgetPartDeux2.java
  • exampleUser 是一个需要 exampleLib exampleLib2 exampleLibNester exampleLibNester2 EM>
    • 包含TheActivity.java
  • exampleTest 是一个测试应用程序,用于检测 exampleUser 并需要 exampleLib exampleLib2 exampleLibNester
    • 包含WidgetTest.java

当我在Windows上使用ant本地构建这些应用程序时,它们运行良好,我可以使用install test来运行测试。当我尝试在运行linux的CI服务器上构建它们时,我得到了可怕的"已经添加了#34;错误信息。

-dex:
  [dex] Converting compiled files and external libraries into /apps/pos360/jenkins/.hudson/jobs/James-Test/exampleLibUser/bin/classes.dex...
   [dx]
   [dx] UNEXPECTED TOP-LEVEL EXCEPTION:
   [dx] java.lang.IllegalArgumentException: already added: Lcom/example/nester/WidgetPartDeux;
   [dx]     at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
   [dx]     at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
   [dx]     at com.android.dx.command.dexer.Main.processClass(Main.java:486)
   [dx]     at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455)
   [dx]     at com.android.dx.command.dexer.Main.access$400(Main.java:67)
   [dx]     at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394)
   [dx]     at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
   [dx]     at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
   [dx]     at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
   [dx]     at com.android.dx.command.dexer.Main.processOne(Main.java:418)
   [dx]     at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329)
   [dx]     at com.android.dx.command.dexer.Main.run(Main.java:206)
   [dx]     at com.android.dx.command.dexer.Main.main(Main.java:174)
   [dx]     at com.android.dx.command.Main.main(Main.java:91)
   [dx]
   [dx] UNEXPECTED TOP-LEVEL EXCEPTION:
   [dx] java.lang.IllegalArgumentException: already added: Lcom/example/lib/Widget;
   [dx]     at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
   [dx]     at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
   [dx]     at com.android.dx.command.dexer.Main.processClass(Main.java:486)
   [dx]     at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455)
   [dx]     at com.android.dx.command.dexer.Main.access$400(Main.java:67)
   [dx]     at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394)
   [dx]     at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
   [dx]     at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
   [dx]     at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
   [dx]     at com.android.dx.command.dexer.Main.processOne(Main.java:418)
   [dx]     at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329)
   [dx]     at com.android.dx.command.dexer.Main.run(Main.java:206)
   [dx]     at com.android.dx.command.dexer.Main.main(Main.java:174)
   [dx]     at com.android.dx.command.Main.main(Main.java:91)
   [dx] 2 errors; aborting

我可以查看classes.jar文件,看看exampleLibNester2正在将这些类放到它的jar中,但是我不知道如何阻止它这样做,也不知道为什么它在linux盒子上这样做但不是窗户一个。这两个SDK都已更新到最新版本。

2 个答案:

答案 0 :(得分:0)

据我了解,Android版本的项目结构自R14开始发生了变化。

根据本文,我建议您查看项目构建路径并删除以_src结尾的所有文件夹: @foxykeep : How to fix the "conversion to Dalvik format failed"。尽管错误名称,堆栈跟踪是相同的错误,它看起来像是同一个问题。

答案 1 :(得分:0)

在库项目中构建.jar文件时。不要在文件AndroidManifest.xml上添加任何权限(纯AndroidManifest就足够了)。只需将所需的所有权限添加到主项目清单文件中。

或者您只需将库项目导入主项目,不要使用.jar。