有没有办法混合" gradle中的多种口味?
例如,我们说我有两种口味:Red
和Blue
。现在让我们说我有两种口味可以让我们拥有这些口味(如果您愿意,可以使用子口味):Complex
和Simple
。
到目前为止我所知道的是,这需要我创建四种口味:Red-Complex
,Red-Simple
,Blue-Complex
,Blue-Simple
。
我不清楚如何在项目中构建这个结构。如何定义Red
和Red-Complex
类之间共享的Red-Simple
代码,还包含Complex
和{{之间共享的Red-Complex
代码1}?我不想在口味之间复制/粘贴代码。
在gradle中实现这一目标的最佳方式是什么?
答案 0 :(得分:0)
->在您的src文件夹中,您想要创建2种口味,分别称为“红色”,“蓝色”。
->在src中创建2个名为“ red”,“ blue”的文件夹(与主文件夹相同)。
->文件夹的结构与主文件夹相同。
->在这里,您可以选择覆盖所有XML /资源/ java文件/值等。
->(与fla相同名称的资源在构建Flavour时将被覆盖)。
->使用build.gradle中的示例代码在项目中添加风味。
productFlavors {
blue{
minSdkVersion 21
applicationId 'something'
targetSdkVersion 28
versionCode 1
versionName "1.0.0"
}
red
{
minSdkVersion 21
applicationId 'something'
targetSdkVersion 28
versionCode 1
versionName '1.0.0'
}
}
buildTypes {
Debug { }
Release { }
}
将提供构建版本:
blueDebug
blueRelease
redDebug
redRelease
// ================向其中添加子口味===============
此处:https://proandroiddev.com/advanced-android-flavors-part-2-enter-flavor-dimensions-4ad7f486f6
->具有简单,复杂(如“ buildTypes”)这样的子风味。
->对于子口味或说buildType,我们使用尺寸。
-> flavorDimensions“风味”,“子风味”(在您的build.gradle中) //可以是任何关键字,在内部使用 //将此关键字视为组ID,该组ID将一组口味定义为一个组。
->在您的口味中使用它 ->我们可以认为关键字“维度”更像是定义一组风味和亚风味
flavorDimensions "Flavour", "SubFlavour"
productFlavors
{
// group one
Simple {
dimension "SubFlavour"
}
Complex {
dimension "SubFlavour"
}
//group two
// Take a note: do not use upper case in your flavours (one which match the folder names in src)
// Sub-Flavours can have Upper case
blue
{
dimension "Flavour"
minSdkVersion 21
applicationId 'something'
targetSdkVersion 28
versionCode 1
versionName "1.0.0"
}
red
{
dimension "Flavour"
minSdkVersion 21
applicationId 'something'
targetSdkVersion 28
versionCode 1
versionName '1.0.0'
}
}
->通过正确配置,您将在下面看到buildVariants。
blueSimpleDebug
blueSimpleRelease
blueComplexDebug
blueComplexRelease
redSimpleDebug
redSimpleRelease
redComplexDebug
redComplexRelease
// ================ build.gradle ================ //这里的build.gradle可能看起来像这样。
android {
buildTypes {
debug { }
release { }
// Any other you want to add here
// Ex, development {}
}
flavorDimensions "Flavour", "SubFlavour"
productFlavors {
Simple {
dimension "SubFlavour"
}
Complex {
dimension "SubFlavour"
}
Blue
{
dimension "Flavour"
minSdkVersion 21
applicationId 'something'
targetSdkVersion 28
versionCode 1
versionName "1.0.0"
}
Red
{
dimension "Flavour"
minSdkVersion 21
applicationId 'something'
targetSdkVersion 28
versionCode 1
versionName '1.0.0'
}
}
sourceSets {
main {
aidl.srcDirs = ['src/main/aidl', 'src/main/res/animation', 'src/main/res/animations']
res.srcDirs = [
'src/main/res/anim',
'src/main/res/layouts/xyz',
'src/main/res/layouts/abc',
'src/main/res/layouts',
'src/main/res/layout',
'src/main/res'
]
resources.srcDirs = ['src/main/resources', 'src/main/resources/xml']
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
}
red {
java.srcDirs = ['src/red/java']
res.srcDirs = [
'src/red/res/layouts/xyz',
'src/red/res/layouts/abc',
'src/red/res/layouts',
'src/red/res'
]
assets.srcDirs = ['src/red/assets']
manifest.srcFile 'src/red/AndroidManifest.xml'
}
blue {
java.srcDirs = ['src/blue/java']
res.srcDirs = [
'src/blue/res/layouts/xyz',
'src/blue/res/layouts/abc',
'src/blue/res/layouts',
'src/blue/res'
]
assets.srcDirs = ['src/blue/assets']
manifest.srcFile 'src/blue/AndroidManifest.xml'
}
}
} //andorid
dependencies {
// yout dependencies
}