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,如有侵權,請聯絡刪除。