如何在aar文件中删除jar文件?

时间:2015-12-03 19:06:10

标签: android gradle jar aar

所以我试图让应用程序在工作中运行,但是我收到了这个错误:

  

任务执行失败':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

1 个答案:

答案 0 :(得分:0)

我在应用程序的build.gradle文件中遇到了同样的问题         在android部分只需添加这段代码就可以了。

 packagingOptions {
        exclude 'give file name which for which error is occuring'

    }
    for example-

    packagingOptions {
        exclude 'META-INF/ASL2.0'

    }