Entrada duplicada: com / google / firebase / FirebaseApiNotAvailableException.class

Tengo un proyecto de Android construido con React-Native y que emplea Google Play Services (análisis, mensajería en la nube, anuncios). No utilizo explícitamente Firebase en ninguna parte.

Intentó actualizar los servicios de Play desde 8.4.0 => 9.2.0. También actualizó el classpath del GPS.

buildscript { dependencies { classpath 'com.google.gms:google-services:3.0.0' 

 dependencies { compile 'com.google.android.gms:play-services-analytics:9.2.1' compile 'com.google.android.gms:play-services-ads:9.2.1' compile 'com.google.android.gms:play-services-base:9.2.1' compile 'com.google.android.gms:play-services-gcm:9.2.1' 

Tenga en cuenta que no estoy explícitamente dependiendo de Firebase en cualquier lugar.

Desde la actualización estoy recibiendo el siguiente error de generación de Gradle:

Com.android.build.api.transform.TransformException: java.util.zip.ZipException: entrada duplicada: com / google / firebase / FirebaseApiNotAvailableException.class

Sé que Firebase viene incluido en los Servicios de Google Play ( desde 9.0 ), así que pensé que otra cosa es compilar y vincular con una versión anterior. Así que mirando la perspectiva de dependencia ( gradle -q dependencyInsight --configuration compile --dependency firebase ) He notado que firebase-common 9.0.0 se está añadiendo en la parte superior de 9.2.1:

Introduzca aquí la descripción de la imagen

Pero no puedo por la vida de mí averiguar qué causa esto.

Bueno, el culpable es React-Native.

La indirecta era esta línea oscura que aparece en la consola de Gradle:

Google-services plugin no pudo detectar ninguna versión para com.google.android.gms o com.google.firebase, se usará la versión predeterminada: 9.0.0.

¿La solución? Forzar el proyecto de biblioteca RN para vincular con la versión correcta de Firebase, agregando la línea siguiente a su build.gradle:

 compile 'com.google.firebase:firebase-core:9.2.1' 

Y por lo tanto:

Introduzca aquí la descripción de la imagen

Como una nota secundaria, este tema me ha llevado a profundizar en la gestión de la dependencia gradle. He escrito un extenso artículo sobre la resolución de problemas comunes de dependencia .

En mi caso, estaba usando esto en app / build.gradle:

 compile 'com.google.android.gms:play-services-location:9.8.0' compile 'com.google.android.gms:play-services-maps:9.8.0' 

El error cuando intentaba generar un APK firmado era:

 Error:Execution failed for task ':app:transformClassesWithJarMergingForRelease'. > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/firebase/FirebaseApiNotAvailableException.class 

Modifiqué app / build.gradle quitando las dos líneas que he mencionado anteriormente y usando esto en su lugar:

 compile 'com.google.android.gms:play-services:9.8.0' 

Por supuesto "play-servicios" es el paquete completo y no una manera optimizada de hacer esto. Sería mejor especificar los servicios específicos que se requieren (leer ¿"play-services: 9.8.0" incluye "play-services-location: 9.8.0"? ), Pero por ahora corrige el error en mi caso.

El problema es que utiliza los complementos en el archivo build.gradle para eliminar el plugin de servicios de Google Play, como

 apply plugin: 'com.google.gms.google-services' 

y

 compile 'com.google.android.gms:play-services:11.0.2' 

Por lo tanto, elimine ambas de una biblioteca y luego agregue

 packagingOptions { exclude 'META-INF/NOTICE' // It is not include NOTICE file exclude 'META-INF/LICENSE' // It is not include LICENSE file } 
  • Iniciar sesión en Google Drive en Android sin agregar la cuenta de Google al dispositivo
  • Reconocimiento de actividad deja de recibir actualizaciones cuando el teléfono pasa al modo de espera (estado de apagado de la pantalla)
  • Libgdx - IllegalStateException en una ubicación desconocida
  • La aplicación para Android se está bloqueando debido a V / GoogleSignatureVerifier: Firma no válida
  • Error de Google Play Services - Informe de errores Incomprensible
  • Single Sign-On de Google Plus Cross-Platform: onConnected nunca se llama en una instalación nueva
  • Android Fused Location API - cómo utilizar PRIORITY_BALANCED_POWER_ACCURACY y PRIORITY_HIGH_ACCURACY en una aplicación?
  • ¿Por qué play-services-location necesita los permisos android.permission.WRITE_EXTERNAL_STORAGE y android.permission.READ_EXTERNAL_STORAGE?
  • API de geocodificación de Android BroadcastReceiver no activado
  • Google-services.json para diferentes productFlavors
  • Google Play Services hace gradle para ignorar la configuración de proguard
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.