Google Services Gradle 外掛程式

簡介

如要在 Android 應用程式中啟用 Google API 或 Firebase 服務,您可能需要將 google-services 外掛程式新增至 build.gradle 檔案:

dependencies {
    classpath 'com.google.gms:google-services:4.4.2'
    // ...
}

google-services 外掛程式有兩個主要功能:

  1. 處理 google-services.json 檔案,並產生可用於應用程式程式碼的 Android 資源。詳情請參閱「新增 JSON 檔案」一節。
  2. 新增所需基本程式庫的依附元件,以便啟用服務。這個步驟需要您在 app/build.gradle 檔案中套用 Google 服務 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
    ...

注意:在發布目錄中提供 google-services.json 檔案,即可為正式版 APK 維護個別的 Firebase 專案。

使用產品變種時,這些較複雜的目錄結構也有效。

// free and paid are product flavors.
app/
    google-services.json
    src/dogfood/paid/google-services.json
    src/release/free/google-services.json
    ...

處理 JSON 檔案

google-services.json 檔案的基本結構如下:

{
  "project_info": {...},
  "client": [...],
}

project_info 物件包含專案的一般資訊,而 client 陣列的每個成員則包含您已新增至專案的用戶端 (Android 應用程式) 相關資訊。

處理 Android 應用程式的 JSON 檔案時,外掛程式只會根據下列邏輯,使用與套件名稱 (針對目前的建構類型) 相符的 client 物件:

  • 針對 client 陣列的每個成員:
    • 檢查 client_info/android_client_info/package_name 的值
    • 如果套件名稱與此值相符,請傳回成員物件。
  • 如果 client 的所有成員都與套件名稱不符,系統會擲回例外狀況。

在本文件的其餘部分,我們會使用 {YOUR_CLIENT} 來參照由上述程序決定的 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

疑難排解

問:建構時,我收到以下錯誤訊息:「模組根目錄中缺少 google-services.json 檔案。Google 服務外掛程式無法在沒有這個檔案的情況下運作」。

答: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 檔案。