1. 程式人生 > 其它 >Android Studio檢視第三方庫依賴樹

Android Studio檢視第三方庫依賴樹

專案的開發過程中,我們或多或少都會引入第三方庫,引入的庫越多,越容易產生庫之間的依賴衝突。

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

之前接人容聯客服系統的時候,整合完成後進入客服頁面發生閃退,我們回顧一下錯誤資訊:

我們關鍵看一下報錯程式碼:

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)

我們可以根據報錯,跳到報錯的地方:

該報錯的意思就是:沒有

into(Landroid/widget/ImageView)

的方法,程式碼能編譯通過,說明專案中肯定是新增依賴了,那怎麼還會報這個錯誤呢?還沒新增依賴之前,專案中也是使用的Glide進行圖片的載入,會不會是專案中的Glide與容聯Demo中的Glide有衝突呢。

我們可以根據報錯的地方into方法,點進入看原始碼:

可以看到容聯Demo使用的Glide版本是3.7.0。

再來看看專案中Glide使用的版本:

可以看到專案中使用的Glide版本是4.5.0。

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

果然將容聯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,我這是已經安裝成功後的截圖

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

如圖所示:

方案三:Terminal控制檯檢視

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

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

在MacOS中使用下面的命令:

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

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

那麼,我們可以配置configuration 引數只檢視其中一個的依賴樹就夠了。

 ./gradlew :app:dependencies --configuration compile

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

執行app模組下的dependencies任務;額外配置compile,編譯環境下的依賴項。

通過檢視依賴樹,我們就能看到哪些依賴有衝突,比如某個框架的support包衝突,只要在moudle的gradle檔案下找到該衝突的依賴用括號括住,在後面加:

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

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

本文轉自https://juejin.cn/post/7039918795242569765,如有侵權,請聯絡刪除。