Plug-in Gradle des services Google

Introduction

Pour activer les API Google ou les services Firebase dans votre application Android, vous devrez peut-être ajouter le plug-in google-services à votre fichier build.gradle:

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

Le plug-in google-services a deux fonctions principales:

  1. Traitez le fichier google-services.json et produisez des ressources Android pouvant être utilisées dans le code de votre application. Pour en savoir plus, consultez Ajouter le fichier JSON.
  2. Ajoutez les dépendances des bibliothèques de base requises pour les services que vous avez activés. Pour cette étape, vous devez appliquer le plug-in Gradle des services Google dans votre fichier app/build.gradle, comme suit:
    apply plugin: 'com.google.gms.google-services'

    Vous pouvez voir le résultat de cette étape en exécutant ./gradlew :app:dependencies.

Ajouter le fichier JSON

Le fichier google-services.json est généralement placé dans le répertoire app/ (à la racine du module d'application Android Studio). À partir de la version 2.2.0, le plug-in est compatible avec les fichiers JSON spécifiques au type de compilation et à la saveur du produit. Toutes les structures de répertoires suivantes sont valides:

// dogfood and release are build types.
app/
    google-services.json
    src/dogfood/google-services.json
    src/release/google-services.json
    ...

Remarque:Fournir un fichier google-services.json dans le répertoire de publication vous permet de gérer un projet Firebase distinct pour vos APK de production.

Lorsque des variantes de produit sont utilisées, ces structures de répertoires plus complexes sont également valides.

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

Traitement du fichier JSON

Le fichier google-services.json présente la structure de base suivante:

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

L'objet project_info contient des informations générales sur votre projet, tandis que chaque membre du tableau client contient des informations sur les clients (applications Android) que vous avez ajoutés au projet.

Lors du traitement du fichier JSON pour votre application Android, le plug-in n'utilise que l'objet client correspondant à votre nom de package (pour le type de compilation actuel) en fonction de la logique suivante:

  • Pour chaque membre du tableau client :
    • Vérifiez la valeur de client_info/android_client_info/package_name.
    • Si le nom du package correspond à cette valeur, renvoyez l'objet membre.
  • Si aucun des membres de client ne correspond au nom du package, une exception est générée.

Dans la suite de ce document, nous utiliserons {YOUR_CLIENT} pour désigner le membre du tableau client déterminé par la procédure ci-dessus.

Le résultat principal du traitement JSON est de produire deux fichiers XML que vous pouvez référencer en tant que ressources Android dans votre code Java. Vous trouverez ci-dessous un exemple de chacun de ces fichiers:

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>

Chaque valeur des fichiers XML est présente dans le fichier google-services.json aux emplacements ci-dessous. Si votre projet Android comporte une configuration qui vous empêche d'utiliser le plug-in google-services, vous pouvez recréer en toute sécurité les fichiers XML manuellement à l'aide de ces valeurs:

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

Dépannage

Q: Lors de la compilation, le message d'erreur suivant s'affiche: "Le fichier google-services.json est manquant du dossier racine du module. Le plug-in des services Google ne peut pas fonctionner sans lui."

A: La console Firebase vous aidera à télécharger le google-services.json. De plus, les guides de démarrage rapide de la plupart des API contiennent des instructions pour générer ce fichier. Une fois le fichier google-services.json téléchargé, copiez-le dans le dossier app/ de votre projet Android Studio ou dans le dossier app/src/{build_type} si vous utilisez plusieurs types de compilation.

Q: Je ne trouve pas le symbole "R.string.gcm_defaultSenderId", "R.xml.global_tracker", etc.

A: Assurez-vous que le nom du package dans votre fichier build.gradle correspond au nom du package que vous avez saisi lors de la création du fichier google-services.json. Si vous n'êtes pas sûr, suivez à nouveau le flux de démarrage et obtenez un nouveau fichier JSON.