Android模塊化編譯打包配置

最近,把我們的靈機項目拆分了一下,增加模塊編譯配置,然后,編譯和打包速度快了挺多的,記錄一下。

主要有兩個操作:

一、組件化

之前很多組件都丟在了一個叫l(wèi)ib_plug的module里面,一個大集合,代碼和資源文件啥的,都在里面。現(xiàn)在把組件都一個一個拆出來了,拆為 lib_xxxx 這樣單獨的一個module。module可以單獨運行,也可當成是lib模塊依賴。組件間通信,都依賴基礎(chǔ)的base庫,等等這些就不說了,因為組件化,很多大佬們都寫了博客,大同小異,差不多。

二、組件上傳到倉庫

拆完組件,發(fā)現(xiàn),其實有很多組件是萬年不更新了的,這樣,每次編譯都會過一遍,肯定會影響一點速度。那我們同樣用一個配置解決,需要修改組件時,用本地module,修改完了傳maven,用aar依賴。那這樣,速度會快一些。

主要就是上面兩個操作,那剩下的就是配置了,怎樣通過一個變量來控制組件是否單獨運行,是否用maven版本?

1、先在項目的根目錄,新建一個 version.gradle 的文件,里面配置組件的信息。類似下面:

class ModuleInfo {
    /**
     * 是否單獨運行
     */
    boolean alone
    /**
     * 是否用maven版本
     */
    boolean maven
    /**
     * 版本
     */
    String version

    ModuleInfo() {
    }

    ModuleInfo(boolean alone, boolean maven, String version) {
        this.alone = alone
        this.maven = maven
        this.version = version
    }

    @Override
    String toString() {
        return "ModuleInfo{" +
                "alone=" + alone +
                ", maven=" + maven +
                ", version='" + version + '\'' +
                '}'
    }
}

ext {
    // 組名,防止上傳maven的時候覆蓋掉其他,可以用包名來代替
    moduleGroup = "com.lingjimiaosuan"

    // 配置每個組件的狀態(tài),是否單獨運行,是否用maven版本,版本號
    modules = [
            "lib_aaa"          : new ModuleInfo(false, true, "1.0.0"),
            "lib_bbb"          : new ModuleInfo(false, true, "1.0.0"),
            "lib_ccc"          : new ModuleInfo(false, true, "1.0.0"),
            "lib_ddd"          : new ModuleInfo(false, true, "1.0.0"),
            "lib_eee"          : new ModuleInfo(false, true, "1.0.0"),
    ]

    // 統(tǒng)一,每個組件module都是這個版本
    android = [
            compileSdkVersion: 28,
            minSdkVersion    : 18,
            targetSdkVersion : 28,
    ]

}

2、修改 settings.gradle 的配置文件,讀取 version.gradle 里面的配置,看是否要引入module。如下:

// 引入配置文件
apply from: 'version.gradle'
//必用模塊,就不需要判斷了
include ':app_cn'

if (!ext.modules.get("lib_aaa").maven) {
    include ':lib_aaa'
}

if (!ext.modules.get("lib_bbb").maven) {
    include ':lib_bbb'
}

if (!ext.modules.get("lib_ccc").maven) {
    include ':lib_ccc'
}

if (!ext.modules.get("lib_ddd").maven) {
    include ':lib_ddd'
}

3、新建上傳maven配置,upload.gradle ,用來上傳組件到maven。

//是否提交到倉庫
def upload = true
def release = false
def name = project.name
def info = rootProject.ext.modules.get(name)
def vername = info.version
if (upload) {
    apply plugin: 'maven'
    print('upload library logn to maven...')
    group = rootProject.ext.moduleGroup
    version = release ? vername : vername + '-SNAPSHOT'

    task androidSourcesJar(type: Jar) {
        classifier = 'sources'
        from android.sourceSets.main.java.sourceFiles
    }
    artifacts {
        archives androidSourcesJar
    }

    uploadArchives {
        repositories.mavenDeployer {
            repository(url: MAVEN_R_URL) {
                authentication(userName: MAVEN_D_USERNAME, password: MAVEN_D_PASSWORD)
            }
            snapshotRepository(url: MAVEN_S_URL) {
                authentication(userName: MAVEN_D_USERNAME, password: MAVEN_D_PASSWORD)
            }
            pom.artifactId = name
        }
    }
}

4、在組件里面引入 upload.gradle,在組件的build加上:

apply from: '../upload.gradle'

當我們對這個組件修改完畢時,就把這個組件上傳到maven



5、在APP的build里面配置引用組件

    def lib_aaa = "lib_aaa"
    def aaaInfo = rootProject.ext.modules.get(lib_aaa)
    if (aaaInfo.maven) {
        api rootProject.ext.moduleGroup + ":" + lib_aaa + ":" + aaaInfo.version + "-SNAPSHOT"
    } else {
        api project(':lib_aaa')
    }

讀取version.gradle的配置,來決定是用maven版本,還是用本地module。

大概這樣就ok啦。比如我們要修改aaa模塊,就去version.gradle里面修改參數(shù)為

 "lib_aaa"          : new ModuleInfo(false, false, "1.0.0")

然后,就可以對aaa模塊,進行修改,修改完了,傳完maven,再改回

 "lib_aaa"          : new ModuleInfo(false, true, "1.0.0")

這樣重新編譯后,就ok。速度應(yīng)該是快一點的,可以試下。

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

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

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