Plug-in do Google Services para Gradle

Introdução

Como parte da ativação das APIs do Google ou dos serviços do Firebase no seu aplicativo, talvez seja necessário adicionar o plug-in google-services ao seu Arquivo build.gradle:

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

O plug-in google-services tem duas funções principais:

  1. Processar o arquivo google-services.json e produzir o Android que podem ser usados o código-fonte. Consulte mais informações em Como adicionar o arquivo JSON.
  2. Adicione dependências para bibliotecas básicas necessárias para os serviços que você tem ativado. Esta etapa exige que você aplique a API Gradle dos Serviços do Google plug-in no arquivo app/build.gradle da seguinte forma:
    apply plugin: 'com.google.gms.google-services'

    Para conferir o resultado desta etapa, execute ./gradlew :app:dependencies:

Como adicionar o arquivo JSON

O arquivo google-services.json geralmente é colocado no Diretório app/ (na raiz do módulo do app Android Studio). Conforme da versão 2.2.0 o plug-in oferece suporte ao tipo de build e à variação de produto. arquivos JSON específicos. Todas as estruturas de diretório a seguir são válidas:

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

Observação:fornecer um arquivo google-services.json no diretório de lançamento permite manter um projeto separado do Firebase para seus APKs de produção.

Quando as variações de produto são usadas, essas estruturas de diretórios mais complicadas são também é válido.

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

Como processar o arquivo JSON

O arquivo google-services.json tem a seguinte estrutura básica:

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

O objeto project_info contém informações gerais sobre os projeto, enquanto cada membro da matriz client contém informações sobre os clientes (apps Android) que você adicionou ao projeto.

Ao processar o arquivo JSON para seu aplicativo Android, o plug-in usa apenas o Objeto client que corresponde ao nome do seu pacote (para o build atual). , com base na seguinte lógica:

  • Para cada membro da matriz client:
    • Verificar o valor de client_info/android_client_info/package_name
    • Se o nome do pacote corresponder a esse valor, retornará o objeto do membro.
  • Se nenhum dos membros de client corresponder ao nome do pacote, uma exceção será lançada.

No restante deste documento, usaremos {YOUR_CLIENT} para nos referirmos o membro da matriz client determinado pelo procedimento acima.

O principal resultado do processamento JSON é a produção de dois arquivos XML que você como recursos do Android no código Java. Confira abaixo um exemplo cada arquivo:

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>

Todos os valores nos arquivos XML estão presentes no arquivo google-services.json nos locais abaixo. Se o projeto Android tiver configurações que impede o uso do plug-in google-services, é possível recriar com segurança os arquivos XML manualmente usando estes valores:

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

Solução de problemas

P: Ao criar, recebo a seguinte mensagem de erro: "Arquivo O google-services.json não foi encontrado na pasta raiz do módulo. Serviços do Google O plug-in não pode funcionar sem ele". .

R: O Console do Firebase ajudará você faça o download do google-services.json. Além disso, os guias de início rápido para a maioria das APIs contêm instruções para para gerar esse arquivo. Depois de fazer o download do arquivo google-services.json, copie-o na pasta app/ do projeto do Android Studio ou na app/src/{build_type} se você estiver usando vários tipos de build.

P: Não consigo encontrar o símbolo "R.string.gcm_defaultSenderId", "R.xml.global_tracker" etc.

R: Verificar se o nome do pacote no arquivo build.gradle corresponde ao nome do pacote inserido ao criar o google-services.json . Se você não tiver certeza, execute o fluxo de introdução novamente e um novo arquivo JSON.