从应用程序和Android库项目访问公共jar文件

从应用程序和Android库项目访问公共jar文件,android,android-ndk,static-libraries,android-library,Android,Android Ndk,Static Libraries,Android Library,我有一个静态java库(classes.jar)文件,它有一个Android库项目通用的源代码和一个调用这个Android库项目的依赖应用程序 我使用ant env在linux机器上编译代码 但是,当我将这个jar文件包含在ALP和App的libs文件夹下时,会出现以下编译错误: [dex] Converting compiled files and external libraries into classes.dex... [dx] [dx] UNEXPECTE

我有一个静态java库(classes.jar)文件,它有一个Android库项目通用的源代码和一个调用这个Android库项目的依赖应用程序

我使用ant env在linux机器上编译代码


但是,当我将这个jar文件包含在ALP和App的libs文件夹下时,会出现以下编译错误:

[dex] Converting compiled files and external libraries into classes.dex...
       [dx] 
       [dx] UNEXPECTED TOP-LEVEL EXCEPTION:
       [dx] java.lang.IllegalArgumentException: already added: Lcom/android/test/ProgramCache;
       [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

我该如何解决这个普通jar的问题呢?

希望我不会把在eclipse中构建android项目的规则与在ant中使用android工具链构建项目的规则混为一谈。。。(幸运的是,你不必像我一样同时做这两件事:)

android共享库的/libs文件夹中的任何jar文件都会自动包含在命令行android构建工具中。虽然我不记得它们是在磁盘上复制的,还是只在编译过程中添加到构建路径,但只要从App/libs中删除jar就足够了


另一个建议是,在处理这个问题时,蚂蚁要尽早并经常清理。很容易意外地将某些类构建到一个项目JAR中,然后发生冲突

“当我将这个jar文件包含在ALP和App的libs文件夹下时”。如果应用程序中没有包含它,会发生什么?可能它已经得到解析/包含,因为应用程序依赖于ALP?如果我不在应用程序中包含jar,它将为应用程序正在使用的所有jar API提供编译错误。我想使我的应用程序成为可插入的。因此,我们不想采用共享库的概念,即库将存储在sdk中。您能否指定一个设计,使我的整个代码(包括jar代码)都位于我的apk下?