默認狀況下,Android plugin會自動的構建release和debug兩個版本javascript
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
}
}
// release版本中設置了開啓混淆,而且定義了混淆文件的位置複製代碼
release和debug的差別主要在因而否能夠在設備上調試應用以及APK如何簽名。html
Android plugin容許自定義這兩個示例,而且能夠建立其餘的buildType,以下:java
buildTypes {
debug {
minifyEnabled false
applicationIdSuffix ".debug"
}
custom.initWith(buildTypes.debug)
custom {
applicationIdSuffix ".custom"
versionNameSuffix "-customs"
}
}複製代碼
上述配置進行了一下設置android
建立一個新的BuildType的步驟爲:git
對於每個BuildType,Android plugin都會建立對應的「assembleBuildTypeName」任務github
對於每個BuildType,均可以在dependencies容器中添加名爲BuildTypeNameCompile的依賴配置閉包
對於每個BuildType,Android plugin都會建立一個對應的sourceSet,默認位置爲:src/BuildTypeName
因此新建BuildType的名字不能是main、androidTest和test這三個已經被用的名字
BuildType的代碼/資源會以如下方式進行合併app
ProductFlavor定義了經過工程構建應用的自定義版本。一個獨立的工程能夠定義不一樣的flavor改變生成的應用。
建立方式:gradle
productFlavors {
flavor1 {
minSdkVersion 10
versionCode 1
}
flavor2 {
minSdkVersion 14
versionCode 2
}
}複製代碼
上述配置進行了如下設置ui
建立一個新的ProductFlavor的步驟爲:
某些狀況下,咱們須要從多個維度來區分app的版本,好比渠道和是否付費,只是咱們就須要建立多維度的ProductFlavor來生成不一樣的apk。
建立方式:
flavorDimensions "channle", "version"
productFlavors {
huawei {
dimension "channle"
}
xiaomi {
dimension "channle"
}
free {
dimension "version"
}
paid {
dimension "version"
}
}複製代碼
上述配置進行了如下設置
建立多維度的ProductFlavor的步驟爲:
對於每個ProductFlavor,Android plugin都會建立對應的「assembleProductFlavorNameDebug」和「assembleProductFlavorNameRelease」任務
對於每個ProductFlavor,均可以在dependencies容器中添加名爲ProductFlavorNameCompile的依賴配置
相似BuildType,Android plugin也會爲ProductFlavor建立對應的sourceSet,默認的位置爲:src/ProductFlavorName
因此ProductFlavor的名字不能和已存在的BuildType的名字衝突
ProductFlavor的代碼/資源會以如下方式進行合併
BuildType和ProductFlavor相結合,組成了構建變體。每建立一個buildType或productFlavor,都會同時建立相應的變體。
例如:
buildTypes {
debug {
minifyEnabled false
applicationIdSuffix ".debug"
}
custom.initWith(buildTypes.debug)
custom {
applicationIdSuffix ".custom"
versionNameSuffix "-customs"
}
}
productFlavors {
flavor1 {
minSdkVersion 10
versionCode 1
}
flavor2 {
minSdkVersion 14
versionCode 2
}
}複製代碼
上述配置的狀況下會產生6個BuildVariant:
若是是多維度的ProductFlavor,例如:
buildTypes {
debug {
minifyEnabled false
applicationIdSuffix ".debug"
}
custom.initWith(buildTypes.debug)
custom {
applicationIdSuffix ".custom"
versionNameSuffix "-customs"
}
}
flavorDimensions "channle", "version"
productFlavors {
huawei {
dimension "channle"
}
xiaomi {
dimension "channle"
}
free {
dimension "version"
}
paid {
dimension "version"
}
}複製代碼
上述配置的狀況下會產生12個BuildVariant:
對於每個BuildVariant,Android plugin都會建立對應的「assembleBuildVariantName」任務
BuildVariant的sourceSet合併規則: