productFlavors
打包不同的定制产品,实现部分代码与属性的定制化。
可使用场景:
- 需要更改APP名称、包名、图标、版本信息等资源更改产生一个新的APP。
- 需要增加渠道发布等。
- 需要进行小部分代码定制,且影响原有功能逻辑。
- 需要使用不同版本库。
…
productFlavors在application和library中的配置
在build.gradle文件下创建特性,如下:
android {
//...
productFlavors {
productA {
//...
//示例
versionCode 1
versionName "1.0.0 A"
}
productB {
//...
//示例
buildTypes {
debug {
//可自定义BuildConfig属性
buildConfigField "boolean", "ISOPEN", "false"
//...
}
release {
buildConfigField "boolean", "ISOPEN", "true"
versionCode 1
versionName "1.0.0 B"
//...
}
}
}
productC {
//...
}
}
}
在当前的application下可以使用Gradle面板的build进行打包,可以打包相对应的特性版本,如:assembleProductA
,也可以打包全部debug版本和release版本,如:assembleDebug
,assembleRelease
。
productFlavors在application和library中的依赖使用
ModuleA 和 ModuleB 分别有以上3个product特性版本,如果需要在ModuleA的productA特性依赖ModuleB 的productA特性,在ModuleA 的build.gradle文件下
dependencies {
productACompile project(path: ':moduleB', configuration: 'productA')
}
在ModuleB的build.gradle文件下需要配置属性publishNonDefault true
publishNonDefault true
productFlavors {
}
productFlavors 在Gradle 3.0.0上的使用
在build.gradle文件下
android {
flavorDimensions "product" //flavorDimensions "product","color" 多维度的使用
productFlavors {
productA {
dimension "sdk"
}
productB {
dimension "sdk"
}
// productC{
// dimension "ndk"
// }
}
}
dependencies {
productAImplementation project(':moduleB')
productBImplementation project(':moduleB')
}
如果ModuleB中也存在productFlavors ,并且在ModuleA的dependencies 中有依赖特性,则ModuleB中的特性必须与依赖它的特性一致,如上,ModuleB必须也有productA,productB两种特性
疑问:在多维度的特性下,只能打包维度结合的版本,如上面:productAProductC , productBProductC 的版本,不能单独打包productA、productB、productC的特性版本?
在多维度的依赖中需预先配置configurations
configurations {
productAProductCImplementation
productBProductCReleaseImplementation
}
dependencies {
productAProductCImplementationproject(':moduleB')
productBProductCReleaseImplementationproject(':moduleB')
}
疑问:依赖Module无法使用CompileOnly ?