我的工作是将谷歌分析和GCM服务添加到我当前的应用程序中。在这两个服务的实现指南中,google要求开发人员生成一个json文件: google-services.json,并将其放在应用程序的根目录下。
我发现,即使我从我的应用程序中删除了这个json文件,这些服务仍然可以工作。
我只想确定一下,这个文件到底是用来做什么的?它的用途是什么,它是如何工作的?
发布于 2015-10-12 22:40:09
我调查了一下google-services插件和json,找到了这个插件的源代码。
首先要做的事情
由classpath引用的gradle-plugin google-services只是一个构建时插件!所以它只影响你的应用程序的构建过程,而不是运行时过程!
这个插件只是一个快速入门的助手,用于在你的应用程序中快速集成Google服务。显然,这个过程有些复杂,而且没有文档记录,所以谷歌应该清楚这个过程的作用。
事实上,我找到了插件版本com.google.gms的源代码: Google -services:1.4.0-beta3,但没有找到任何关于appinvite的具体引用,也没有找到任何用于应用邀请的Google API!(但可能它只是使用了一个带有项目id的通用API项目,我没有尝试这样做)
它的作用
google-services gradle-plugin在app-module中查找提到的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-resource:
<string name="gcm_defaultSenderId">project-id</string>
因此,这个插件和JSON文件对于运行或发布你的应用程序并不是必须的,它只是一个快速入门的帮助器,用于生成一些基本的android资源文件,以便更容易地集成特定的Google API功能。
请注意,在下面引用的源代码中,谷歌服务插件总是为你的应用程序/build.gradle中定义的每个应用程序变体生成这些android-resource。
如果你不想这样,你应该在你想要的应用程序中使用那些生成的资源--变体,然后删除其他的。别忘了从app/build.gradle中删除谷歌服务插件应用,否则它将为所有app-variants重新生成。
它不能做什么
这个插件和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
包含应用程序变量的处理和路径的基本定义等。
GoogleServicesTask.java
包含实际的任务定义,请查看以下方法以了解其真正的作用:
@TaskAction
public void action() throws IOException {
发布于 2017-01-10 03:01:07
将google-services.json添加到您的模块中,并进行清理和A重建。你的项目属性将在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中有一个包含所有字符串和更多信息的列表
https://stackoverflow.com/questions/31597953
复制相似问题