我有一个Gradle Android项目,其中包含此产品的Groups and Flavors配置:
/*
* Define different flavor groups
*/
flavorGroups 'market', 'version'
/*
* Defile product flavors
*/
productFlavors {
amazon {
flavorGroup 'market'
}
google {
flavorGroup 'market'
}
flav1 {
flavorGroup 'version'
packageName 'com.company.flav1'
}
flav2 {
flavorGroup 'version'
packageName 'com.company.flav2'
}
flav3 {
flavorGroup 'version'
packageName 'com.company.flav3'
}
}
// .. Other stuff
效果很好。所有源和资源都正确合并。
但由于特定原因,我需要.amz
产品风格的包后缀为amazon
。我怎样才能做到这一点?
我试过这种方式:
amazon {
flavorGroup 'market'
packageNameSuffix '.amz'
}
但是gradle
会抛出异常。
答案 0 :(得分:11)
目前无法做到这一点。 packageNameSuffix严格来说是Build Type的属性。
我想提供一种方法来定制给定变体的ProductFlavor值(即所有风味维度和构建类型的给定组合),但目前不可能。
您可以使用扩展现有版本构建类型并添加后缀的“amzRelease”构建类型,而不是新版本的风格。
如果您当前的“亚马逊”风味更多(配置versionCode / Name / etc ...),它将无法正常工作。然后,您可以使用亚马逊风味和amzRelease构建类型。它会创建比你需要的更多的变种,但它会有效,直到我们有更好的。
答案 1 :(得分:1)
您可以使用我在此处撰写的解决方案的变体:https://stackoverflow.com/a/26585241/4177090
简而言之,您可以使用variantFilter找到组合变体,然后从那里更新appliciationId:
android.variantFilter { variant ->
def flavorString = ""
def flavors = variant.getFlavors()
for (int i = 0; i < flavors.size(); i++) {
flavorString += flavors[i].name;
}
if(flavorString.contains("amazon")) {
variant.getDefaultConfig().applicationId variant.getDefaultConfig().applicationId + ".amz"
}
}
答案 2 :(得分:0)
gradle 1.0.0 +的工作解决方案:
android.applicationVariants.all { variant ->
def flavorName = variant.getVariantData().getVariantConfiguration().getFlavorName()
def mergedFlavour = variant.getVariantData().getVariantConfiguration().getMergedFlavor();
if (flavorName.toLowerCase().contains("amazon")) {
mergedFlavour.setApplicationId(mergedFlavour.getApplicationId() + ".amz")
}
}