google-services.json到底做了什么?

时间:2015-07-23 21:00:22

标签: android json google-analytics google-play-services google-cloud-messaging

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

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

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

3 个答案:

答案 0 :(得分:187)

我对google-services插件和json进行了一些调查,并找到了这个插件的来源。

首先是

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

此插件仅作为快速入门帮助您在应用中快速集成Google服务。显然,这个过程有点复杂,没有记录,因此谷歌应该明确这个过程的作用。

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

它做什么

google-services gradle-plugin会在您的应用模块中查找上述google-services.json文件。然后,它会查找由Google API开发人员控制台生成的google-services.json文件中的已配置设置,例如project-id&和tracking-id& s等。 根据它找到的设置,Android资源值将生成到以下路径中:

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

例如,对于应用的调试版本:

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

E.g。如果您按照GCM教程,JSON文件将包含API项目的id作为以下android-resource:

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

因此,此插件和JSON文件对于运行或发布应用程序并不重要,它只是生成一些基本的android资源文件的快速入门助手,可以更轻松地集成特定的Google API功能。

请注意,在下面引用的源代码中,google-services插件始终会为app / build.gradle中定义的每个app-variant生成这些android-resources。

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

它不是什么

此插件和JSON文件不直接影响您的应用程序的所述Google功能的内部工作方式! 如果您已经在developer.android.com上关注了如何集成的旧教程,例如GCM或Google Analytics,您甚至不需要集成gradle-plugin google-services或google-services.json文件!

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

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

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

包含app变体的处理和路径的基本定义等。

GoogleServicesTask.java

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

@TaskAction
public void action() throws IOException { 

答案 1 :(得分:37)

这个文件的真正含义是什么:

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

官方文档说:

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

请参阅how it works部分。

答案 2 :(得分:3)

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

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

google-service.json doc

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