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