gradle:仅针对特定风格

时间:2016-09-23 02:34:21

标签: android android-gradle android-build-flavors android-flavordimension

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

在我们的app / build.gradle文件中,我们不希望进行任何看起来不太明显的时髦条件测试,这意味着“如果变量== web,则不应用Google插件服务”。我们也不想有google-services.json文件的多个副本,即每个应用程序一个,我们想要一个包含所有支持Google Play服务的应用程序捆绑包的副本。这是因为我们非常定期地添加和删除应用程序,并希望在Firebase控制台中将这些应用程序作为一个项目进行管理。

解决方案是创建一个分布维度,该维度必须首先放置在flavorDimensions数组中(com.google.gms.google-services插件仅在 google-services.json < / em>)。

    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应用捆绑包添加到“客户端”:[]数组中。)

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服务插件。
apply plugin: 'com.google.gms.google-services'