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