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

Art*_*ang 117 android json google-analytics google-cloud-messaging google-play-services

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

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

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

arn*_*ans 189

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

首先要做的事情

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

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

事实上,我发现插件版本com.google.gms的源代码:谷歌服务:1.4.0-beta3版,并没有在这方面appinvites找到任何具体参考我也没有找到任何谷歌API的应用程式邀请!(但也许它只是使用一个通用的API项目及其项目ID,我没试过这个)

它能做什么

google-services gradle-plugin会在您的应用模块中查找提到的google-services.json文件.然后,它看起来像项目的ID和跟踪ID和这样的配置的设置,由谷歌API开发者控制台到谷歌,services.json文件生成.从它找到的设置中,Android资源值生成到以下路径:

$project.buildDir/generated/res/google-services/$variant.dirName/values/values.xml
Run Code Online (Sandbox Code Playgroud)

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

app/build/generated/res/google-services/debug/values/values.xml
Run Code Online (Sandbox Code Playgroud)

例如,如果您遵循GCM教程,JSON文件将包含API项目的id作为以下android-resource:

<string name="gcm_defaultSenderId">project-id</string>
Run Code Online (Sandbox Code Playgroud)

所以这个插件和JSON文件不运行或发布您的应用必不可少的,它仅仅是一个快速启动辅助生成一些基本的Android资源文件的特定谷歌API的功能集成更加容易.

请注意,在下面的谷歌服务的插件总是产生这些Android的资源是在您的应用程序/的build.gradle定义的每个应用程序变引用的源代码.

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

什么不是

此插件和JSON文件不直接影响您的应用程序的所述Google功能的内部工作方式!如果你已经按照如何如GCM或谷歌Analytics(分析)整合上developer.android.com旧的教程,那么你甚至都不需要整合无论是gradle这个-插件谷歌的服务或谷歌,services.json文件!

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

在集成的谷歌服务gradle这个-插件,当同步您的项目,摇篮自动下载谷歌服务的依赖的路径相似,在此之后(在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
Run Code Online (Sandbox Code Playgroud)

如果您解压缩此jar文件,您将找到两个文件:

GoogleServicesPlugin.groovy
GoogleServicesTask.java
Run Code Online (Sandbox Code Playgroud)

其中包含gradle-plugin的普通源代码.

GoogleServicesPlugin.groovy
Run Code Online (Sandbox Code Playgroud)

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

GoogleServicesTask.java
Run Code Online (Sandbox Code Playgroud)

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

@TaskAction
public void action() throws IOException { 
Run Code Online (Sandbox Code Playgroud)

  • 关于此的后续注释,因为自您发布此内容后它可能已更改.[Google服务Gradle插件](https://developers.google.com/android/guides/google-services-plugin#introduction)指南说明了该插件的第二个功能.它还声称为"已启用的服务所需的基本库"添加了一些依赖项,以及检查依赖项冲突(来自版本混合).我挖掘了消息来源,它似乎也注入了"编译com.google.android.gms:play-services-measurement".只是一个FYI,万一有人看到弹出,不知道为什么. (7认同)
  • 考虑到该文件包含几个键,将它添加到版本控制是否安全?据我所知,这只是指纹,所以我认为这是安全的.但我不完全确定. (3认同)
  • 更好的答案.但是在尝试遵循建议的方法时似乎存在问题(https://developers.google.com/analytics/devguides/collection/android/v4/)"接受的答案"是一个荒谬的SO概念,完全取决于耐心可以决定的人... (2认同)

Moh*_*man 37

这个文件到底是为了什么:

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

官方文件说:

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

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

  • 安全性怎么样?可以重新创建google-services.json并从apk中读取吗?我在里面看到了一个开发人员和API密钥.我不喜欢被别人知道...... (6认同)
  • 谢谢您的回答.只是有疑问,但想知道你是否愿意提供帮助.我看到你的链接发布到登录服务.但如果我只在我的应用中使用Google Analytics和GCM服务,而不需要登录,我还需要保留此文件吗?谢谢! (3认同)
  • 是的,对于分析或GCM,您还需要此配置文件.在文档的第2步中,您必须转到**GET A CONFIGURATION FILE**链接.在那里,您必须选择是否将此conf文件用于GCM或分析.此文件只包含您的开发人员身份(如api密钥,开发人员的SHA1哈希等) (3认同)
  • @androidGuy很抱歉迟到的回复.我认为您必须使用最新版本SHA1 keyhash创建新配置google-services.json文件.其他明智的一些功能可能无法在Play商店发布后使用.对于之前的混乱,我将删除我以前的评论,因为它会让某人走错方向. (2认同)

Bet*_*das 5

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

String serverClientId = getString(R.string.default_web_client_id);
Run Code Online (Sandbox Code Playgroud)

google-service.json 文档中有一个包含所有字符串和更多信息的列表