一孵奶、問(wèn)題的產(chǎn)生
1.1 引入的支持庫(kù)版本和編譯版本不一致
相信大家在
build.gradle
中引入各種依賴的時(shí)候司忱,或多或少會(huì)見(jiàn)過(guò)一些紅線,gradle
會(huì)提示你锄蹂,當(dāng)前的編譯版本和你依賴的這個(gè)支持庫(kù)的版本號(hào)不同氓仲,應(yīng)該使用相同的支持庫(kù)版本,來(lái)比避免編譯不通過(guò)問(wèn)題得糜,類似于這種敬扛。
This support library should not use a different version (27) than the compileSdkVersion (26)
1.2 第三方庫(kù)中的子依賴和當(dāng)前項(xiàng)目的編譯版本不一致。
當(dāng)引入一個(gè)第三方庫(kù)朝抖,該庫(kù)中也依賴了
Android
支持庫(kù)啥箭,且支持庫(kù)的版本,和當(dāng)前版本不一致而導(dǎo)致的版本沖突:
二治宣、如何解決
解決沖突的方式包括:強(qiáng)制指定急侥,排除。
2.1 查看依賴樹(shù)
Gradle 默認(rèn)開(kāi)啟了 依賴傳遞 意思就是 項(xiàng)目依賴了A侮邀,A又依賴了B和C坏怪,這時(shí)候,我們只需要寫(xiě)一行代碼:
implementation A
就行了绊茧,由傳遞依賴導(dǎo)致的沖突铝宵,默認(rèn)是以最高版本的依賴為準(zhǔn),要想查看整個(gè)項(xiàng)目的依賴傳遞關(guān)系华畏,使用命令:
./gradlew app:dependencies --configuration releaseRuntimeClasspath
app
是具體的module
捉超。
releaseRuntimeClasspath
是具體的variants
類型胧卤。
符號(hào)的含義:
-
x.x.x (*)
該依賴已經(jīng)有了,將不再重復(fù)依賴拼岳。 -
x.x.x -> x.x.x
該依賴的版本被箭頭所指的版本代替枝誊。 -
x.x.x -> x.x.x(*)
該依賴的版本被箭頭所指的版本代替,并且該依賴已經(jīng)有了惜纸,不再重復(fù)依賴叶撒。
2.2 Exclude 排除
-
排除所有:
// 在build.gradle 中添加下面節(jié)點(diǎn)configurations{ all*.exclude module: "support-fragment"}
-
排除指定:
implementation ('com.github.bumptech.glide:glide:4.7.1'){ exclude module:"support-fragment" }
exclude 可以搭配
group
和module
使用,將會(huì)排除所有被匹配的依賴耐版。
2.3 Force 強(qiáng)制指定
強(qiáng)制指定依賴的版本祠够。
configurations.all {
resolutionStrategy {
force 'com.android.support:support-fragment:26.1.0'
}
}