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

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

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

只是想确定一下,这个文件到底是用来做什么的? 它的用途是什么? 它是如何工作的?

52996 次浏览

这个文件的真正目的是什么:

谷歌服务。Json 包含开发人员凭证和配置设置,在连接 GoogleApiClient 时需要验证这些设置。虽然您的服务在测试设备上运行良好,因为它正在检测您的开发人员帐户,但是在公开发布您的应用程序之后,如果没有 json 文件,它将无法工作。那就别删。

官方文件说:

应用程序构建 GoogleApiClient,指定应用程序将访问哪些作用域和 API。当 GoogleApiClient 连接时,用户登录。

参见 它是怎么运作的部分。

我调查了一下 google-services 插件和 json,找到了这个插件的源代码。

要事第一

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

这个插件只是作为一个快速启动的帮手,以集成谷歌服务快速在您的应用程序。显然,这个过程有些复杂,没有文档化,所以 Google 应该明确说明这个过程是做什么的。

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

它的作用

Google-services gradle-plugin 寻找上面提到的 google-services。应用程序模块中的 json 文件。然后,它查找由 Google API 开发者控制台生成到 Google 服务中的 project-id 和 trace-id 等配置设置。Json 文件。 根据它找到的设置,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 资源:

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

所以这个插件和 JSON 文件对于运行或发布你的应用程序来说并不是必不可少的,它只是一个快速启动的帮手,用来生成一些基本的 android 资源文件,以便更容易地集成特定的 Google API 功能。

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

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

它没有的东西

这个插件和 JSON 文件不会直接影响你的应用程序的内部工作原理! 如果你已经学习过如何整合的 developer.android.com 教程,比如 gCM 或者 Google 分析,那么你甚至不需要整合 gradle-plugin Google-services 或者 Google-services。Json 文件!

请注意我在哪里找到的来源

当你集成了 google-services Gradle 插件并且同步了你的项目后,Gradle 会自动下载 google-services 依赖项到一个类似的路径(在 Windows 上,你可能需要查看你的家/。用于 Linux 的 gradle) :

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

如果解压缩这个 jar 文件,您将发现两个文件:

GoogleServicesPlugin.groovy
GoogleServicesTask.java

其中包含了 gradle-plugin 的纯源代码。

GoogleServicesPlugin.groovy

包含应用程序变量的处理和路径的基本定义等。

GoogleServicesTask.java

包含实际的任务定义,请查看下面的方法,看看它到底是做什么的:

@TaskAction
public void action() throws IOException {

将 google-services. json 添加到您的模块并执行 CLEAN 和 REBUILD 操作。 一个 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中有一个包含所有字符串和更多信息的列表