如何维护两个google-services.json,生产和调试

时间:2016-05-03 09:20:43

标签: android google-cloud-messaging android-gradle google-play-services

我在我的应用程序中包含了gcm的功能,为此我需要为 debug 维护两个google-services.json,为 release 构建一个。怎么做 ??我可以配置gcm而不使用google-services.json ??

3 个答案:

答案 0 :(得分:4)

当前插件(com.google.gms:google-services:2.1.X)支持 风格 ,但不支持类型

因此,如果您创建了productflavor,则可以将json文件放在src/$flavorname

示例:

app/src/
    flavor1/google-services.json
    flavor2/google-services.json

目前它不适用于类型(调试,发布......),但你可以像这样使用somenthing:

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

您可以找到更新的信息here

答案 1 :(得分:2)

我当前正在使用以下版本: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中。您可能需要创建发布和调试文件夹。

注意:将这些文件添加到app文件夹是一个常见错误,请确保如上所述将其添加到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's response

答案 2 :(得分:0)

首先,将每个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。调试buildType的逻辑相同。您可以运行:app:assembleRelease,发行版本google_services.json将自动复制到您应用模块的根文件夹中。

信用归于:扎克·塔卡迪(Zak Taccardi) https://medium.com/google-cloud/automatic-per-variant-google-services-json-configurations-with-gradle-d3d3e40abc0e