有没有办法在 gradle 中“混合”多种口味?
例如,假设我有两种口味:Red和Blue。现在假设我有两种口味,我希望它们具有(子口味,如果你喜欢):Complex和Simple.
到目前为止我所知道的是,这需要我创建四种口味:Red-Complex, Red-Simple, Blue-Complex, Blue-Simple。
我不清楚这应该如何在项目中构建。如何定义Red在Red-Complex和之间共享Red-Simple的Complex代码,但也有在Red-Complex和之间共享的代码Blue-Complex?我不想在口味之间复制/粘贴代码。
在gradle中实现这一目标的最佳方法是什么?
小智 0
-> 在您的 src 文件夹中,您想要创建 2 种口味,称为“红色”、“蓝色”。
-> 在 src 中创建 2 个名为“red”、“blue”的文件夹(与 main 同一级别)。
-> 文件夹具有与 main 相同的结构。
-> 在这里您可以选择覆盖任何 XML/资源/java 文件/值等。
->(当您构建 Flavor 时,与 main 具有相同名称的资源将被覆盖)。
-> 使用 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 { }
}
Run Code Online (Sandbox Code Playgroud)
将给出构建变体:
blueDebug
blueRelease
redDebug
redRelease
Run Code Online (Sandbox Code Playgroud)
//================ 添加子口味 ================
这里: https: //proandroiddev.com/advanced-android-flavors-part-2-enter-flavor-dimensions-4ad7f486f6
-> 具有简单、复杂等子风格(换句话说“buildTypes”)。
-> 对于子风味或构建类型,我们使用维度。
->flavorDimensions "Flavour", "SubFlavour" (在你的 build.gradle 中) // 可以是任何关键字,在内部使用 // 将此关键字视为将风味集合定义为一个组的组 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'
}
}
Run Code Online (Sandbox Code Playgroud)
--> 通过正确配置,您将看到下面的 buildVariants。
blueSimpleDebug
blueSimpleRelease
blueComplexDebug
blueComplexRelease
redSimpleDebug
redSimpleRelease
redComplexDebug
redComplexRelease
Run Code Online (Sandbox Code Playgroud)
//================= 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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |