【Gradle】關(guān)于jar包沖突

前陣子看到一篇文章,大致意思是說年底之前,不支持權(quán)限管理的應(yīng)用會(huì)無法安裝,出現(xiàn)各種各樣的問題云云
所以趁最近不忙,升級(jí)targetSdkVersion到25,添加權(quán)限策略。
早干嘛去了?公司就一個(gè)安卓,忙不過來(其實(shí)是懶)。


如果編譯出現(xiàn) transformDexArchiveWithExternalLibsDexMergerForDebug 字樣,不要懷疑,這是包沖突。
我是引入PermissionsDispatcher的時(shí)候,報(bào)出的異常,因?yàn)樗陨硪惨昧?br> com.android.support:support-compat:27.1.1
com.android.support:support-v13:25.3.1
兩個(gè)包。

出現(xiàn)問題,首先是排查手段。

確定沖突的包

1,通過android studio自帶的gradle工具

androidDependencies

從編譯器右側(cè)找到這個(gè)Gradle,依次打開目錄,找到androidDependencies雙擊,幾秒鐘之后,會(huì)有一個(gè)長(zhǎng)長(zhǎng)的依賴庫的列表展示在下方,如果你的依賴比較少的話,到這里就可以開始排查了,但是如果依賴很多的話,嗯,要瞎。
(ノ`ー′)ノ~~┻━┻

2,通過gradlew指令

打開terminal,此時(shí)的路徑應(yīng)該為項(xiàng)目根目錄,直接輸入
gradlew -q app:dependencies
其中app換成你想要看依賴的module的名稱,我只有一個(gè)名為app的module,就直接復(fù)制上去了。
回車之后稍等幾秒,terminal界面會(huì)為我們顯示一個(gè)依賴包的樹結(jié)構(gòu),

這個(gè)跟上頭那個(gè)差不多,但是好歹有樹結(jié)構(gòu),細(xì)細(xì)看兩眼,大概就能確定沖突的位置了。

3,插件查看

有這個(gè)一個(gè)插件,叫做gradle view,是專門用來查看依賴樹結(jié)構(gòu)的。
我們照例打開File->settings,然后按圖搜索并安裝插件。
我的已經(jīng)安裝了,所以不顯示安裝按鈕。

搜索1.png
搜索2.png

之后重啟Android Studio
不重啟不顯示。

使用.png

在View->Tool Windows菜單里找到剛剛安裝的gradle view,點(diǎn)擊打開,稍等一會(huì)。
我們會(huì)看到類似于下圖的一個(gè)可打開的菜單。

樹結(jié)構(gòu).png

我比較推薦這個(gè)方法,因?yàn)闆]有記憶負(fù)擔(dān),而且不至于一屏太多東西,看的眼花。

解決包沖突

確定問題之后,解決問題就很簡(jiǎn)單了,可以使用exclude指令,簡(jiǎn)單高效,寫法類似于下面代碼。


    implementation('com.github.hotchemi:permissionsdispatcher:2.4.0') {
        exclude group: 'com.android.support'
        // 或者
        //  exclude module: "support-v13"
    }

最后,沒有升級(jí)targetSdkVersion的朋友們趕快升級(jí),另推薦一篇博文可以看一下。
《Android targetSdkVersion 從22提到25 你需要知道的一切》


個(gè)人理解,難免有錯(cuò)誤紕漏,歡迎指正。轉(zhuǎn)載請(qǐng)注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容