1.出现场景
我们在工程中通常会引用很多第三方的jar包,来丰富自己的项目。比较常见的v4包的冲突大家都知道如何解决,这里描述的是一种不同jar包中在META-INF文件夹下出现冲突的解决方案。
2. 冲突日志
我们在编译工程时很容易就可以看到冲突日志,比如下面的:
Error:Execution failed for task ':XXX:transformResourcesWithMergeJavaResForRelease'.
> com.android.build.api.transform.TransformException:
com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE
File1: D:\...\libs\httpmime-4.0.jar
File2: D:\...\libs\apache-mime4j-0.6.jar
这里httpmime-4.0.jar与apache-mime4j-0.6.jar是两个不同的jar,在META-INF下却存在相同的文件。
3.解决方案
遇到该问题也无非是去除或者过滤冲突的文件。
我们需要在上面jar包对应的module下的build.gradle文件中增加如下内容:
//为了解决部分第三方库重复打包了META-INF的问题
android {
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/notice.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/DEPENDENCIES'
}
}
需要注意的是我们这代码需要加在jar包对应的module的.gradle文件中,放在android { }里面就好了(放在其他module或者app下貌似不生效)。