【问题标题】:Build project containing lib project containing lib project with ant构建包含 lib 项目的项目,该项目包含带有 ant 的 lib 项目
【发布时间】:2011-12-30 19:17:15
【问题描述】:

我们的项目结构如下:

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

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

如果我们在 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 构建文件必须如何构建品牌项目?

【问题讨论】:

    标签: java android ant build


    【解决方案1】:

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

    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 类已放在所有它们的不同包中。

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多