所以我试图让应用程序在工作中运行,但是我收到了这个错误:
任务执行失败':app:transformResourcesWithMergeJavaResForDebug'。 com.android.build.api.transform.TransformException:com.android.builder.packaging.DuplicateFileException:在APK org / snmp4j / util / doc-files / org_snmp4j_util.gif中复制的重复文件 File1:/Users/Kelson/Documents/AndroidStudioProjects/aspen-android/app/libs/snmp4j.jar File2:/Users/Kelson/Documents/AndroidStudioProjects/aspen-android/app/build/intermediates/exploded-aar/libscanmanager-release/jars/libs/snmp4j.jar File3:/Users/Kelson/Documents/AndroidStudioProjects/aspen-android/app/build/intermediates/exploded-aar/devicediscoverymanager-release/jars/libs/snmp4j.jar
我认为它抛出了这个错误,因为snmp4j.jar已经在app libs文件夹中,但是然后在libscanmanager和devicediscoverymanager aar文件中,snmp4j也包含在内并再次编译。我认为解决方案是从aar文件中删除snmp4j,但我无法弄清楚如何做到这一点。每次我尝试snmp4j都会在aar内重建。这是外部库选项卡中的文件外观。 link to pic
我认为发生的是每次运行它都会从classes.jar中的org.snmp4j重新编译snmp4j.jar,所以每次我尝试删除snmp4j.jar时都会重新创建它。手动删除org.snmp4j似乎不起作用。那么有没有办法删除它或阻止它编译?或者我是否必须先去libscanmanager和devicediscoverymanager的源代码并重新构建库,然后才能在主应用程序中使用它们?
或者这是完全错误的方法,我错过了一些非常明显的东西?
更新
所以我认为我找到了一个可能的跟踪解决方案,即添加排除命令,如此
compile(name: 'devicediscoverymanager-release', ext: 'aar') {
exclude module: 'snmp4j'
}
但我不太确定确切的语法,因此也没有用。我试过排除模块,用snmp4j.jar,snmp4j,org.snmp4j等排除组。问题可能是这是依赖关系,据我所知,snmp4j不依赖于库,它刚刚建成。有没有办法明确地将jars打包到apk中,而jars来自应用程序的外部库?
更新2
据这些人说: https://groups.google.com/forum/#!topic/adt-dev/g1AiJM7PeVs 我实际上不可能从aar文件中排除snmp4j。似乎需要重建库以不包括snmp4j
答案 0 :(得分:0)
我在应用程序的build.gradle文件中遇到了同样的问题 在android部分只需添加这段代码就可以了。
packagingOptions {
exclude 'give file name which for which error is occuring'
}
for example-
packagingOptions {
exclude 'META-INF/ASL2.0'
}