介绍
作为在Android应用程序中启用Google API或Firebase服务的一部分,必须将google-services.json插件添加到build.gradle文件中:
dependencies {
classpath 'com.google.gms:google-services:4.3.5'
// ...
}
google-services插件有两个主要功能:
- 处理google-services.json文件并生成可在您的应用程序代码中使用的Android资源。 请参阅添加JSON文件以获取更多信息。
- 为已启用的服务所需的基本库添加依赖项。 此步骤要求您在app/build.gradle文件中应用Google Services Gradle插件,如下所示:
apply plugin: 'com.google.gms.google-services'
您可以通过运行**./gradlew :app:dependencies**查看此步骤的结果。
添加json文件
google-services.json文件通常放置在app/目录中(位于Android Studio应用程序模块的根目录)。 从2.2.0版开始,该插件支持构建类型和产品风味特定的JSON文件。 以下所有目录结构均有效:
// dogfood and release are build types.
app/
google-services.json
src/dogfood/google-services.json
src/release/google-services.json
...
处理json文件
google-services.json文件具有以下基本结构:
{
"project_info": {...},
"client": [...],
}
project_info对象包含有关项目的常规信息,而客户端数组的每个成员均包含有关已添加到项目中的客户端(Android应用程序)的信息。
在为您的Android应用处理JSON文件时,该插件仅根据以下逻辑使用与您的包名(对于当前构建类型)相匹配的客户端对象:
-
对于客户端数组的每个成员:
- 检查client_info/android_client_info/package_name的值
- 如果程序包名称与此值匹配,则返回成员对象。
-
如果客户端的任何成员都不匹配包名,则将引发异常。
对于本文档的其余部分,我们将使用{YOUR_CLIENT}来引用由上述过程确定的客户端数组的成员。
JSON处理的主要结果是生成两个XML文件,您可以将它们作为Java代码中的Android资源进行引用。 以下是每个文件的示例:
app/build/generated/res/google-services/{build_type}/values/values.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<! -- Present in all applications -->
<string name="google_app_id" translatable="false">1:1035469437089:android:73a4fb8297b2cd4f</string>
<! -- Present in applications with the appropriate services configured -->
<string name="gcm_defaultSenderId" translatable="false">1035469437089</string>
<string name="default_web_client_id" translatable="false">337894902146-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com</string>
<string name="ga_trackingId" translatable="false">UA-65557217-3</string>
<string name="firebase_database_url" translatable="false">https://example-url.firebaseio.com</string>
<string name="google_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
<string name="google_crash_reporting_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
<string name="project_id" translatable="false">mydemoapp</string>
</resources>
app/build/generated/res/google-services/{flavor}/{build_type}/xml/global_tracker.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="ga_trackingId" translatable="false">UA-65557218-3</string>
</resources>
XML文件中的每个值都位于以下位置的google-services.json文件中。 如果您的Android项目具有某些配置,使您无法使用google-services插件,则可以使用以下值安全地手动重新创建XML文件:
google_app_id:
{YOUR_CLIENT}/client_info/mobilesdk_app_id
gcm_defaultSenderId:
project_info/project_number
default_web_client_id:
{YOUR_CLIENT}/oauth_client/client_id (client_type == 3)
ga_trackingId:
{YOUR_CLIENT}/services/analytics-service/analytics_property/tracking_id
firebase_database_url:
project_info/firebase_url
google_api_key:
{YOUR_CLIENT}/api_key/current_key
google_crash_reporting_api_key:
{YOUR_CLIENT}/api_key/current_key
project_id:
project_info/project_id
故障排除
问:构建时,我收到以下错误消息:“ File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it”。
答:Firebase控制台将帮助您下载google-services.json。此外,大多数API的快速入门指南均包含生成此文件的说明。 下载google-services.json文件后,将其复制到Android Studio项目的app/文件夹中,如果使用多种构建类型,则将其复制到app/src/{build_type}文件夹中。
问:我找不到符号“R.string.gcm_defaultSenderId”,“R.xml.global_tracker”等。
答:请确保您build.gradle文件中的软件包名与您在创建google-services.json文件时输入的包名相匹配。 如果不确定,请再次执行入门流程并获取一个新的json文件。