【问题标题】:Android studio gradle flavor dimensions build varients not working correctlyAndroid Studio gradle 风味维度构建变体无法正常工作
【发布时间】:2015-08-31 11:35:30
【问题描述】:

我有一个应用程序的两个维度,然后调用绿色和蓝色。只有这两个维度,但产品口味的数量是无限的。这是我在gradle中设置的方式

flavorDimensions "green", "blue"

productFlavors {

    one {
        applicationId "com.app.green.one"
        versionCode 1
        versionName "1.0.0.1";
        flavorDimension = "green"
    }
    two {
        applicationId "com.app.blue.two"
        versionCode 6
        versionName "1.0.1";
        flavorDimension = "blue"
    }
}

但是在我同步 gradle 之后,在构建变体选项卡中,我看到的只是 oneTwoDebug 和 oneTwoRelease,我应该在其中看到 greenOneDebug greenOneRelease、blueTwoDebug、blueTwoRelease

理论上我想把它扩展成这样

one {
    applicationId "com.app.green.one"
    versionCode 1
    versionName "1.0.0.1";
    flavorDimension = "green"
}
two {
    applicationId "com.app.blue.two"
    versionCode 6
    versionName "1.0.1";
    flavorDimension = "blue"
}
three {
    applicationId "com.app.green.three"
    versionCode 1
    versionName "1.0.0.1";
    flavorDimension = "green"
}
four {
    applicationId "com.app.blue.four"
    versionCode 6
    versionName "1.0.1";
    flavorDimension = "blue"
}

在这种情况下,维度代表应用的“类型”,然后对于可以添加的组织而言,风味更多。

**编辑我的 gradle 设置错误,正如这里指出的,这是对我所拥有的更准确的描述

flavorDimensions "type", "organization"

productFlavors {

    blue {
        applicationId "com.app.blue"
        flavorDimension = "type"
        versionCode 6
        versionName "1.0.1";
    }
    red {
        applicationId "com.app.red"
        flavorDimension = "type"
        versionCode 1
        versionName "1.0.0.1";
    }

    company1 {
        flavorDimension = "organization"
    }
    company2 {
        flavorDimension = "organization"
    }
}

到目前为止,这是可行的,所以我可以为切换类型创建 java 源目录,但是如果我想要组织特定的配置文件,我是否也为每个组织创建 java 源目录?

【问题讨论】:

    标签: android-studio gradle android-gradle-plugin build.gradle android-productflavors


    【解决方案1】:

    我认为您误解了 flavorDimension 的概念。

    flavorDimension 类似于 风味类别,每个维度的风味的每种组合都会产生一个变体。

    在您的情况下,您必须定义一个名为“type”的 flavorDimension 和另一个名为“organization”的维度。 它将为“组织”维度中的每种风味生成所有可能的“类型”(或双重表述:对于每个“类型”,它将为每个组织生成一个变体)。

    风味维度定义了将用于生成变体的笛卡尔积


    编辑:我会尝试用伪gradle代码来说明:

    让我们定义一些“类型”:青铜、白银和黄金

    让我们定义一些组织:customerA、customerB、customerC

    所有这些都是 productFlavors,但它们属于 2 个不同的维度:

    flavorDimensions("type_line", "organization")
    productFlavors {
    
        gold {
            ...
            dimension = "type_line"
        }
        silver {
            ...
            dimension = "type_line"
        }
        bronze {
             ...
            dimension = "type_line"
        }
    
         customerA {
            ...
            dimension = "organization"
        }
        customerB {
            ...
            dimension = "organization"
        }
        customerC {
             ...
            dimension = "organization"
        }
    
    }
    

    此配置将产生 18 (3*3*2) 个变体(如果您有 2 种标准构建类型:调试和发布):

    gold-customerA-debug ; gold-customerA-release ; gold-customerB-debug ; gold-customerB-release ; gold-customerC-debug ; gold-customerC-release ;

    silver-customerA-debug ; silver-customerA-release ; silver-customerB-debug ; silver-customerB-release ; silver-customerC-debug ; silver-customerC-release ;

    ...(青铜也一样)

    请注意,维度的名称完全是任意的,对变体名称没有影响。

    风味维度非常强大,但如果使用太多:它会导致变体数量呈指数级增长(构建后清理任务可能有助于删除无用或无意义的变体)

    【讨论】:

    • 这更有意义,但是每种产品风味都需要定义一个风味维度,因此,如果每种风味都是两者的组合,那么它是如何工作的
    • 我想我真正想做的是某种意义上的亚风味
    • 感谢您的示例!在您之前的评论之后,我才弄清楚它是如何工作的,这更有意义,如果可以,最后一个问题,如果我也想要组织的配置文件,每个组织都需要自己的 java 源目录吗?还是必须将组织配置放在“类型”配置中?这有意义吗
    • 您可以为 /src/flavorName/java 下的每个产品风味(分别为 src/flavorName/res 和 src/flavorName/assets)和每个变体创建额外的 java/ 、 res/ 或 assets/ 目录将包括 src/main/ 下的源代码 + src/flavorName/ 下的源代码(我不明白您所说的“放置在类型配置中”是什么意思)
    • @ben75 代替“清理任务”,使用variantFilter 块来减少变体的数量并排除无用的组合
    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2017-10-19
    • 2016-08-29
    相关资源
    最近更新 更多