2012-03-01 54 views
0

我正在开发一个Android项目,该项目在其构建路径中包含Android库项目。 这两个项目的libs文件夹和构建路径中都有AdWhirl SDK库。SDK更新后出现意外的顶级异常

既然现在有更新Android SDK工具来R15主体工程的Ant构建失败,在以下情况除外:

[dx] UNEXPECTED TOP-LEVEL EXCEPTION: 
     [dx] java.lang.IllegalArgumentException: already added: Lcom/adwhirl/AdWhirlLayout$AdWhirlInterface; 
     [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:95) 
     [dx] 1 error; aborting 

现在我试图从主项目中删除的AdWhirl SDK lib和从库导出项目。现在ant构建工作,但是当在任何android设备上从eclipse启动应用程序时,都会抛出一些ClassNotFoundException异常。

其实我可以选择使用ant或eclipse进行调试,但是我需要两种变体。

回答

2

从我的角度来看,Android的图书​​馆项目是不是从一开始甚至精心设计的,但是,这不能成为一个真正的问题消费者开发者,只要它保持这种状态,并且在每次SDK升级期间行为都完全相同。但是事实并非如此,Android开发团队在最近发布的几个版本(可能从r14开始)中开始重新整理所有内容,并承诺我们将在即将发布的版本中提供终极解决方案。这使我们目前处于一个非常不稳定的阶段,我们不使用ant,而是在每次SDK升级期间使用Maven管理库更改时出现类似的问题。看起来像Android开发团队甚至难以纯粹从他们的官方ADT插件管理这些更改(请查看此blog),更不用说像Ant或Maven这样的非官方支持的构建工具。

我已经为你做了一些搜索,在Android JIRA系统中发布了一个与你的情况非常相似的线程,并附带了一些解决方法(蚂蚁脚本中的脏修复),请查看comments 16 by chris,看看这个帮助你。

1

尝试将此jar添加到libs目录。

+0

这些jar文件位于libs目录中 – endian 2012-03-01 09:29:22

+0

是的,将在库项目的bin文件夹中生成的jar文件添加到主项目的libs文件夹中,可以在IntelliJ中解决此问题。 – 2012-12-26 23:04:47

0

升级到最新的adk后,我收到一条消息,告诉我运行adb refresh来重建ant脚本。在最新版本的adk中,在构建过程中进行了优化。我假设这些优化之一是构建路径。

[dx] java.lang.IllegalArgumentException: already added: Lcom/adwhirl/AdWhirlLayout$AdWhirlInterface; 

暗示AdWhirlLayout$AdWhirlInterface正在被添加两次。尝试从其中一个项目中删除AdWhirl SDK。我会尝试从Android项目中删除它。

"Android Project" imports "Android Library Project" imports "AdWhirl SDK"

代替

"Android Project" imports "Adwhirl SDK" imports "Android Library Project" imports "AdWhirl SDK"

+0

请阅读我的帖子..如果我从任何项目中删除AdWhirl lib,使用eclipse构建将无法正常工作 – endian 2012-03-05 09:50:35