Gradle:android.variantFilter导致升级到Gradle 2.2.1后生成失败
我在一个Android项目中工作,该项目有多种风格,我在Gradle:android.variantFilter导致升级到Gradle 2.2.1后生成失败,android,gradle,variant,Android,Gradle,Variant,我在一个Android项目中工作,该项目有多种风格,我在build.gradle中使用此代码为每种风格设置包名: flavorDimensions "type", "feature" productFlavors { abc { flavorDimension "type" } def { flavorDimension "type" } ABC { flavorDimension "feature" } DEF { flavorDimension "f
build.gradle
中使用此代码为每种风格设置包名:
flavorDimensions "type", "feature"
productFlavors {
abc { flavorDimension "type" }
def { flavorDimension "type" }
ABC { flavorDimension "feature" }
DEF { flavorDimension "feature" }
}
android.variantFilter { variant ->
def flavorString = ""
def flavors = variant.getFlavors()
for (int i = 0; i < flavors.size(); i++) {
flavorString += flavors[i].name;
}
if(flavorString.equalsIgnoreCase("abcABC")) {
variant.getDefaultConfig().applicationId "com.my.app.abc.abc"
}
if(flavorString.equalsIgnoreCase("abcDEF")) {
variant.getDefaultConfig().applicationId "com.my.app.abc.def"
}
if(flavorString.equalsIgnoreCase("defABC")) {
variant.getDefaultConfig().applicationId "com.my.app.def.abc"
}
if(flavorString.equalsIgnoreCase("defDEF")) {
variant.getDefaultConfig().applicationId "com.my.app.def.def"
}
}
看起来variant.getDefaultConfig().applicationId
现在的工作方式不同了。我在互联网上搜索了android.variantFilter的文档,但它似乎不存在
任何人都可以告诉我如何让这段代码在Gradle2.2.1中工作?非常感谢。variantFilter仅用于允许或禁止某些组合的构建。defaultConfig对象是共享且只读的。如果您想将applicationId分配给变体,我认为您应该使用与此更类似的方法:
buildTypes {
applicationVariants.all { variant ->
def projectFlavorNames = []
variant.productFlavors.each() { flavor ->
projectFlavorNames.add(flavor.name)
}
project.logger.debug('Application variant ' + variant.name + '. Flavor names list: ' + projectFlavorNames)
if (projectFlavorNames.contains('customer1') && projectFlavorNames.contains('variant1')) {
variant.mergedFlavor.applicationId = 'com.customer1.variant1'
} else if (projectFlavorNames.contains('customer2') && projectFlavorNames.contains('variant2')) {
variant.mergedFlavor.applicationId = 'com.customer2.variant2'
} // else use standard package name
project.logger.debug('Using project name: ' + variant.packageName)
}
// ...
}
从
buildTypes {
applicationVariants.all { variant ->
def projectFlavorNames = []
variant.productFlavors.each() { flavor ->
projectFlavorNames.add(flavor.name)
}
project.logger.debug('Application variant ' + variant.name + '. Flavor names list: ' + projectFlavorNames)
if (projectFlavorNames.contains('customer1') && projectFlavorNames.contains('variant1')) {
variant.mergedFlavor.applicationId = 'com.customer1.variant1'
} else if (projectFlavorNames.contains('customer2') && projectFlavorNames.contains('variant2')) {
variant.mergedFlavor.applicationId = 'com.customer2.variant2'
} // else use standard package name
project.logger.debug('Using project name: ' + variant.packageName)
}
// ...