日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

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

作者:汪海游龍 ? 更新時間: 2022-08-15 編程語言

背景

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

解決

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

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

這樣就可以不用每次提交代碼還要修改回 aar 依賴,但是如果其他模塊如果也依賴了該 aar 模塊,就會出現(xiàn)問題,雖然可以繼續(xù)修改其他模塊里的依賴方式,但是這樣就會有侵入性,而且不能徹底解決問題,仍然有可能出現(xiàn)本地依賴和 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

到這里就大功告成了,后續(xù)只需要在 local.properties 里開啟和關(guān)閉,即可實現(xiàn) aar 模塊本地依賴調(diào)試,提交代碼也不用去手動修改回 aar 依賴。

原文鏈接:https://juejin.cn/post/7062642189154648101

欄目分類
最近更新