Android查看第三方庫的依賴樹匯總

項目的開發(fā)過程中,我們或多或少都會引入第三方庫,引入的庫越多,越容易產(chǎn)生庫之間的依賴沖突。

下面就拿我遇到的問題還原一下:

之前接人容聯(lián)客服系統(tǒng)的時候,集成完成后進入客服頁面發(fā)生閃退,我們回顧一下錯誤信息:


我們關(guān)鍵看一下報錯代碼:

java.lang.NoSuchMethodError: No virtual method into (Landroid/widget/ImageView;)Lcom/bumptech/glide/request/target/Target; in class Lcom/a/a/i; or its super classes (declaration of 'com.a.a.i' appears in/data/app/com.sami91sami.h5-1/base.apk)

我們可以根據(jù)報錯,跳到報錯的地方:


該報錯的意思就是:沒有

into(Landroid/widget/ImageView)

的方法,代碼能編譯通過,說明項目中肯定是添加依賴了,那怎么還會報這個錯誤呢?還沒添加依賴之前,項目中也是使用的Glide進行圖片的加載,會不會是項目中的Glide與容聯(lián)Demo中的Glide有沖突呢。

我們可以根據(jù)報錯的地方into方法,點進入看源碼:


可以看到容聯(lián)Demo使用的Glide版本是3.7.0。

再來看看項目中Glide使用的版本:


可以看到項目中使用的Glide版本是4.5.0。

這時就想到真的很大概率是兩者的Glide版本有沖突了。

果然將容聯(lián)Demo中的Glide版本改成4.5.0之后,編譯運行進入客服界面后,沒有報錯了,完美解決。

這就是我之前遇到的庫沖突的問題,這個問題有錯誤信息可以定位到是Glide庫依賴的問題,要是遇到其它錯誤信息沒那么顯著的,那是不是就頭疼了呢。

當時遇到這個問題,我并沒有使用查看依賴樹的方式,而是直接查看了源碼,因為當時我并不知道還能這么干,幸運的是很快就定位到了問題所在,所以當我們升級第三方庫或者引入新的第三方庫時,庫與庫之間依賴沖突,我們需要知道每個第三方依賴庫的依賴樹,知道依賴樹就清楚哪里沖突啦。

下面就記錄下幾種查看依賴樹的方式:

方案一: Gradle task工具查看

1、點擊Android studio面板右上角“Gradle”,如圖所示:


2、按照如圖目錄找到dependencise雙擊,會在Run控制臺輸出打印,如圖所示:


3、打印如圖所示:

方案二:使用Gradle View插件

1、快捷鍵Ctrl+Alt+s,打開settings,然后點擊按鈕Plugins

2、搜索 Gradle View,然后安裝,并重啟Android Studio,我這是已經(jīng)安裝成功后的截圖


3、點擊菜單欄上View -> Tool Windows -> Gradle View,然后等待一會,就可以查看了。


如圖所示:

方案三:Terminal控制臺查看

在windows上Android studio Terminal中使用這個命令:

gradlew :app:dependencies(“app”為module名稱)

在MacOS中使用下面的命令:

./gradlew :app:dependencies(“app”為module名稱)

這個命令會將gradle執(zhí)行的各個步驟都打印出來,包括releaseUnitTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseRuntimeClasspath,releaseCompileClasspath,lintClassPath,debugUnitTestRuntimeClasspath等等。

那么,我們可以配置configuration 參數(shù)只查看其中一個的依賴樹就夠了。

 ./gradlew :app:dependencies --configuration compile

在Window系統(tǒng)下,無需使用./開頭,直接使用gradlew即可。

執(zhí)行app模塊下的dependencies任務(wù);額外配置compile,編譯環(huán)境下的依賴項。


通過查看依賴樹,我們就能看到哪些依賴有沖突,比如某個框架的support包沖突,只要在moudle的gradle文件下找到該沖突的依賴用括號括住,在后面加:

{
   exclude group:'com.android.support'
}

這要就可以把該框架的support包移除啦。

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

相關(guān)閱讀更多精彩內(nèi)容

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