在Android开发过程中会总会引入一些第三方依赖库,无可避免的会遇到jar/aar包冲突,Manifest合并冲突,资源冲突等问题
基于此本次主要记录下如何处理类冲突,jar/aar版本冲突。先由常见的com.ta.utdid2.a.a.a found in modules alicloud-android-utdid-2.5.2 android-utdid冲突入手,常见于支付宝sdk和友盟Sdk的冲突。
磨刀不误砍材工,在处理冲突问题前,要先了解下如何查看Gradle依赖树,在AS的Terminal里输入 gradle :app:dependencies 即可查看gradle依赖树。输出结果如下(示意)
输出依赖树后,在里面搜索android-utdid,会发现有多个第三方库对utdid存在引入关系。
经过查看得知utdid我依赖为:com.aliyun.ams:alicloud-android-utdid:2.5.2
该依赖库的Group为com.aliyun.ams。module为alicloud-android-utdid
下面要做的就是去除其他依赖对utdid的引入,仅保留一次有效的引用关系即可。
implementation ('com.xxx:yyy:0.0.0.4'){
exclude module: 'alicloud-android-utdid'
}
implementation ('com.aaa:bbb:0.4'){
exclude module: 'alicloud-android-utdid'
}
常规查阅资料大家推荐去除重复引入的方法都是exclue group。实际上如该group下的依赖项较多,且只想去除某一个依赖时,这时使用exclude module能更细节且准确的控制去除某一项的引用关系。
以上为utdid的处理方式
关于微信sdk冲突的处理方式
问题背景:我方已集成wechat-sdk-android-with-mta sdk用作分享和支付功能,随着业务发展需要接入一个第三方业务Sdk,该Sdk内部具备支付功能,他们也进行了wechat-sdk-android-with-mta的引入,且两个微信sdk的版本不一致。
此时如果进行打包就会爆出各种com.tecent.xx的类冲突。
处理方式参照支付宝sdk的冲突方式
implementation ('com.xxx:zzz:0.6'){
exclude module: 'wechat-sdk-android-with-mta'
}
关于百度地图API_KEY冲突的处理方式
百度地图需要在主工程的Manifest里注册一个API_KEY。如此时引入的第三方Sdk里同样有百度地图,且已经在内部注册了com.baidu.lbsapi.API_KEY。
此时会出现Manifest.xml的合并冲突。解决方式为增加tools:replace="android:value"属性即可
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value=""
tools:replace="android:value"/>
在开发中不同第三方Sdk对基础依赖的版本会发生变化,比如ktx和compact的版本。需要强制指定这些基础依赖的版本统一
方式为在build.gradle(app)里增加
configurations.all{
resolutionStrategy.force'androidx.core:core-ktx:1.8.0-alpha01'
}
后续将持续添加AndroidStudio里各种冲突的处理方式。