29

我的 Android gradle 目前为使用不同的推送服务设置了风味维度。(一个用于 baidu 推送,一个用于 GCM)我希望我的 Android 应用程序仅用于导入google-servicesGCM 推送构建风格。有可能做到吗?

PS因为为了在 Android 中使用 GCM,我必须apply plugin: 'com.google.gms.google-services'在我的 app/build.gradle 文件的底部添加这一行,详见此处

作为一种解决方法,为了让 baidu 风味能够成功构建,我可能需要google-services.json为 baidu 放置一个 dummy。

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

4

3 回答 3

18

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

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

注意:风味名称的第一个字母必须大写

2021-11-23 更新:请注意下面 Prasoon Abhishek的解决方案

于 2018-07-09T11:51:58.787 回答
5

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

在我们的 app/build.gradle 文件中,我们不想要任何看起来并不完全明显的时髦条件测试,我们的意思是“如果变体 == web 则不要应用插件 google play 服务”。我们也不想要文件 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'
        }

分布维度有两个值—— “商店”和“网络”

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'
}

最后,按照https://firebase.google.com/docs/android/setup中的说明,在 build.gradle 的末尾全局应用了 Google Play Services 插件

apply plugin: 'com.google.gms.google-services'
于 2019-06-21T00:27:38.310 回答
4

只需在 build.gradle 中的特定构建风格定义中应用依赖项

android{
      productFlavors {

         flavourName{
         apply plugin: 'com.google.gms.google-services'
        }
       }
     }
于 2021-09-30T07:10:29.927 回答