Android特定的Gradle产品风味组合

Android特定的Gradle产品风味组合,android,gradle,Android,Gradle,在我的代码中,我有一些模板,它们都来自一个代码库。对于每个模板,我想添加特定的尺寸。使用风味维度和产品风味,我达到了以下代码: flavorDimensions "template", "color" productFlavors { templateA { applicationId "com.templatea" versionCode 1 versionName "1.0.0" flavorDimension "

在我的代码中,我有一些模板,它们都来自一个代码库。对于每个模板,我想添加特定的尺寸。使用风味维度和产品风味,我达到了以下代码:

flavorDimensions "template", "color"

productFlavors {

    templateA {
        applicationId "com.templatea"
        versionCode 1
        versionName "1.0.0"

        flavorDimension "template"
    }


    templateB {
        applicationId "com.templateb"
        versionCode 1
        versionName "1.0.0"

        flavorDimension "template"
    }

    templateC {
        applicationId "com.templatec"
        versionCode 1
        versionName "1.0.0"

        flavorDimension "template"

    }

    blue {
        applicationId "com.blue"
        versionCode 1
        versionName "1.0.0"

        flavorDimension "color"
    }

    green {
        applicationId "com.green"
        versionCode 1
        versionName "1.0.0"

        flavorDimension "color"
    }

    orange {
        applicationId "com.orange"
        versionCode 1
        versionName "1.0.0"

        flavorDimension "color"
    }    
这给出了结果(我忽略了构建类型):

模板

模板协议

模板范围

模板蓝 模板绿色

templateBOrange templateCBlue

模板绿色

templateCOrange

当然,这是预期的行为,但我希望实现以下目标:

模板

模板蓝

模板硼烷

模板

模板绿色

因此,每个模板都从一个主代码库派生,每个模板都可以有从其代码库派生的不同变体。有没有办法指定可以使用哪些风味维度组合,或者有没有办法排除我不想要的组合?需要明确的是,每个模板都可以在不指定颜色的情况下运行


我希望我的问题是清楚的。提前感谢。

您可以使用gradle
variantFilter
排除某些配置

例如:

productFlavors {

    templateB {
        applicationId "com.templateb"
        versionCode 1
        versionName "1.0.0"

        flavorDimension "template"
    }

    templateC {
        applicationId "com.templatec"
        versionCode 1
        versionName "1.0.0"

        flavorDimension "template"

    }

    blue {
        applicationId "com.blue"
        versionCode 1
        versionName "1.0.0"

        flavorDimension "color"
    }
}

android.variantFilter { variant ->
    if(variant.getFlavors().get(0).name.equals('templateC')
            && variant.getFlavors().get(1).name.equals('blue')) {
        variant.setIgnore(true);
    }
}

这是否也像
initWith()
内部
buildType
块一样工作@文森特·诺克