Gradle:android.variantFilter导致升级到Gradle 2.2.1后生成失败

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

我在一个Android项目中工作,该项目有多种风格,我在
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)
}

// ...