gradle: 仅针对特定口味应用插件

gradle: apply plugin only for specific flavor

我的Androidgradle目前设置了使用不同推送服务的风味维度。 (一个用于百度推送,一个用于 GCM)我想让我的 Android 应用程序只导入 google-services 以获得 GCM 推送构建风格。可以吗?

P.S. 因为为了在 Android 中使用 GCM,我必须在底部添加 apply plugin: 'com.google.gms.google-services' 行我的 app/build.gradle 文件详细 here.

为了让百度风味能够成功构建,我可能需要为百度放置一个虚拟google-services.json

更新: 我似乎在 this 长 github 问题线程中找到了答案。

在您的 build.gradle(App) 文件中添加此代码:

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

N.B.: First letter of flavor name must be in Uppercase

2021-11-23 更新:请注意下方 Prasoon Abhishek 的

我遇到了同样的问题 - 我有一个构建多个应用程序的项目,每个应用程序都有两个变体,一个通过 Google Play 分发并使用 Google Play Services amd Firebase API,另一个变体通过网络下载(主要用于 AOSP 设备)分发,不能包含 Google Play 服务或 Firebase API。

在我们的 app/build.gradle 文件中,我们不想要任何看起来并不十分明显的时髦条件测试,我们的意思是 "if variant == web then do not apply plug google play services"。我们也不想要文件 google-services.json 的多个副本,即每个应用程序一个,我们想要一个包含为 Google Play 服务启用的所有应用程序包的副本。这是因为我们经常添加和删除应用程序,并希望在 Firebase 控制台中将这些应用程序作为一个项目进行管理。

解决方案是创建一个分布维度,这个维度必须放在 flavorDimensions 数组的第一位(com.google.gms。google-services 插件只在第一个维度查找 google-services.json).

    flavorDimensions 'distribution', 'application'
    productFlavors {
        store {
            dimension 'distribution'
        }
        web {
            dimension 'distribution'
            applicationIdSuffix ".nogms"
        }
        app1 {
            dimension 'application'
            applicationId 'com.example.app1'
        }
        app2 {
            dimension 'application'
            applicationId 'com.example.app2'
        }

分布 维度有两个值 - "store" 和 "web"

Firebase控制台生成的google-services.json放在目录app/src/store.

app/src/web 目录中,我们放置了一个虚拟 google-services.json 文件,内容如下:

{
  "project_info": {
    "project_number": "0",
    "project_id": "api-project-0"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "1:0:android:0",
        "android_client_info": {
          "package_name": "com.example.app1.nogms"
        }
      },
      "api_key": [
        {
          "current_key": "none"
        }
      ]
    },
    {
      "client_info": {
        "mobilesdk_app_id": "1:0:android:0",
        "android_client_info": {
          "package_name": "com.example.app2.nogms"
        }
      },
      "api_key": [
        {
          "current_key": "none"
        }
      ]
    }
  ]
}

这让插件很开心。 (需要根据需要将非 GMS 应用程序包添加到 "client":[] 数组)。

GMS 和 Firebase 库有条件地仅包含在商店版本中:

dependencies {
    storeImplementation 'com.google.firebase:firebase-core:16.0.8'
    storeImplementation 'com.google.firebase:firebase-iid:17.1.2'
    storeImplementation 'com.google.firebase:firebase-messaging:17.6.0'
}

最后,Google Play Services 插件在 build.gradle 的末尾按照 https://firebase.google.com/docs/android/setup

中的说明全局应用
apply plugin: 'com.google.gms.google-services'

简单地在 build.gradle

中的特定构建风格定义中应用依赖项
android{
      productFlavors {

         flavourName{
         apply plugin: 'com.google.gms.google-services'
        }
       }
     }