Gradle: применять плагин только для определенного аромата

Мой Android Gradle в настоящее время задает размер вкуса для использования другого push-сервиса. (Один для Baidu Push и один для GCM) Я хотел бы, чтобы мое приложение для Android только для импорта google-services для GCM-толчка. Возможно ли это сделать?

PS Потому что для того, чтобы использовать GCM в Android, я должен добавить apply plugin: 'com.google.gms.google-services' строка находится внизу моего файла app/build.gradle, как описано здесь.

В качестве обходного пути для успешного построения аромата baidu мне, возможно, понадобится установить манекен google-services.json для байду.

Обновление: я, кажется, нахожу ответ в этой длинной теме GitHub.

3 ответа

В вашем файле build.gradle добавьте этот код:

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

У меня была такая же проблема - у меня есть проект, который создает несколько приложений, каждое приложение имеет два варианта, один из которых распространяется через Google Play и использует Google Play Services и API Firebase, другой вариант распространяется через веб-загрузку (в основном для устройств AOSP) и не может включать ни Google Play Services, ни Firebase API.

В нашем файле app/build.gradle мы не хотели, чтобы какие-либо фанковые тесты условий, которые не казались совершенно очевидными, мы имели в виду "если вариант == web, то не применять подключаемые сервисы Google Play". Мы также не хотели иметь несколько копий файла google-services.json, то есть по одной для каждого приложения, мы хотели, чтобы была одна, содержащая все пакеты приложений, включенные для сервисов Google Play. Это потому, что мы довольно регулярно добавляем и удаляем приложения и хотим управлять этими приложениями как одним проектом в консоли Firebase.

Решение состояло в том, чтобы создать измерение распределения, это измерение должно быть сначала помещено в массив flameDimensions (плагин 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'
}

И, наконец, плагин 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'
        }
       }
     }