Android Studio BuildType 構(gòu)建類型

一、BuildType 屬性以及方法。

下面簡(jiǎn)要介紹下BuildType的屬性以及方法,更多詳情,可以參閱:
BuildType詳情

1、屬性

屬性 描述
applicationIdSuffix 應(yīng)用程序標(biāo)識(shí)后綴。
consumerProguardFiles ProGuard規(guī)則文件要包含在已發(fā)布的AAR中。
debuggable 這個(gè)構(gòu)建類型是否應(yīng)該生成可調(diào)試的apk。
embedMicroApp 是否應(yīng)使用此構(gòu)建類型將鏈接的Android Wear應(yīng)用程序嵌入到變體中。
javaCompileOptions 配置Java編譯選項(xiàng)。
jniDebuggable 此構(gòu)建類型是否配置為生成具有可調(diào)試本機(jī)代碼的APK。
manifestPlaceholders 明示占位符
minifyEnabled 是否為此構(gòu)建類型啟用了Minify。
multiDexEnabled 是否為此變體啟用了Multi-Dex。
multiDexKeepFile 指定將被編譯到主dex文件中的其他類的文本文件。
multiDexKeepProguard 具有附加ProGuard規(guī)則的文本文件用于確定哪些類被編譯到主dex文件中。
name 此構(gòu)建類型的名稱。
proguardFiles 返回要使用的ProGuard配置文件。
pseudoLocalesEnabled 是否在APK中生成偽語言環(huán)境。
renderscriptDebuggable 構(gòu)建類型是否配置為生成具有可調(diào)試RenderScript代碼的apk。
renderscriptOptimLevel 由renderscript編譯器使用的優(yōu)化級(jí)別。
shrinkResources 是否啟用未使用資源的收縮。默認(rèn)值為false
signingConfig 簽名配置。
testCoverageEnabled 是否為此構(gòu)建類型啟用了測(cè)試覆蓋率。
useJack 棄用 是否應(yīng)該使用實(shí)驗(yàn)杰克工具鏈。
versionNameSuffix 版本名稱后綴。
zipAlignEnabled zipalign是否啟用此構(gòu)建類型。

2、方法

方法 描述
buildConfigField(type, name, value) 向生成的BuildConfig類添加一個(gè)新字段。
consumerProguardFile(proguardFile) 添加要包含在已發(fā)布的AAR中的proguard規(guī)則文件。
consumerProguardFiles(proguardFiles) 添加要包含在已發(fā)布的AAR中的proguard規(guī)則文件。
externalNativeBuild(action) 配置本機(jī)構(gòu)建選項(xiàng)。
initWith(that) 從給定的構(gòu)建類型復(fù)制所有屬性。
proguardFile(proguardFile) 添加一個(gè)新的ProGuard配置文件。
proguardFiles(files) 添加新的ProGuard配置文件。
resValue(type, name, value) 添加新生成的資源。
resValue(type, name, value) 添加新生成的資源。
setProguardFiles(proguardFileIterable) 設(shè)置ProGuard配置文件。

二、構(gòu)建類型(Building type)的應(yīng)用

  • 1、可以在模塊級(jí) build.gradle 文件的 android {} 代碼塊內(nèi)部創(chuàng)建和配置構(gòu)建類型。
  • 2、當(dāng)創(chuàng)建新模塊時(shí),Android Studio 會(huì)自動(dòng)為您創(chuàng)建debug和release這兩種構(gòu)建類型。

下面我們通過一個(gè)案例,來熟悉BuildType以及源集的配置,并驗(yàn)證以下事項(xiàng):

  • 1、每一個(gè)構(gòu)建類型(BuildingType),都會(huì)產(chǎn)生對(duì)應(yīng)的一個(gè)APK。
  • 2、源集的加載優(yōu)先級(jí)。

備注:想要看到運(yùn)行效果或者想要?jiǎng)邮峙渲玫耐瑢W(xué),請(qǐng)移駕Github。

下面的案例,使用了一個(gè)類庫DemosAndApi,該類庫用于快速構(gòu)建Demos演示或者Api程序。

1、創(chuàng)建或者配置構(gòu)建類型(Building type):

applicationIdSuffix:應(yīng)用程序標(biāo)識(shí)后綴。
versionNameSuffix:版本名稱后綴。
initWith:允許您從其他構(gòu)建類型復(fù)制其配置。

android {
    ...
    defaultConfig {...}
    buildTypes {
        release {// 備注:"release"類型的構(gòu)建類型
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        debug {// 備注:"debug"類型的構(gòu)建類型
            applicationIdSuffix ".debug"
        }

        jnidebug {

            // 復(fù)制 構(gòu)建類型=“debug”的配置
            initWith debug
            applicationIdSuffix ".jnidebug"
            jniDebuggable true
        }
    }
}

2、添加源集目錄。

上面的配置,為模塊新增加了jnidebug源集,那么,我們可以在工程中,為其配置源集目錄。
關(guān)于源集,可以參考這篇文章。Android Studio Set of source 代碼源集

工程文件樹,展示如下:

3、配置源集文件。

在每個(gè)源集中,我們都只有一個(gè)MainActivity,該類展示在界面上展示當(dāng)前所處于的源集或者所對(duì)應(yīng)的構(gòu)建類型。詳情請(qǐng)參閱源碼。

4、執(zhí)行編譯

  • 4.1、選擇AndroidStudio左下角的Build Variants來配置需要編譯的類型。
  • 4.2、每一種構(gòu)建類型都編譯完畢后,我們查閱:app/build/outputs目錄可以看到,相應(yīng)的apk已經(jīng)生成了。

5、Overlay覆蓋機(jī)制。

我們先通過比較debug、release、jnidebug三種構(gòu)建類型的運(yùn)行結(jié)果:

  • 5.1、debug 源集的apk運(yùn)行效果:
    類庫DemosAndApi為我們加載了debug和main源集的頁面,并且頁面來自各自源集的配置。
  • 5.2、release運(yùn)行結(jié)果
    Github源碼庫中有release構(gòu)建類型的運(yùn)行結(jié)果,在此就不在貼出來了。

  • 5.3、jnidebug的運(yùn)行結(jié)果
    jnidebug是我們新建的構(gòu)建類型,它的運(yùn)行結(jié)果如下:

在此處,我們看到j(luò)nidebug的運(yùn)行效果不一樣了,這是因?yàn)?,我們?cè)趈nidebug的源集中,重新定義了main源集的資源。

<resources>
······
    <string name="app_name_jnidebug_label">app/jnidebug/jnidebug_MainActivity</string>
    <string name="app_name_main_label">app/main/main_MainActivity_來自jnidebug源集的覆蓋</string>
</resources>

在這里延伸出來一個(gè)概念,資源的overlay,在BuildType中,資源存在覆蓋機(jī)制,存在優(yōu)先級(jí)。

構(gòu)建變體 > 構(gòu)建類型[BuildType] > 產(chǎn)品風(fēng)味[ProductFlavor] > 主源集[main] > 庫依賴項(xiàng)

從上面的優(yōu)先級(jí)來看,main源集的優(yōu)先級(jí) 是比較低的,也就是說,【新創(chuàng)建的源集】可以覆蓋【main源集】的資源。


寫作不易,耗費(fèi)心力,如果上面的內(nèi)容對(duì)你有幫助,請(qǐng)隨意打賞,讓我們堅(jiān)持下去~

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

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

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