一、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)持下去~