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.
- SetVisibleActivities undefined
- Cómo manejar DeadObjectException?
- Error: (50, 28) Ningún recurso encontrado que coincida con el nombre dado (en 'valor' con el valor '@ string / google_maps_key')
- Problema con Robolectric con la nueva versión de los servicios de Google Play
- Cómo crear GoogleCredential mediante la cuenta de servicio JSON
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:
Pero no puedo por la vida de mí averiguar qué causa esto.
- Más un botón que no funciona en Android
- Cómo evitar TagManager "IllegalStateException: Resultados ya se han establecido"
- Token de acceso recuperado: null. Com.google.android.gms.auth.GoogleAuthException: Desconocido
- Integración de Android Studio AdMob con los servicios de Google Play
- Android: la aplicación se bloquea en dispositivos Pre-Lollipop
- Emulador de Android: esta aplicación no se ejecutará sin los servicios de Google Play
- Clase de actividad principal no encontrada si implementa GooglePlayServicesClient.ConnectionCallbacks / OnConnectionFailedListener
- No se puede obtener el proveedor com.google.android.gms.measurement.AppMeasurementContentProvider
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:
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 }
- Android Alarm ¿Cuál es la diferencia entre los cuatro tipos de alarma que proporciona AlarmManager y cuándo usar qué?
- ¿Cómo configurar la fuente personalizada en un archivo .xml en vez de un archivo .java?