Ich habe ein Android-Projekt, das mit React-Native erstellt wurde und Google Play-Dienste (Analyse, Cloud-Messaging, Anzeigen) verwendet. Ich benutze Firebase nirgendwo explizit.
Versucht, die Play Services von 8.4.0 zu aktualisieren => 9.2.0. Auch der GPS-Klassenpfad wurde aktualisiert.
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'
Beachten Sie, dass ich nirgendwo explizit von Firebase abhängig bin.
Seit dem Upgrade bekomme ich den folgenden Gradle-Buildfehler:
com.Android.build.api.transform.TransformException: Java.util.Zip.ZipException: doppelter Eintrag: com/google/firebase/FirebaseApiNotAvailableException.class
Ich weiß, dass Firebase in den Google Play Services gebündelt ist ( seit 9.0 ), also dachte ich, dass etwas anderes kompiliert und mit einer älteren Version verlinkt wird ... Da habe ich die Abhängigkeit von Insights (gradle -q dependencyInsight --configuration compile --dependency firebase
) gesehen dass Firebase-Common 9.0.0 zusätzlich zu 9.2.1 hinzugefügt wird:
Aber ich kann nicht für mein Leben herausfinden, was dies verursacht.
Nun, der Täter ist React-Native.
Der Hinweis war diese dunkle Linie, die auf der Gradle-Konsole angezeigt wird:
das google-services-Plugin konnte keine Version für .__ erkennen. com.google.Android.gms oder com.google.firebase, Standardversion: 9.0.0 wird verwendet.
Die Reparatur? Erzwingen Sie die Verknüpfung des RN-Bibliotheksprojekts mit der korrekten Firebase-Version, indem Sie die folgende Zeile zu build.gradle hinzufügen:
compile 'com.google.firebase:firebase-core:9.2.1'
Und somit:
Als Randbemerkung hat dieses Problem mich dazu veranlasst, tiefer in das gradle Abhängigkeitsmanagement zu blicken. Ich habe einen ausführlicher Beitrag zur Lösung allgemeiner Abhängigkeiten geschrieben.
Das Problem ist, dass Sie beide Plugins in der build.gradle -Datei verwenden
apply plugin: 'com.google.gms.google-services'
und
compile 'com.google.Android.gms:play-services:11.0.2'
Entfernen Sie also beide Bibliotheken und fügen Sie sie hinzu
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: doppelter Eintrag: com/google/firebase/iid/zzb.class
folgen Sie dieser Arbeit. Entfernen Sie Ihre aktuelle Google Play-Dienstabhängigkeit, und wählen Sie im Android Studio die Option zum Auswählen des Moduls aus. Klicken Sie dann auf das Symbol + und wählen Sie die Option lib
In meinem Fall habe ich dies in app/build.gradle verwendet:
compile 'com.google.Android.gms:play-services-location:9.8.0'
compile 'com.google.Android.gms:play-services-maps:9.8.0'
Der Fehler beim Versuch, eine signierte APK zu generieren, war:
Error:Execution failed for task ':app:transformClassesWithJarMergingForRelease'.
> com.Android.build.api.transform.TransformException: Java.util.Zip.ZipException: duplicate entry: com/google/firebase/FirebaseApiNotAvailableException.class
Ich habe app/build.gradle geändert, indem ich die beiden oben genannten Zeilen entfernt habe und stattdessen diese verwendet habe:
compile 'com.google.Android.gms:play-services:9.8.0'
Natürlich ist "play-services" das komplette Paket und keine optimierte Möglichkeit, dies zu tun. Es ist am besten, die spezifischen Dienste anzugeben, die erforderlich sind (read Enthält "play-services: 9.8.0" "play-services-location: 9.8.0"? ), behebt den Fehler jedoch vorerst in meinem Fall.