Android Gradle模塊依賴替換使用技巧

背景

我們在多模塊項目開發過程中,會遇到這樣的場景,工程裡依賴瞭一個自己的或者其他同事的 aar 模塊,有時候為瞭開發調試方便,經常會把 aar 改為本地源碼依賴,開發完畢並提交的時候,會再修改回 aar 依賴,這樣就會很不方便,開發流程圖示如下:

解決

一開始我們通過在 appbuild.gradle 裡的 dependency 判斷如果是需要本地依賴的 aar,就替換為 implementation project 依賴,偽代碼如下:

dependencies {
    if(enableLocalModule) {
        implementation 'custom:test:0.0.1'
    } else {
        implementation project(path: ':test')
    }
}

這樣就可以不用每次提交代碼還要修改回 aar 依賴,但是如果其他模塊如果也依賴瞭該 aar 模塊,就會出現問題,雖然可以繼續修改其他模塊裡的依賴方式,但是這樣就會有侵入性,而且不能徹底解決問題,仍然有可能出現本地依賴和 aar 依賴的代碼不一致問題。

Gradle 官方針對這種場景提供瞭更好的解決方式 DependencySubstitution,使用方式如下:

步驟1:

settting.gradle,添加如下代碼:

// 加載本地 module
if (file("local.properties").exists()) {
    def properties = new Properties()
    def inputStream = file("local.properties").newDataInputStream()
    properties.load( inputStream )
    def moduleName = properties.getProperty("moduleName")
    def modulePath = properties.getProperty("modulePath")
    if (moduleName != null && modulePath != null) {
        include moduleName
        project(moduleName).projectDir = file(modulePath)
    }
}

步驟2:

appbuild.gradle 添加以下代碼

configurations.all {
    resolutionStrategy.dependencySubstitution.all { DependencySubstitution dependency ->
        // use local module
        if (dependency.requested instanceof ModuleComponentSelector && dependency.requested.group == "custom") {
            def targetProject = findProject(":test")
            if (targetProject != null) {
                dependency.useTarget targetProject
            }
        }
    }
}

步驟3:

local.properties

moduleName=:test
modulePath=../AndroidStudioProjects/TestProject/testModule

到這裡就大功告成瞭,後續隻需要在 local.properties 裡開啟和關閉,即可實現 aar 模塊本地依賴調試,提交代碼也不用去手動修改回 aar 依賴。

以上就是Android Gradle模塊依賴替換使用技巧的詳細內容,更多關於Android Gradle模塊依賴替換的資料請關註WalkonNet其它相關文章!

推薦閱讀: