Android 特定的 Gradle 产品 flavor 组合

标签 android gradle

在我的代码中,我有一些模板都来自一个代码库。我想为每个模板添加特定尺寸。使用 flavor 维度和产品 flavor 我得到了这个代码:

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"
    }    

给出结果(我忽略了构建类型):

templateABlue

templateAGreen

templateAOrange

templateBBlue templateBGreen

templateBOrange templateCBlue

templateCGreen

templateCOrange

当然这是预期的行为,但我想实现这样的目标:

templateA

templateBBlue

templateBOrange

templateC

templateCGreen

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

我希望我的问题很清楚。提前谢谢你。

最佳答案

你可以使用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);
    }
}

关于Android 特定的 Gradle 产品 flavor 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28341273/

相关文章:

android - 无法使用 VideoView 播放 Assets 文件夹中的视频

android - 管理 Android 中的图像、主题、颜色等资源

spring - Gradle 1.0 +Spring + AspectJ 构建问题

java - Gradle-从Jar文件中忽略特定的jar

gradle构建失败找不到声纳插件 "sonar-runner"

java - 如何更改菜单项的文本大小?

android - Android 语音中的关键字识别?

java - 如何知道按钮是否被按下或释放?

安卓 Lollipop & appcompat v7

android - 获取 R.java 文件的路径