android-studio - Android Studio gradle flavordimensions 构建变体无法正常工作

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

我有一个应用程序的两个维度,然后调用绿色和蓝色。只有这两个维度,但有无限数量的产品口味。这是我在 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 源目录?

最佳答案

我认为您误解了 flavor 维度的概念。

flavor 维度类似于 flavor 类别,来自每个维度的 flavor 的每种组合都会产生一个变体。

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

flavor 维度定义将用于生成变体的笛卡尔积。

编辑 :我会尝试用伪 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 ;

银-客户A-调试;银客户A-release ; silver-customerB-debug ; Silver-customerB-release ;银客户C-调试; Silver-customerC-release ;

...(青铜相同)

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

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

关于android-studio - Android Studio gradle flavordimensions 构建变体无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30854220/

相关文章:

android-studio - 包左边的标记是什么(Android Studio)

Android Studio 应用程序图标

java - 如何在android studio中使用gradle访问依赖项的依赖项?

android - gradle4.5编译错误:无法添加任务

android - 使用gradle构建时已定义的错误

android - 创建创建输出jar的自定义gradle项目时出现问题

android - 如何从 Android 应用程序的所有文件中删除未使用的项目?

java - 添加了两个库,现在项目无法编译

android-layout - 如何用空结束标记 (/>) 批量替换空正文标记 (</TextView>)

android - 无法在 Android Studio 中执行复制粘贴