所以我试图让一个应用程序在工作中运行,但出现此错误:



我认为这是引发此错误的原因,因为snmp4j.jar已存在于应用程序li​​bs文件夹中,但随后在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不是库的依赖关系,只是正在 build 。有没有一种方法可以将 jar 专门从应用程序的外部库中打包出来,而不专门将 jar 打包到apk中?

更新2

因此,根据这些家伙:
https://groups.google.com/forum/#!topic/adt-dev/g1AiJM7PeVs
我实际上不可能从aar文件中排除snmp4j。似乎需要重建库以不包含snmp4j

最佳答案

我遇到了同样的问题,所以在您的应用程序的build.gradle文件中
在android部分中,只需添加此代码块即可

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

    }
    for example-

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

    }

08-19 13:05