想象一下这样一种情况,我需要拥有带或不带广告,带或不带CustomJarSDK以及三个市场(GooglePlay,AmazonApps和SamsungApps)的APK版本。
在我的理想世界中,只有7种 flavor :
在我的理想世界中,应该有一种方法可以在gradle中结合各种口味,例如:
带有广告+三星应用程序+ CustomJarSDK的
那可能吗?否则你会被诅咒和强制拥有所有这些味道... ?????
最佳答案
很难回答您的问题。这取决于哪种资源在任何口味上都不同。
目前,您无法扩展口味或将其合并。
但是,您可以使用一些技巧来改进您的项目。
例如,您可以将通用源集资源用于不同的口味。
像这样:+ App // module
|- src
|- common // shared srcDir
|- java
+ flavor1
|- java
+ flavor2
|- java
+ flavor3
+ flavor4
然后,您可以定义如下内容: sourceSets {
flavor1.java.srcDir 'src/common/java'
flavor2.java.srcDir 'src/common/java'
flavor3.java.srcDir 'src/common/java'
}
在您的情况下,您应该评估以下口味:
可以使用一个公共(public)块: sourceSets {
flavor1.java.srcDir = ['src/common/java', 'src/flavor1/java']
flavor2.java.srcDir = ['src/common/java', 'src/flavor2/java']
flavor3.java.srcDir = ['src/common/java', 'src/flavor3/java']
}
每个 flavor 都可以使用在另一个中定义的相同源集。
像这样的东西:flavor2{
java.srcDirs = sourceSets.flavor1.java.srcDirs
res.srcDirs = sourceSets.flavor1.res.srcDirs
resources.srcDirs = sourceSets.flavor1.resources.srcDirs
aidl.srcDirs = sourceSets.flavor1.aidl.srcDirs
renderscript.srcDirs = sourceSets.flavor1.renderscript.srcDirs
assets.srcDirs = sourceSets.flavor1.assets.srcDirs
}
同样,每种口味可以定义多个资源文件夹。例如:android.sourceSets {
flavor1.res.srcDirs = ['src/main/res', src/main/res2']
}