Gradle解決依賴衝突
阿新 • • 發佈:2018-12-31
問題描述
有時候專案依賴的com.android.support:support-v4的版本會遇到和其他依賴庫中com.android.support:support-v4的版本發生衝突的情況。例如我專案中使用的22.2.1版本,但是引入的最新的Fresco中依賴的是23的版本,由於Fragment的原始碼有變化導致之前的版本出現問題。這是由於預設情況下會優先高版本的依賴庫。這種時候需要我們去手動排除依賴。
解決方案
- 檢查依賴報告:
當你執行dependencies任務時,這個依賴樹會打印出來,依賴樹顯示了你build指令碼宣告的頂級依賴和它們的傳遞依賴:
這個是我專案中的一個module,頂級依賴中使用的是23.1.1。仔細觀察你會發現有些傳遞依賴標註了*號,表示這個依賴被忽略了,這是因為其他頂級依賴中也依賴了這個傳遞的依賴,Gradle會自動分析下載最合適的依賴。有些依賴形如22.2.1 ->23.1.1是由於預設會優先版本高的依賴.這個時候你想使用版本低的依賴的話需要排除掉高的依賴。因此這裡需要排除Fresco裡面的supportV4依賴。+--- project :photoAlbum
- 排除依賴:
重新sync一下,再打印出依賴樹,發現結果如下:compile('com.facebook.fresco:fresco:0.10.0') { exclude module: 'support-v4' }
這樣就發現成功排除掉了fresco中的supportV4包,轉而使用頂級依賴中的22.2.1的版本。+--- project :photoAlbum | +--- com.android.support:support-v4:22.2.1 (*) | +--- com.actionbarsherlock:actionbarsherlock:4.4.0 | +--- pl.droidsonroids.gif:android-gif-drawable:1.1.7 | +--- com.qiniu:qiniu-android-sdk:7.0.6 | | \--- com.loopj.android:android-async-http:1.4.6 -> 1.4.7 | +--- com.nostra13.universalimageloader:universal-image-loader:1.9.1 | +--- com.loopj.android:android-async-http:1.4.7 | +--- com.umeng.analytics:analytics:5.4.2 | +--- com.facebook.fresco:fresco:0.10.0 | | +--- com.facebook.fresco:drawee:0.10.0 | | | \--- com.facebook.fresco:fbcore:0.10.0 | | +--- com.facebook.fresco:fbcore:0.10.0 | | \--- com.facebook.fresco:imagepipeline:0.10.0 | | +--- com.nineoldandroids:library:2.4.0 | | +--- com.facebook.fresco:fbcore:0.10.0 | | +--- com.facebook.fresco:imagepipeline-base:0.10.0 | | | +--- com.nineoldandroids:library:2.4.0 | | | +--- com.facebook.fresco:fbcore:0.10.0 | | | \--- com.parse.bolts:bolts-android:1.1.4 | | \--- com.parse.bolts:bolts-android:1.1.4