google-services.json 到底是做什么的?

What does google-services.json really do?

我致力于将 Google 分析和 GCM 服务添加到我当前的应用程序中。 在这两个服务实现的指南中,google 要求开发者生成一个 json 文件:google-services.json 并将其放在应用程序的根目录下。

我发现即使我从我的应用程序中删除这个 json 文件,服务仍然有效。

只是想确切地知道,这个文件到底是做什么用的?它的用途和工作原理是什么?

这个文件的真正用途是什么:

google-services.json 包含开发人员凭据和配置设置,在与 GoogleApiClient 连接时需要进行验证。虽然您的服务在您的测试设备上运行良好,因为它正在检测您的开发者帐户,但在 public 中发布您的应用程序后,如果没有 json 文件,它将无法运行。所以不要删除它。

官方文档说:

应用程序构建一个 GoogleApiClient,指定应用程序将访问哪些范围和 API。当 GoogleApiClient 连接时,用户已登录。

参见 how it works 部分。

我调查了一些有关 google-services 插件和 json 的信息,并找到了该插件的来源。

要事第一

类路径引用的 gradle-plugin google-services 只是一个构建时插件!所以它只影响你的应用程序的构建过程,而不影响运行时过程!

此插件仅作为快速入门助手,可在您的应用中快速集成 Google 服务。显然,该过程有些复杂且没有记录,因此 Google 应该清楚该过程的作用。

事实上,我找到了插件版本 com.google.gms:google-services:1.4.0-beta3 的源代码,但没有找到任何关于 appinvites 的具体参考,也没有找到任何 Google API 应用程序邀请! (但也许它只是使用一个通用的 API 项目及其项目 ID,我没试过)

它的作用

google-services gradle-plugin 在您的应用程序模块中查找提到的 google-services.json 文件。然后它会在 google-services.json 文件中查找由 Google API 开发人员控制台生成的配置设置,如项目 ID 和跟踪 ID 等。 从它找到的设置中,Android 资源值生成到以下路径:

$project.buildDir/generated/res/google-services/$variant.dirName/values/values.xml

例如,对于您的应用程序的调试构建:

app/build/generated/res/google-services/debug/values/values.xml

例如如果您遵循 GCM 教程,JSON 文件将包含 API 项目的 ID,如下所示 android-resource:

<string name="gcm_defaultSenderId">project-id</string>

所以这个插件和 JSON 文件对于 运行 或发布您的应用程序不是必不可少的,它只是一个快速入门助手,可以生成一些基本的 android-资源文件以便于集成具体 Google API 功能。

请注意下面引用的源代码中 google-services 插件总是为您的 app/build 中定义的每个应用变体生成那些 android-资源。gradle.

如果您不想这样,您应该在您想要的应用程序变体中使用那些生成的资源,并删除其他资源。不要忘记从 app/build.gradle 中删除 google-services 插件应用,否则它将为所有应用程序变体重新生成。

它没有什么

此插件和 JSON 文件不会直接影响所述 Google 应用程序功能的内部运作! 如果您已经按照 developer.android.com 上关于如何集成的旧教程进行操作,例如GCM 或 Google Analytics,那么您甚至不需要集成 gradle-插件 google-服务或 google-services.json 文件!

关于我在哪里找到资源的通知

集成 google-services gradle-plugin 并同步项目后,Gradle 会自动将 google-services 依赖项下载到类似于以下的路径这(在 Windows,您可能需要查看您的家/.gradle 以获得 Linux):

C:\Users\user\.gradle\caches\modules-2\files-2.1\com.google.gms\google-services.4.0-beta3\f1580f62e3be313eba041ce19b64fd3f44cf8951\google-services-1.4.0-beta3-sources.jar

如果你解压这个 jar 文件,你会发现两个文件:

GoogleServicesPlugin.groovy
GoogleServicesTask.java

其中包含 gradle-插件的原始源代码。

GoogleServicesPlugin.groovy

包含应用变体的处理和路径的基本定义等

GoogleServicesTask.java

包含实际的任务定义,查找以下方法以查看其实际作用:

@TaskAction
public void action() throws IOException { 

将 google-services.json 添加到您的模块并进行清理和重建。 xml 文件将在 app/build/generated/res/google-services/debug/values/values.xml 中使用您的项目属性生成,然后您可以像普通 xml 字符串一样轻松访问。 示例:

String serverClientId = getString(R.string.default_web_client_id);

google-service.json doc

中有一个包含所有字符串和更多信息的列表