Gradle构建之-资源冲突问题

在Gradle构建项目时,导入第三方库可能导致资源冲突。本文介绍了一种异常情况,即没有明确指出冲突资源的错误。通过Android Studio的类搜索定位到冲突源头——alipaySdk.jar和utdid4all.jar,发现它们有相同路径的类。分析发现类实现导致冲突。解决方法是利用Gradle的exclude规则排除冲突的资源,具体操作为在相关依赖中添加exclude语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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'
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fastsy

打赏一份隆江猪脚饭吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值