¿Qué hace google-services.json realmente?

Trabajo en agregar servicios Google Analytics y GCM a mi aplicación actual. En la guía para la implementación de ambos servicios, Google le pide al desarrollador que genere un archivo json: google-services.json y lo coloque en el directorio raíz de la aplicación.

Descubrí que incluso si eliminé este archivo json de mi aplicación, los servicios aún funcionan.

Solo quiero saber con seguridad para qué sirve este archivo. ¿Cuál es su uso y cómo funciona?

Investigué un poco sobre el plugin de google-services y json y encontré las fonts para este plugin.

Lo primero es lo primero

¡Los servicios de google de plugin de gradle a los que se hace referencia en classpath y apply son solo un complemento de comstackción! Por lo tanto, solo influye en el proceso de comstackción de su aplicación, ¡pero no en el proceso de tiempo de ejecución!

Este complemento solo sirve como ayuda rápida para integrar rápidamente los servicios de Google en su aplicación. Obviamente, el proceso es complicado y no está documentado, por lo que Google debería haber dejado en claro lo que hace este proceso.

De hecho, encontré el código fuente para la versión del complemento com.google.gms: google-services: 1.4.0-beta3 y no encontré ninguna referencia específica en él con respecto a las aplicaciones ni encontré ninguna API de Google para las invitaciones a la aplicación. (Pero tal vez solo usa un proyecto API genérico con su identificación de proyecto, no intenté esto)

Que hace

Google-services gradle-plugin busca el mencionado archivo google-services.json en su módulo de aplicación. Luego busca configuraciones configuradas como id-de-proyecto y ID de seguimiento y tal, generadas por la consola de desarrollador de la API de Google en el archivo google-services.json. De la configuración que encontró, los valores de recursos de Android se generan en la siguiente ruta:

$project.buildDir/generated/res/google-services/$variant.dirName/values/values.xml 

Por ejemplo, para una depuración-comstackción de su aplicación:

 app/build/generated/res/google-services/debug/values/values.xml 

Por ejemplo, si siguió el tutorial de GCM, el archivo JSON incluiría el ID del proyecto API como el siguiente recurso android:

 project-id 

Por lo tanto, este complemento y el archivo JSON no son esenciales para ejecutar o publicar su aplicación, es solo un ayudante de inicio rápido para generar algunos archivos básicos de recursos de Android para una integración más fácil de características específicas de la API de Google.

Observe en el código fuente al que se hace referencia a continuación que el complemento de google-services siempre genera esos recursos android para cada variante de aplicación que esté definida en su aplicación / build.gradle.

Si no lo desea, debe usar esos recursos generados en las variantes de la aplicación que desee y eliminar las demás. No olvides eliminar el complemento de google-services de la aplicación / build.gradle, o de lo contrario será regenerado para todas las variantes de la aplicación.

Lo que no hace

¡Este complemento y el archivo JSON NO influyen directamente en el funcionamiento interno de dichas funciones de Google para su aplicación! Si ya has seguido tutoriales más antiguos en developer.android.com sobre cómo integrar, por ejemplo, GCM o Google Analytics, ¡entonces ni siquiera necesitas integrar los servicios de google de gradle-plugin o el archivo google-services.json!

Aviso sobre dónde encontré las fonts

Después de que integró el plugin de google-services gradle-plugin y cuando sincroniza su proyecto, Gradle automáticamente descarga la dependencia de servicios de google a una ruta similar a esta (en Windows, es posible que necesite buscar en su hogar / .gradle para Linux):

 C:\Users\user\.gradle\caches\modules-2\files-2.1\com.google.gms\google-services\1.4.0-beta3\f1580f62e3be313eba041ce19b64fd3f44cf8951\google-services-1.4.0-beta3-sources.jar 

Si extrae este archivo jar, encontrará dos archivos:

 GoogleServicesPlugin.groovy GoogleServicesTask.java 

que contienen el código fuente simple del plugin de gradle.

 GoogleServicesPlugin.groovy 

contiene el manejo de las variantes de la aplicación y las definiciones básicas de rutas, etc.

 GoogleServicesTask.java 

contiene la definición de la tarea real, busque el siguiente método para ver lo que realmente hace:

 @TaskAction public void action() throws IOException { 

Para qué es realmente este archivo:

google-services.json contiene las credenciales del desarrollador y la configuración de configuración, que es necesario verificar al conectarse con GoogleApiClient. Aunque su servicio está funcionando bien con su dispositivo de prueba, ya que está detectando su cuenta de desarrollador, pero después de liberar su aplicación en público, no funcionará sin el archivo json. Entonces no lo borres

La documentación oficial dice:

La aplicación crea un GoogleApiClient, que especifica a qué ámbitos y API accederá la aplicación. Cuando GoogleApiClient se conecta, el usuario inicia sesión.

Vea la sección de cómo funciona .

Agrega google-services.json a tu módulo y haz un CLEAN y A REBUILD. Se generará un archivo xml en app / build / generated / res / google-services / debug / values ​​/ values.xml con las propiedades de su proyecto y podrá acceder fácilmente, como la cadena xml normal. Ejemplo:

 String serverClientId = getString(R.string.default_web_client_id); 

hay una lista con todas las cadenas y la información de momre en google-service.json doc