Android Studio gradle 风味维度构建变体无法正常工作

Posted

技术标签:

【中文标题】Android Studio gradle 风味维度构建变体无法正常工作【英文标题】:Android studio gradle flavor dimensions build varients not working correctly 【发布时间】: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 源目录?

【问题讨论】:

【参考方案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 块来减少变体的数量并排除无用的组合

以上是关于Android Studio gradle 风味维度构建变体无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Android Studio 在模块中添加风味?

在android studio中build.gradle中使用flavor维度

Android Studio 中不同风格的测试包

现在,所有风格都必须属于命名风味维度Android Studio NDK

如何在 Android Studio 中使用具有不同应用名称的风味?

Android风味,Gradle sourceSets合并