默认状况下,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合并规则: