依賴衝突時的解決方法

MY就是我發表於2019-03-04

github:coolmaye
這篇文章是簡單介紹專案的依賴和依賴衝突時的解決方法

依賴型別

***implementation:***依賴方式僅僅侷限於“當前module”,優點增加編譯速度,對外隱藏呼叫介面

***api:***參與app的編譯和打包,是最普遍的依賴方法

***compileOnly:***參與編譯的過程,但不參與最後的打包。 在自己的module中依賴一些最常用的庫可以避免衝突
***runtimeOnly:***編譯時不參與,對外隱藏所有的介面,只參最後的打包

參考下面方法依賴衝突的解決方法

依賴衝突時的解決辦法

將兩種方式結合,親測絕對有效

1.點選Terminal 輸入gradlew -q app:dependencies回車即可將app中所依賴的庫展示出來

在這裡插入圖片描述

2.在module下的build.gradle的根節點下新增如下程式碼

    resolutionStrategy {
        failOnVersionConflict()//版本衝突時報錯

    }
}
複製程式碼

然後點選右上角 Sync Now 進行同步

這時衝突的版本號就會在Messages頁面中彈出,提示有以下版本的庫是衝突的

圖注:大少公眾號

3.這時我們有[兩個]處理辦法

直接統一法:將所有出現的版本號統一指定為當前版本

configurations.all {
    resolutionStrategy {
        failOnVersionConflict()//版本衝突時報錯
        force `com.squareup.okio:okio:1.15.0`//強制指定版本

    }
}
複製程式碼

當打包時報錯的類被處理後,// failOnVersionConflict()該方法,然後重新打包。

移除異己法:選中okio:1.13.0欄位回到Terminal中按Ctrl+F搜尋該庫在哪個依賴中使用,搜尋到後,找到build.gradle中的該依賴,將對應的包去除

 implementation (`com.squareup.okhttp3:okhttp:3.9.0`){

        exclude group: `com.squareup.okio`
 }
複製程式碼

重新編譯即可發現衝突被解決

4.注意

gradle會用自動採用最新版本庫的方法遮蔽掉大部分的衝突問題,但極小部分的(也就是編譯時報錯的)就需要我們手動去處理了,一般以上方法都是針對於處理打包時報錯的相關庫,請大家有針對的對於這些庫進行排查。

相關文章