从应用程序和Android库项目访问公共jar文件
我有一个静态java库(classes.jar)文件,它有一个Android库项目通用的源代码和一个调用这个Android库项目的依赖应用程序 我使用ant env在linux机器上编译代码从应用程序和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
但是,当我将这个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下?