想象一下这样一种情况,我需要我的 APK 版本有或没有广告,有或没有 CustomJarSDK 以及三个市场,GooglePlay,AmazonApps 和 SamsungApps。
在我的完美世界里应该只有 7 种口味:
- 有广告
- 无广告
- 使用 CustomJarSDK
- 没有 CustomJarSDK
- GooglePlay
- 对于亚马逊商店
- 三星应用
在我的完美世界中,应该有一种方法可以在 gradle 中组合口味,例如:
- 使用广告 + SamsungApps + CustomJarSDK
- 无广告 + GooglePlay
- 等等...
这可能吗?或者你被诅咒并被迫拥有所有这些口味......?????
- 对于带有广告的 GooglePlay
- 对于带有广告和 CustomJarSDK 的 GooglePlay
- 对于没有广告的 GooglePlay
- 适用于没有广告且带有 CustomJarSDK 的 GooglePlay
- 对于带有广告的 AmazonStore
- 对于带有广告和 CustomJarSDK 的 AmazonStore
- 对于没有广告的 AmazonStore
- 对于没有广告和 CustomJarSDK 的 AmazonStore
- 对于带有广告的 SamsungApps
- 对于带有广告和 CustomJarSDK 的 SamsungApps
- 对于没有广告的 SamsungApps
- 适用于没有广告且带有 CustomJarSDK 的 SamsungApps
最佳答案
很难回答你的问题。这取决于哪些资源在任何风格上都有所不同。
目前您不能扩展或合并它们。
但是您可以使用一些技巧来改进您的项目。
例如,您可以针对不同的风格使用通用资源集资源。
类似的东西:
+ 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'
}
在您的情况下,您应该评估口味是否:
- 对于带有广告的 GooglePlay
- 对于带有广告和 CustomJarSDK 的 GooglePlay
- 对于没有广告的 GooglePlay
- 适用于没有广告且带有 CustomJarSDK 的 GooglePlay
可以使用公共(public) block :
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 都可以使用在另一个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']
}
关于android - 管理多种口味……呈指数级增长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35033162/