使用ant构建包含lib项目的项目包含lib项目

时间:2011-12-23 11:42:45

标签: java android ant build

我们有一个如下项目结构:

  

sharedlib(包含类的lib-project,在许多应用程序中都很有用)
   - > main-project(lib-project,包含运行应用程序的所有内容)
  ---> 2个品牌项目(主项目的图标/样式不同)

在Eclipse中,主项目是一个库项目,引用Android设置中的sharelibs,两个品牌项目将主项目引用为库。

如果我们在Eclipse下编译品牌项目一切正常,但我们无法使用ant build(sdk tools r16)。我们尝试了几种变体,用于将库项目添加到品牌项目中。我们得到一个错误,找不到库项目的类文件或者下面的dex错误:

-dex:
 [echo] Converting compiled files and external libraries into .../bin/classes.dex...
[apply] 
[apply] UNEXPECTED TOP-LEVEL EXCEPTION:
[apply] java.lang.IllegalArgumentException: already added: L.../android/android/lib/R$attr;
[apply]     at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
[apply]     at com.android.dx.dex.file.DexFile.add(DexFile.java:143)
[apply]     at com.android.dx.command.dexer.Main.processClass(Main.java:372)
[apply]     at com.android.dx.command.dexer.Main.processFileBytes(Main.java:346)
[apply]     at com.android.dx.command.dexer.Main.access$400(Main.java:59)
[apply]     at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:294)
[apply]     at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:244)
[apply]     at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:130)
[apply]     at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:108)
[apply]     at com.android.dx.command.dexer.Main.processOne(Main.java:313)
[apply]     at com.android.dx.command.dexer.Main.processAllFiles(Main.java:233)
[apply]     at com.android.dx.command.dexer.Main.run(Main.java:185)
[apply]     at com.android.dx.command.dexer.Main.main(Main.java:166)
[apply]     at com.android.dx.command.Main.main(Main.java:90)
[apply] 1 error; aborting

所以问题是我们的库根本没有添加或者添加了两次。 任何想法,ant构建文件如何构建品牌项目?

1 个答案:

答案 0 :(得分:3)

我也遇到了同样的错误,谷歌搜索带我到以下链接,它解决了我的问题。

Davlik bug? UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.IllegalArgumentException: already added: [classXXX]

以下是对该问题的解释,取自链接:

The (admittedly ugly) message is trying to tell you that you have in
fact managed to include two classes with the same fully-qualified name
(package + name) in your dx commandline. If you are using dx
implicitly via the Eclipse plugin (looks like you are), then you have
somehow managed to add the same classes twice in the Eclipse UI. 

在这里,您可能已在类路径中添加了两次类L.../android/android/lib/R。似乎两个或更多版本的自动生成的类R具有相同的包名称在您的类路径中。检查应用程序和库,以确保类R已放置在所有类中的不同包中。

希望这会有所帮助:)