1. 程式人生 > >Gradle 依賴管理

Gradle 依賴管理

在Gradle中新增第三方庫的依賴一直很方便,新增一條字串就可以實現第三方庫的自動下載,修改版本數字就能控制第三方庫的版本。

但是好用也不能亂用,畢竟都是字串的複製貼上,缺乏好的管理會對一個專案的長期維護造成不必要的麻煩。比如Android的官方支援庫隔一段時間就會升級,如果有很多module那麼光改個版本號就很麻煩了。

我最討厭麻煩,所以寫專案的過程中摸索出了以下兩種我覺得比較好的方式去管理依賴(只針對安卓工程)

控制支援庫的版本

在工程根目錄下的gradle.properties檔案裡可以建立一個全域性的常量

SUPPORT_LIBRARY_VERSION=25.3.1

新增Android支援庫依賴時版本號用這個常量替代(注意用雙引號)

dependencies {
    compile "com.android.support:appcompat-v7:${SUPPORT_LIBRARY_VERSION}"
    compile "com.android.support:cardview-v7:${SUPPORT_LIBRARY_VERSION}"
    compile "com.android.support:recyclerview-v7:${SUPPORT_LIBRARY_VERSION}"
    compile "com.android.support:design:${SUPPORT_LIBRARY_VERSION}
"
}

這樣就可以簡單的管理Android支援庫的版本,升級支援庫版本的時候只需要改一個地方就可以了。當然,這隻做到了對版本號的統一管理,如果要對依賴進行徹底的集中化配置,可以參考下面的做法。

集中管理所有依賴

在Project的build.gradle檔案中引用一個外部檔案

apply from: 'dependencies.gradle'

在Project的build.gradle同級目錄下建立一個新的檔案dependencies.gradle,然後可以在這裡建立一些外部變數

ext {
    supportLibraryVersion = '25.3.1'

    compileDependencies = [
            appcompat_v7:       "com.android.support:appcompat-v7:${supportLibraryVersion}
"
, cardview_v7: "com.android.support:cardview-v7:${supportLibraryVersion}", recyclerview_v7: "com.android.support:recyclerview-v7:${supportLibraryVersion}", design: "com.android.support:design:${supportLibraryVersion}", support_v4: "com.android.support:support-v4:${supportLibraryVersion}", support_annotations:"com.android.support:support-annotations:${supportLibraryVersion}", okHttp: 'com.squareup.okhttp3:okhttp:3.3.1', gson: 'com.google.code.gson:gson:2.8.0', rxJava: 'io.reactivex.rxjava2:rxjava:2.0.8', rxAndroid: 'io.reactivex.rxjava2:rxandroid:2.0.1' ] testDependencies = [ junit: 'junit:junit:4.12', mockito: 'org.mockito:mockito-core:1.9.5', assertj: 'org.assertj:assertj-core:1.7.1', espresso: 'com.android.support.test.espresso:espresso-core:2.2.2', robolectric: 'org.robolectric:robolectric:3.1.1' ] }

然後在新增依賴時就是使用這些變量了

dependencies {

    def compileDependencies = rootProject.ext.compileDependencies
    def testDependencies = rootProject.ext.testDependencies

    compile compileDependencies.appcompat_v7
    compile compileDependencies.rxJava

    testCompile testDependencies.junit
    testCompile testDependencies.mockito

    ....
}

最後,以防一些新手誤會,要說明下,建立一個dependencies.gradle檔案並不是必須的,你也可以直接寫在Project的build.gradle裡面。我只是想分的清楚一點��

參考資料