it-swarm.dev

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

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

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

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

115
Arthur Wang

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

首先要做的事情

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

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

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

它能做什么

Google-services gradle-plugin会在您的应用模块中查找提到的google-services.json文件。然后,它会查找由Google API开发者控制台生成的google-services.json文件中的已配置设置,例如project-id和tracking-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资源:

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

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

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

如果您不想这样,则应在所需的应用程序变体中使用这些生成的资源,并删除其他资源。不要忘记从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上,您可能需要查看适用于Linux的home/.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

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

GoogleServicesTask.Java

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

@TaskAction
public void action() throws IOException { 
187
arne.jans

这个文件到底是什么:

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

官方文档说:

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

请参阅 它的工作原理 部分。

37
Mohammad Arman

将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

3
Beto Caldas