google-services.json究竟做了什么?

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

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

只是想知道,这个文件真的是为了什么? 它的用法和工作原理

我调查了一下google-services插件和json,发现了这个插件的来源。

首先是事情

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

这个插件只能作为快速入门的帮手,将Google服务快速集成到您的应用中。 显然,这个过程有点复杂,没有logging,所以Google应该明确说明这个过程是干什么的。

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

它能做什么

google-services gradle-plugin在app-module中查找提到的google-services.json文件。 然后,它会查找由Google API开发人员控制台生成的configuration设置,例如项目ID和跟踪ID等,并将其input到google-services.json文件中。 从它find的设置,Android资源值生成到以下path:

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

例如对于你的应用程序的debugging版本:

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

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

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

因此,这个插件和JSON文件对于运行或发布您的应用程序并不是必不可less的,它只是一个快速启动助手来生成一些基本的android资源文件,以便于集成特定的Google APIfunction。

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

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

它不是

这个插件和JSON文件不会直接影响你的应用程序的谷歌function的内部工作! 如果您已经在developer.android.com上关注了如何整合如GCM或Google Analytics等较早的教程,那么您甚至不需要集成gradle-plugin google-services或google-services.json文件!

注意我在哪里find的来源

在集成了google-services gradle-plugin和同步项目之后,Gradle会自动将google-services依赖关系下载到类似于此的path中(在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 

包含应用变体的处理和path的基本定义等。

 GoogleServicesTask.java 

包含实际的任务定义,请查找以下方法来查看它的实际function:

 @TaskAction public void action() throws IOException { 

什么是这个文件真的是:

google-services.json包含开发人员凭据和configuration设置,在与GoogleApiClient连接时需要进行validation。 虽然您的服务在您的testing设备上正常工作,因为它正在检测您的开发者帐户,但在公开发布您的应用程序之后,没有json文件,它将无法正常工作。 所以不要删除它。

官方文件说:

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

看看它是如何工作的 。

将google-services.json添加到您的模块并执行CLEAN和REBUILD。 一个xml文件将会在app / build / generated / res / google-services / debug / values / values.xml中与你的项目属性一起生成,你就可以像普通的xmlstring一样容易地访问。 例:

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

在google-service.json文档中有一个包含所有string和妈妈信息的列表