J'ai un projet Android construit avec React-Native et utilisant les services Google Play (analyse, messagerie dans le cloud, publicité). Je n'utilise pas explicitement Firebase nulle part.
J'ai essayé de mettre à niveau les services de jeu à partir de la version 8.4.0 => 9.2.0. Également mis à jour le classpath 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'
Notez que je ne dépend pas explicitement de Firebase, où que ce soit.
Depuis la mise à niveau, l'erreur de construction Gradle suivante est générée:
com.Android.build.api.transform.TransformException: Java.util.Zip.ZipException: entrée en double: com/google/firebase/FirebaseApiNotAvailableException.class
Je sais que Firebase est fourni avec les services Google Play ( depuis la version 9.0 ). J'ai donc pensé que quelque chose d'autre compilait et reliait une ancienne version Alors, en regardant le rapport sur la dépendance (gradle -q dependencyInsight --configuration compile --dependency firebase
), j'ai remarqué firebase-common 9.0.0 est ajouté à la version 9.2.1:
Mais je ne peux pas pour la vie découvrir ce qui cause ceci.
Eh bien, le coupable est React-Native.
L'indice était cette ligne obscure qui apparaît sur la console Gradle:
le plugin google-services n'a détecté aucune version de com.google.Android.gms ou com.google.firebase, version par défaut: 9.0.0 sera utilisé.
Le correctif? Forcez le projet de bibliothèque RN à se lier à la version correcte de Firebase en ajoutant la ligne suivante à son build.gradle:
compile 'com.google.firebase:firebase-core:9.2.1'
Et ainsi:
En guise de remarque, cette question m'a amené à approfondir la gestion de la dépendance des gradés. J'ai écrit un article complet sur la résolution des problèmes de dépendance courants }.
Le problème est que vous utilisez les deux plugins dans le fichier build.gradle.
apply plugin: 'com.google.gms.google-services'
et
compile 'com.google.Android.gms:play-services:11.0.2'
Alors, supprimez les deux bibliothèques et ajoutez
packagingOptions {
exclude 'META-INF/NOTICE' // It is not include NOTICE file
exclude 'META-INF/LICENSE' // It is not include LICENSE file
}
Java.util.Zip.ZipException: entrée en double: com/google/firebase/iid/zzb.class
suivez son travail. Supprimez votre dépendance actuelle au service de jeu Google et allez dans Fichier dans le paramètre de module de sélection d'Android Studio et cliquez sur l'icône de dépendance puis cliquez sur l'icône et sélectionnez la dépendance de lib après cette recherche dans votre service de jeu en studio et ajoutez-la.
Dans mon cas, j'utilisais ceci dans 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'
L'erreur lorsque je tentais de générer un APK signé était la suivante:
Error:Execution failed for task ':app:transformClassesWithJarMergingForRelease'.
> com.Android.build.api.transform.TransformException: Java.util.Zip.ZipException: duplicate entry: com/google/firebase/FirebaseApiNotAvailableException.class
J'ai modifié app/build.gradle en supprimant les deux lignes que j'ai mentionnées ci-dessus et en utilisant ceci:
compile 'com.google.Android.gms:play-services:9.8.0'
Bien entendu, les "services de jeu" constituent l’ensemble complet et non une manière optimisée de le faire. Il serait préférable de spécifier les services spécifiques requis (lire Les "services de jeu: 9.8.0" incluent-ils "emplacement de services de jeu: 9.8.0"? ), mais pour l'instant, cela corrige l'erreur dans mon cas.