【问题标题】:Android Specific Gradle product flavor combinationsAndroid 特定 Gradle 产品风味组合
【发布时间】:2015-02-05 10:13:26
【问题描述】:

在我的代码中,我有某些模板都源自一个代码库。对于每个模板,我想添加特定的维度。使用风味维度和产品风味我已经达到了这个代码:

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

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

模板蓝

模板绿色

模板范围

模板B蓝色 模板BGreen

templateBOrange 模板CBlue

模板CGreen

模板COrange

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

模板A

模板蓝

模板BOrange

模板C

模板CGreen

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

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

【问题讨论】:

    标签: android gradle


    【解决方案1】:

    可以使用gradlevariantFilter排除一些配置

    例如:

    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 块一样工作? @vincent-nock
    猜你喜欢
    • 2016-08-29
    • 1970-01-01
    • 2016-04-08
    • 2013-06-07
    • 1970-01-01
    • 2019-01-16
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多