我试图在新的裸机Android Studio项目中包含一个库。Gradle在包含库时出现'IllegalArgumentException:已添加'失败
我模块的build.gradle包含以下内容:
repositories {
mavenCentral()
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'org.jmrtd:jmrtd:0.5.0-RELEASE'
}
构建和运行在preDexDebug步用下面的堆栈跟踪失败:
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lnet/sf/scuba/data/Country;
at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
at com.android.dx.command.dexer.Main.processClass(Main.java:732)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
at com.android.dx.command.dexer.Main.access$300(Main.java:83)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:632)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)
1 error; aborting
现在,我已经找了所有可能导致此问题的明显问题(包含多个图书馆),但似乎无法找到罪魁祸首。该库只包含一次,除了Android支持库外,它是唯一的依赖项。
错误的包含似乎源自JMRTD内的传递依赖。排除或包括这个图书馆(水肺)似乎没有什么区别。
我也试过在我的libs文件夹中手动添加库,但我遇到同样的问题。
有趣的是,如果我排除传递依赖完全像这样...
configurations {
all*.exclude group: 'net.sf.scuba', module: 'scuba-smartcards'
}
...的preDexDebug步骤在不同的文件失败(这是本地库的一部分,并从一个依赖不包括):
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lorg/jmrtd/BACDeniedException;
at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
旁注:失败的文件中列出的第一个文件,如果你按字母顺序查看罐子里的内容,这表明所有的类文件会以同样的方式失败。
有没有我不知道的内部重复?我包括的工件在检查时看起来很好,但是从回购中获取的文件的格式可能存在问题吗?
谢谢!
声明:我是Android和Gradle的新手。尽管Maven和Java我有丰富的经验。
我按照建议修正了我的ant脚本(jar任务直接从Sonatype示例中复制,它看起来像重复只出现在构建于OS X而不是Linux上)。感谢您报告@halvdanhg。 – martijno 2015-07-16 08:01:33
@halvdanhg你好,你会偶然有那些jar吗?我有完全相同的问题,我需要这个库的确切版本。你介意给我一些你用来编译源代码的详细命令吗? – lweingart 2015-10-27 14:59:44
@lweingart这是我的解决方案中所有非常详细的描述:我在build xml文件中为每个ant任务添加了duplicate =“preserve”并运行构建。值得注意的是,构建需要在系统上提供一些依赖关系,并为它们设置env变量。你会从构建文件本身中找出它。话虽如此,图书馆的新版本没有这些问题,所以你应该使用这些。 – halvdanhg 2015-10-28 20:38:41