我在我的应用程序中包含了 gcm 功能,为此我需要维护两个 google-services.json,一个用于 debug,另一个用于 release 构建。怎么办呢?
我可以在不使用 google-services.json 的情况下配置 gcm 吗??
首先,将每个 buildType 各自的 google_services.json 放置在以下位置:
app/src/debug/google_services.json
app/src/test/google_services.json
app/google_services.json
注意:根 app/google_services.json 根据构建变体,此文件应该存在,复制根 json 文件中的 json 代码
现在,让我们在应用程序的 build.gradle 中启动一些 gradle 任务,以自动将相应的 google_services.json 移动到 app/google_services.json
将其复制到应用程序/Gradle 文件中
task switchToDebug(type: Copy) {
description = 'Switches to DEBUG google-services.json'
from "src/debug"
include "google-services.json"
into "."
}
task switchToRelease(type: Copy) {
description = 'Switches to RELEASE google-services.json'
from "src/release"
include "google-services.json"
into "."
}
太棒了——但是在构建应用程序之前必须手动运行这些任务很麻烦。我们希望上面适当的复制任务在运行 assembleDebug 或 :assembleRelease 之前运行。让我们看看运行 :assembleRelease 时会发生什么:将其复制到 /gradlew 文件中
Zaks-MBP:my_awesome_application zak$ ./gradlew assembleRelease
Parallel execution is an incubating feature.
.... (other tasks)
:app:processReleaseGoogleServices
....
:app:assembleRelease
注意 :app:processReleaseGoogleServices 任务。此任务负责处理根 google_services.json 文件。我们希望处理正确的 google_services.json,因此我们必须立即运行复制任务。 将其添加到您的 build.gradle 中。请注意后面的 afterEvaluate。
将其复制到应用程序/Gradle 文件中
afterEvaluate {
processDebugGoogleServices.dependsOn switchToDebug
processReleaseGoogleServices.dependsOn switchToRelease
}
现在,无论何时调用 :app:processReleaseGoogleServices,我们新定义的 :app:switchToRelease 都会提前被调用。调试构建类型的逻辑相同。您可以运行 :app:assembleRelease ,发布版本 google_services.json 将自动复制到您的应用程序模块的根文件夹中。
感谢 Zak Taccardi 他们的 Medium 文章
当前插件(
com.google.gms:google-services:2.1.X
)支持flavors,但不支持types。
因此,如果您创建一个productflavor,您可以将json文件放入
src/$flavorname
示例:
app/src/
flavor1/google-services.json
flavor2/google-services.json
目前它不适用于类型(调试、发布...),但您可以使用这样的东西:
app/src/release/google-services.json
app/google-services.json
在这种情况下,插件会查找位置,并在找到 google-services.json 文件时停止。
如果您使用某种口味,它会变成:
app/src/foo/release/google-services.json
app/src/foo/google-services.json
您可以在此处找到更新的信息。
我目前使用以下版本:com.google.gms:google-services:4.3.3、com.google.firebase:firebase-messaging:20.2.0
将
google-services.json
文件放入 $projectName/app/src/$buildType
目录中。例如,将一个 json 文件放置在 src/release
中,将另一个 json 文件放置在 src/debug
中。您可能需要创建发布和调试文件夹。
注意: 将这些文件添加到应用程序文件夹中是一个常见的错误,请确保按照上述方式将其添加到 src 文件夹中。
google-services 插件总是寻找 google-services.json 文件在两个目录中:首先,在 $projectName/app/src/$buildType/google-services.json。如果没有 在这里找到它,它向上一级,到 $projectName/app/google-services.json。因此,当您构建 应用程序的调试版本,它将搜索 google-services.json 在 $projectName/app/src/debug/ 目录下。
在下面的链接中,请参阅 David Ojeda 的回复。