当前位置: 首页 > 面试题库 >

google-services.json到底做什么?

唐阳飙
2023-03-14
问题内容

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

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

只想确定一下,该文件的真正用途是什么?它的用法是什么以及如何工作?


问题答案:

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

第一件事

由classpath引用并应用apply的gradle-plugin google-
services仅是一个构建时插件!因此,它只会影响应用程序的构建过程,而不会影响运行时过程!

此插件仅是将Google服务快速集成到您的应用中的快速入门帮助程序。显然,该过程有些复杂且没有文档记录,因此Google应该明确该过程的作用。

实际上,我找到了插件版本com.google.gms:google-
services:1.4.0-beta3的源代码,但未在其中找到有关appinvites的任何特定参考,也没有找到任何Google for App
Invites的API!(但也许它只是使用具有其项目ID的通用API项目,但我没有尝试过)

它能做什么

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-resource:

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

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

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

如果您不希望这样做,则应在所需的应用变量中使用这些生成的资源,然后删除其他资源。不要忘记从app / build.gradle中删除适用于google-
services的插件,否则它将为所有app-variant重新生成。

它没有

这个插件和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-variant的处理和路径的基本定义等。

GoogleServicesTask.java

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

@TaskAction
public void action() throws IOException {


 类似资料:
  • 问题内容: 在Tour of Go网站的go 1.5发行之前的版本中,有一段代码看起来像这样。 输出看起来像这样: 令我困扰的是,将其删除后,该程序不再显示“世界”。 为什么呢?如何影响执行力? 问题答案: 注意: 从Go 1.5开始,将GOMAXPROCS设置为硬件内核数:golang.org/doc/go1.5#runtime,低于1.5之前的原始答案。 当您在未指定GOMAXPROCS环境变

  • 根据几个因素(包括OS/浏览器组合),WebDriver可能等待或不等待页面加载。在某些情况下,WebDriver可能会在页面完成加载或甚至开始加载之前返回控制 有人能解释一下在什么情况下WebDriver会在页面完成甚至开始加载之前返回控制吗?

  • 我有一个Spring Boot后端,我刚刚解决了从Angular frontend上传文件时的“ERR_CONNECTION_RESET”问题,方法是配置Tomcat属性。我想弄清楚它到底是做什么的。Tomcat文档对我来说并不明显: 对于中止的上载,Tomcat将吞下的最大请求主体字节数(不包括传输编码开销)。中止上载是指Tomcat知道请求正文将被忽略,但客户端仍然发送它。如果Tomcat没有

  • 问题内容: 这是我的代码: 这是我从解释器运行输出时的结果: 如果您注意到输出,则创建巨大的列表会消耗621.5 MB,而删除它只会释放152.6 MB。当我检查文档时,我发现以下语句: 因此,我猜想它并没有删除对象本身,而只是取消了绑定。 但是,它在解除绑定方面做了什么工作,从而释放了很大的空间(152.6 MB) 。有人可以痛苦地解释我在这里发生什么吗? 问题答案: Python是一种垃圾收集

  • 我安装了tensorflow的gpu版本,创建会话后,它会显示以下日志: I tensorflow/core/common_runtime/gpu/gpu_device.cc:885]找到属性为:name:GeForce GTX TITAN Black major:3 minor:5 memoryClockRate(GHz)的设备00.98 pciBusID 0000:01:00.0总内存:5.9

  • 我很难理解的概念,因为根据视图,它做不同的事情。根据官方的留档,这是一个 用于根据系统窗口(如状态栏)调整视图布局的布尔内部属性。如果为true,则调整此视图的填充以为系统窗口留出空间。 现在,检查class我可以看到,当设置为时,窗口会插入(状态栏、导航栏…)应用于视图填充,该填充根据上面引用的文档工作。这是守则的相关部分: 有了新的材料设计,有了新的类别,这些类别广泛地使用了这面旗帜,这就是混