????在A(yíng)ndroid開(kāi)發(fā)過(guò)程中會(huì)總會(huì)引入一些第三方依賴(lài)庫(kù),無(wú)可避免的會(huì)遇到j(luò)ar/aar包沖突拦宣,Manifest合并沖突较坛,資源沖突等問(wèn)題
????基于此本次主要記錄下如何處理類(lèi)沖突,jar/aar版本沖突秉版。先由常見(jiàn)的com.ta.utdid2.a.a.a found in modules alicloud-android-utdid-2.5.2 android-utdid沖突入手无牵,常見(jiàn)于支付寶sdk和友盟Sdk的沖突。
磨刀不誤砍材工,在處理沖突問(wèn)題前谤狡,要先了解下如何查看Gradle依賴(lài)樹(shù)灸眼,在A(yíng)S的Terminal里輸入 gradle :app:dependencies 即可查看gradle依賴(lài)樹(shù)。輸出結(jié)果如下(示意)
輸出依賴(lài)樹(shù)后墓懂,在里面搜索android-utdid焰宣,會(huì)發(fā)現(xiàn)有多個(gè)第三方庫(kù)對(duì)utdid存在引入關(guān)系。
經(jīng)過(guò)查看得知utdid我依賴(lài)為:com.aliyun.ams:alicloud-android-utdid:2.5.2
該依賴(lài)庫(kù)的Group為com.aliyun.ams捕仔。module為alicloud-android-utdid
下面要做的就是去除其他依賴(lài)對(duì)utdid的引入匕积,僅保留一次有效的引用關(guān)系即可。
implementation ('com.xxx:yyy:0.0.0.4'){
? ? ? ? exclude module: 'alicloud-android-utdid'
? ? }
implementation ('com.aaa:bbb:0.4'){
? ? ? ? exclude module: 'alicloud-android-utdid'
? ? }
????常規(guī)查閱資料大家推薦去除重復(fù)引入的方法都是exclue group逻澳。實(shí)際上如該group下的依賴(lài)項(xiàng)較多,且只想去除某一個(gè)依賴(lài)時(shí)暖呕,這時(shí)使用exclude module能更細(xì)節(jié)且準(zhǔn)確的控制去除某一項(xiàng)的引用關(guān)系斜做。
以上為utdid的處理方式
關(guān)于微信sdk沖突的處理方式
????問(wèn)題背景:我方已集成wechat-sdk-android-with-mta sdk用作分享和支付功能,隨著業(yè)務(wù)發(fā)展需要接入一個(gè)第三方業(yè)務(wù)Sdk湾揽,該Sdk內(nèi)部具備支付功能瓤逼,他們也進(jìn)行了wechat-sdk-android-with-mta的引入,且兩個(gè)微信sdk的版本不一致库物。
????此時(shí)如果進(jìn)行打包就會(huì)爆出各種com.tecent.xx的類(lèi)沖突霸旗。
????處理方式參照支付寶sdk的沖突方式
? ? implementation ('com.xxx:zzz:0.6'){
? ? ? ? exclude module: 'wechat-sdk-android-with-mta'
? ? }
? 關(guān)于百度地圖API_KEY沖突的處理方式
? 百度地圖需要在主工程的Manifest里注冊(cè)一個(gè)API_KEY。如此時(shí)引入的第三方Sdk里同樣有百度地圖戚揭,且已經(jīng)在內(nèi)部注冊(cè)了com.baidu.lbsapi.API_KEY诱告。
? 此時(shí)會(huì)出現(xiàn)Manifest.xml的合并沖突。解決方式為增加tools:replace="android:value"屬性即可
? ? ? ? ? <meta-data
? ? ? ? ? ? android:name="com.baidu.lbsapi.API_KEY"
? ? ? ? ? ? android:value=""
? ? ? ? ? ? tools:replace="android:value"/>
? ? 在開(kāi)發(fā)中不同第三方Sdk對(duì)基礎(chǔ)依賴(lài)的版本會(huì)發(fā)生變化民晒,比如ktx和compact的版本精居。需要強(qiáng)制指定這些基礎(chǔ)依賴(lài)的版本統(tǒng)一
? ? 方式為在build.gradle(app)里增加
? ? configurations.all{
? ? resolutionStrategy.force'androidx.core:core-ktx:1.8.0-alpha01'
? ? }
? ? 后續(xù)將持續(xù)添加AndroidStudio里各種沖突的處理方式。