Android組件化--不同的公共依賴管理方案

原創內容,轉載請註明出處 https://my.oschina.net/ccmagic/blog/3037094java

需求分析

最近在公司搞組件化,發現跟通常的只是在project的build.gradle中定義版本號或者單獨定義一個gradle文件來管理全部版本號。 可是這樣作還有一個問題:android

一、 project的build.gradle中定義管理的話,會致使build.gradle文件很大,總體感受有些凌亂。windows

二、單獨定義的版本管理的gradle文件雖然統一了版本號,可是各個module的依賴仍是要重複寫,而且替換第三方依賴的時候,要修改每一個module的build.gradle文件。固然也能夠把整個依賴全稱配置好,以下: versions.gradle文件app

ext.deps = [:]

def deps = [:]
//
deps.room_runtime = 'androidx.room:room-runtime:2.0.0'
deps.room_compiler = 'androidx.room:room-compiler:2.0.0'
deps.room_rxjava2 = 'androidx.room:room-rxjava2:2.0.0'
deps.room_guava = 'androidx.room:room-guava:2.0.0'
deps.room_testing = 'androidx.room:room-testing:2.0.0'
ext.deps = deps

再在project的build.gradle中引入文件:組件化

apply from: 'versions.gradle'

而後就能夠在module的build.gradle中直接引用了gradle

//room
    implementation deps.room_runtime
    annotationProcessor deps.room_compiler
    implementation deps.room_rxjava2
    implementation deps.room_guava
    testImplementation deps.room_testing

三、 可是上面這麼作,作統一版本管理和修改版本號都很簡單,只要修改versions.gradle文件對應項就行了。可是,要是出現須要刪除一些舊的依賴庫或者添加新的依賴庫仍是要四處修改。這種機械的重複勞動是一個android開發不能忍受的。因此有了如下方案:ui

正題來了:

簡單一點,咱們爲何不能把添加公共依賴的代碼放到一個公共方法裏,讓每一個module的build.gradle中的dependencies {}中直接調用這個方法不是更好?像下面這樣:this

dependencies {
    rootProject.allModuleDependencies(dependencies)
}

要作到這一點:.net

一、 咱們先自定義一個文件取名dependencies.gradle,在裏面定義公共依賴方法:code

static def allModuleDependencies(DependencyHandler dependencyHandler) {
    //room
    dependencyHandler.implementation 'androidx.room:room-runtime:2.0.0'
    dependencyHandler.annotationProcessor 'androidx.room:room-compiler:2.0.0'
    dependencyHandler.implementation 'androidx.room:room-rxjava2:2.0.0'
    dependencyHandler.implementation 'androidx.room:room-guava:2.0.0'
    dependencyHandler.testImplementation 'androidx.room:room-testing:2.0.0'
}
ext.allModuleDependencies = this.&allModuleDependencies

二、 而後在project的build.gradle的buildscript中添加代碼以下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    apply from: 'dependencies.gradle'
}

三、 而後就能夠在module下直接調用這個方法啦:

dependencies {
    rootProject.allModuleDependencies(dependencies)
}

還能夠吧。

另外說明,DependencyHandler這個類的路徑:

windows直接ctrl+鼠標左鍵直接能跳轉查看

有空能夠看看gradle源碼哦

相關文章
相關標籤/搜索