問題描述
有時候項目依賴的com.android.support:support-v4的版本會遇到和其他依賴庫中com.android.support:support-v4的版本發(fā)生沖突的情況立镶。例如我項目中使用的22.2.1版本灶搜,但是引入的最新的Fresco中依賴的是23的版本绘雁,由于Fragment的源碼有變化導(dǎo)致之前的版本出現(xiàn)問題。這是由于默認(rèn)情況下會優(yōu)先高版本的依賴庫。這種時候需要我們?nèi)ナ謩优懦蕾嚒?/p>
解決方案
檢查依賴報告:
當(dāng)你運行dependencies任務(wù)時岩馍,這個依賴樹會打印出來粱檀,依賴樹顯示了你build腳本聲明的頂級依賴和它們的傳遞依賴:
+--- project :photoAlbum
| +--- com.android.support:support-v4:22.2.1 ->23.1.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.android.support:support-v4:23.1.1()
| | | | --- com.facebook.fresco:fbcore:0.10.0
| | +--- com.facebook.fresco:fbcore:0.10.0
| | --- com.facebook.fresco:imagepipeline:0.10.0
| | +--- com.android.support:support-v4:23.1.1 ()
| | +--- 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
這個是我項目中的一個module,頂級依賴中使用的是23.1.1迫像。仔細(xì)觀察你會發(fā)現(xiàn)有些傳遞依賴標(biāo)注了號劈愚,表示這個依賴被忽略了,這是因為其他頂級依賴中也依賴了這個傳遞的依賴闻妓,Gradle會自動分析下載最合適的依賴菌羽。有些依賴形如22.2.1 ->23.1.1是由于默認(rèn)會優(yōu)先版本高的依賴.這個時候你想使用版本低的依賴的話需要排除掉高的依賴。因此這里需要排除Fresco里面的supportV4依賴由缆。
排除依賴:
compile('com.facebook.fresco:fresco:0.10.0') {
exclude module: 'support-v4'
}
重新sync一下注祖,再打印出依賴樹,發(fā)現(xiàn)結(jié)果如下:
+--- 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
這樣就發(fā)現(xiàn)成功排除掉了fresco中的supportV4包均唉,轉(zhuǎn)而使用頂級依賴中的22.2.1的版本是晨。