Gradle依賴沖突解決方式

問題

在Android開發(fā)中,相信遇到關(guān)于版本依賴的問題的同學(xué)有不少。雖然Android Studio一般都會(huì)自動(dòng)幫我們?nèi)ブ?,但是有時(shí)候去重失敗了還是需要手動(dòng)處理。在這里總結(jié)下自己長期遇到的各類問題的解決方式。
為了方便看效果,我們改下gradle解決策略為有版本沖突時(shí)自動(dòng)失敗,如下:

configurations.all {
    resolutionStrategy {
        failOnVersionConflict()
    }
}

當(dāng)我們同時(shí)依賴不同版本rxjava時(shí)編譯會(huì)報(bào)錯(cuò)如下:


gradle_fail.jpg

解決方案

1.統(tǒng)一版本管理

當(dāng)一個(gè)project下有多個(gè)module或library時(shí)很適合使用統(tǒng)一版本管理方式

  • 創(chuàng)建config.gradle
    在project目錄下創(chuàng)建config.gradle文件,將需要統(tǒng)一管理的加在里面,如下:
ext {
    //Dependencies
    supportLibraryVersion = '25.3.1'
    okHttpVersion = '3.8.0'
    domainTestDependencies = [
            appcompatv7: "com.android.support:appcompat-v7:${supportLibraryVersion}",
            okHttp     : "com.squareup.okhttp3:okhttp:${okHttpVersion}"
    ]
}
  • 在project下的build.gradle開頭加入
apply from: "config.gradle"
  • module或library下引用版本
    implementation rootProject.ext.dependencies["appcompatv7"]
    implementation rootProject.ext.dependencies["okHttp"]

2.去除沖突依賴

當(dāng)我們使用網(wǎng)上的一些開源庫,并且自己項(xiàng)目里面也用到了不同的版本庫時(shí),我們可以在依賴的開源庫中用exclude去除重復(fù)。
假如我們依賴的庫是com.carlos.test:Test:1.0.0,里面用到了rxjava和我們module用到了不同版本,那么我們可以這樣做:

    implementation ('com.carlos.test:Test:1.0.0') {
        exclude group: "io.reactivex.rxjava2",module: "rxjava"
        // exclude group: "io.reactivex.rxjava2:rxjava:2.1.11"
    }
    implementation 'io.reactivex.rxjava2:rxjava:2.1.13'

group為庫的groupId,module為artifactId。我們也可以直接用注釋中的方法指定具體的版本。

3.強(qiáng)制使用某版本依賴

我們也可以直接在策略里面強(qiáng)制使用某版本依賴

configurations.all {
    resolutionStrategy {
        force 'io.reactivex.rxjava2:rxjava:2.1.13'
    }
}

這樣就是強(qiáng)制rxjava使用2.1.13版本了。

總結(jié)

三種方式各有不同場(chǎng)景,適合自己的是最好的,如有遺漏或錯(cuò)誤歡迎指出。希望能互相交流學(xué)習(xí)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評(píng)論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139
  • 本文原作者為:kale2010 .blog地址:http://www.cnblogs.com/tianzhijie...
    NoValue閱讀 3,719評(píng)論 0 11
  • 最近的事情有些多,讓自己沒有時(shí)間靜下心來想事情,直接導(dǎo)致到心情的煩躁。在孤立無援時(shí),最先記起的是我的姥爺,...
    夏日鈴蘭_382a閱讀 241評(píng)論 0 0
  • 我最不喜歡的就是面條了 很久才吃一下 然而 我不喜歡吃的原因是我不會(huì)做……這世上總有人能做到我做不到的事情,所以也...
    夢(mèng)海蓉閱讀 342評(píng)論 0 0

友情鏈接更多精彩內(nèi)容