Gradle构建之-资源冲突问题
我们在构建项目时,经常会导入各种第三方jar、aar,在编译的过程中,你是否碰到过类似于下面这样的异常?
乍一看,可能不知道无从下手,因为它并不像其他资源冲突的情况,会直接告诉你哪个资源冲突了。遇到这样情况,我们可以分三步走:
1.寻找冲突源头
通过AndroidStudio->Navigate->class,输入你需要查找的资源名,像上面这种情况,我们输入 com.ta.utdid2.b.a.b 查找后,输出如下:
2.分析冲突点
通过1,我们知道了问题出在alipaySdk.jar 跟 utdid4all.jar上,那么我们打开对应的路径来看看:
看见没,这两个jar竟然拥有相同的路径!!继续找到 异常给出的具体类 com.ta.utdid2.b.a.b 跟 com.ta.utdid2.b.a.d$a,通过查看类 b 跟 d&a,我们终于知道了,原来d&a 实现了一个类b,而这个b的路径又跟另一个jar中的com.ta.utdid2.b.a.b 路径完全相同,所以才出现资源冲突问题。
3.解决方法
既然我们已经知道了问题所在,那么我们就可以通过gradle构建中的exlude语法来将相同资源去除,使用方法:
api('xxx.xxx.xxx.abc.jar'){
exclude module: 'abc'
}
或者:
api('xxx.xxx.xxx.abc.jar'){
exclude group: 'xxx.xxx.xxx', module: 'abc'
}
这里我为了省事,直接将utdid4all.jar去重了,方法是 在你引入且可能引用utdid4all.jar的jar下添加如下代码,比如:
implementation ('com.taobao.android:sgmiddletieraar3:5.4.9@aar'){
exclude module: 'utdid4all'
}