android - 如何在 app/build.gradle 文件中获取当前选择的产品口味

标签 android gradle

例如,我有 area1 和 area2 风格,但只有 area2 有 google gms 依赖,我只想将 gms 插件应用到 area2,所以我需要决定 current flavors as area == 'area2',显然这不可能成功,那我该怎么办呢?

flavorDimensions "area"
productFlavors {
    area1 {
        dimension "area"
        applicationId 'com.sample.area1'
    }
    area2 {
        dimension "area"
        applicationId 'com.sample.area2'
    }
}
dependencies {
   area2Implementation 'com.google.android.gms:play-services-auth: 16.0.1'
}
if(area == 'area2') {
  apply plugin: 'com.google.gms.google-services'
}

最佳答案

只需在您的 Android block 中添加以下 android.applicationVariants.all 配置:

android {

    // Flavor definitions here
    productFlavors {
        // ...
    }

    android.applicationVariants.all { variant ->

        if (variant.flavorName == "area2") {
            apply plugin: 'com.google.gms.google-services'
        }
    }
}

==== 2019 年 7 月 1 日更新 ====

只需意识到上面的 android.applicationVariants.all block 每次都针对所有 构建变体执行(即,如果您有 2 种构建类型和 3 种风格,它将是被所有 6 种变体击中)。而它实际上是为各个变体准备不同的配置,以便稍后构建。

所以为了达到目的我们需要在构建阶段应用插件。不确定是否有更好的方法,但我设法做了一些棘手的事情,比如:

if (getGradle().getStartParameter().getTaskRequests().toString().contains("Area2")) {
    apply plugin: 'com.google.gms.google-services'
}

我把它放在 Gradle 文件的末尾,在 Android block 之外(“应用插件” block 最初所在的位置)。另请注意,如果您使用 println在 gradle 控制台中查看。

关于android - 如何在 app/build.gradle 文件中获取当前选择的产品口味,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54032562/

相关文章:

android - 使用套接字将图像从 .Net 服务器发送到 Android 客户端

android - 如何从 url 链接(深层链接)重新打开(或恢复)先前启动的 Activity ?

java - 构建后,使用Gradle自动将属性文件处理到相同目录

java - Gradle子项目构建依赖

gradle - 运行时出现 NoClassDefFoundError

android - 由于某个应用程序掩盖了权限请求,因此“设置”无法验证您的响应

android旋转动画质量

android - Gradle 同步失败 : Unsupported method: Variant. getDesugaredMethods()。您连接的 Gradle 版本不支持该方法

android - 共享元素转换 : image view turns white

java - Intellij外部库中所有类的“Cannot resolve symbol”