Plug-in do Google Services para Gradle

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Introdução

Como parte da ativação de APIs do Google ou dos serviços do Firebase no seu aplicativo Android, pode ser necessário adicionar o plug-in google-services ao seu arquivo build.gradle:

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

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

  1. Processe o arquivo google-services.json e produza recursos para Android que possam ser usados no código do aplicativo. Para mais informações, consulte Como adicionar o arquivo JSON.
  2. Adicione dependências para bibliotecas básicas necessárias para os serviços ativados. Essa etapa exige que você aplique o plug-in do Gradle para Serviços do Google no arquivo app/build.gradle, desta forma:
    apply plugin: 'com.google.gms.google-services'

    Para ver o resultado dessa 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. A partir da versão 2.2.0, o plug-in oferece suporte a arquivos JSON específicos de tipo de build e variação de produto. Todas as seguintes estruturas de diretório 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 estão em uso, essas estruturas de diretório mais complicadas também são válidas.

// 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 seu 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 app Android, o plug-in usa apenas o objeto client que corresponde ao nome do pacote (para o tipo de build atual) com base na seguinte lógica:

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

No restante deste documento, usaremos {YOUR_CLIENT} para se referir ao membro da matriz client determinada pelo procedimento acima.

O principal resultado do processamento JSON é produzir dois arquivos XML, que você pode referenciar como recursos do Android no seu código Java. Veja abaixo um exemplo de cada arquivo:

app/build/generate/res/google-services/{build_type}/values/values.xml (link em inglês)

<?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/generate/res/google-services/{flavor}/{build_type}/xml/global_tracker.xml (link em inglês)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="ga_trackingId" translatable="false">UA-65557218-3</string>
</resources>

Cada valor nos arquivos XML está presente no arquivo google-services.json nos locais abaixo. Se o projeto Android tiver alguma configuração que impede o uso do plug-in google-services, é possível recriar os arquivos XML manualmente com 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 o app, recebo a seguinte mensagem de erro: "O arquivo google-services.json está ausente na pasta raiz do módulo. O plug-in dos Serviços do Google não funciona sem ele."

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

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

A: verifique se o nome do pacote no arquivo build.gradle corresponde ao nome do pacote que você inseriu ao criar o arquivo google-services.json. Se você não tiver certeza, execute o fluxo de introdução novamente e gere um novo arquivo json.