Zum Inhalt springen

Beheben von Konflikten mit den Google Play Services

Verschiedene Plugins für unterschiedliche Frameworks können verschiedene Versionen der google-play-services-Bibliothek verwenden, was dazu führen kann, dass Ihr Projekt nicht kompiliert werden kann oder abstürzt, weil die Bibliotheksversion veraltet ist.

Die folgenden Abschnitte bieten Lösungen für verschiedene Plugins.

Speicherort der Bibliothek

Anchor link to

Sie finden die Google Play Services-Bibliothek unter <Android SDK>/extras/google.

Die Bibliothek ist in zwei Formaten verfügbar:

  1. Monolithische jar-Datei (enthält alle Google Play Services-Komponenten in einer einzigen Datei):

    sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar
  2. Modulare aar-Dateien (Android Archive), bei denen sich jede Komponente in einer separaten Datei befindet:

    sdk/extras/google/m2repository/com/google/android/gms/…

Eine aar-Datei kann zu einer jar-Datei reduziert werden (nicht alle Frameworks unterstützen derzeit aar), indem die Datei entpackt wird (aar ist ein Zip-Archiv) und die classes.jar – der Code der Bibliothek – entnommen wird.

1. Cordova

Anchor link to

Alle Konflikte mit den Google Play Services bei Cordova werden automatisch mit Gradle gelöst. Manchmal (z. B. wenn verschiedene Plugins unterschiedliche Hauptversionen der Bibliothek verwenden) kann die Auflösung fehlschlagen, und es können zwei verschiedene Versionen derselben Bibliothek im resultierenden Build erscheinen.

2. Unity, Appcelerator Titanium

Anchor link to

Sie finden die Google Play Services-Bibliothek im Plugin (oder im Beispielprojekt). Sie lassen sich leicht aktualisieren/ändern/entfernen, um mögliche Konflikte zu lösen:

Terminal window
rm -rf Assets/Plugins/Android/google-play-services_lib/libs
rm -rf Assets/Plugins/Android/google-play-services_lib/res
cp ${ANDROID_HOME}/extras/google/m2repository/com/google/android/gms/play-services-analytics/8.4.0/play-services-analytics-8.4.0.aar Assets/Plugins/Android/
cp ${ANDROID_HOME}/extras/google/m2repository/com/google/android/gms/play-services-ads/8.4.0/play-services-ads-8.4.0.aar Assets/Plugins/Android/

3. Adobe Air

Anchor link to

Nehmen Sie die ANE-Erweiterung, extrahieren Sie sie, modifizieren Sie sie und packen Sie sie neu.

Verwenden Sie das folgende Beispiel mit PushNotification.ane:

Terminal window
unzip PushNotification.ane -d tmp

Dieser Befehl extrahiert den Inhalt der .ane-Datei in das tmp-Verzeichnis.

Jetzt finden Sie in tmp/META-INF/ANE/Android-ARM/ und tmp/META-INF/ANE/Android-x86/ alle Bibliotheken: android-support_, play-services_, die möglicherweise modifiziert/aktualisiert/entfernt wurden.

Wenn Sie weiterhin dem Link zum obigen Dokument folgen, ändern Sie tmp/META-INF/ANE/Android-ARM/platform.xml und tmp/META-INF/ANE/Android-x86/platform.xml, packen Sie dann die Erweiterung wieder als Zip-Datei und alles sollte normal funktionieren.

Wenn Sie den Fehler erhalten:

PushNotification.ane is not a valid native extension file.

Packen Sie die Erweiterung mit den folgenden Schritten neu:

  1. Löschen Sie tmp/META-INF/ANE/Android-ARM/platform.xml und tmp/META-INF/ANE/Android-x86/platform.xml
  2. Modifizieren Sie stattdessen gemäß der Anleitung im obigen Link tmp/META-INF/ANE/Android-ARM/android-depends.xml und tmp/META-INF/ANE/Android-x86/android-depends.xml
  3. Führen Sie die folgenden Bash-Befehle aus:
Terminal window
#rename platform.xml on iOS, required to repackage the extension
mv tmp/META-INF/ANE/iPhone-ARM/platform.xml tmp/META-INF/ANE/iPhone-ARM/platform-iOS.xml
#pack the extension back with adt
cd tmp/META-INF/ANE/
“${flex.sdk}/bin/adt" -package -target ane PushNotification.ane extension.xml -swc ../../../../SWC-Pushwoosh/PushNotification.swc -platform iPhone-ARM -platformoptions iPhone-ARM/platform-iOS.xml -C iPhone-ARM/ . -platform Android-ARM -platformoptions Android-ARM/android-depends.xml -C Android-ARM/ . -platform Android-x86 -C Android-x86/ . -platformoptions Android-x86/android-depends.xml -platform default -C default/ .

Sie können PushNotification.swc hier finden: https://github.com/Pushwoosh/pushwoosh-adobe-air/blob/master/SWC-Pushwoosh/PushNotification.swc

4. Unreal Engine

Anchor link to

Unreal Engine und das Pushwoosh-Plugin werden fast immer miteinander in Konflikt geraten. Dies erklärt sich dadurch, dass die Unreal Engine standardmäßig Google Play Services enthält und verschiedene Versionen der Engine unterschiedliche Versionen dieser Bibliotheken verwenden. Das Pushwoosh-Plugin verwendet diese Bibliotheken ebenfalls, jedoch eine andere Untermenge. Seien Sie immer vorsichtig bei der Integration des Pushwoosh-Plugins für die Unreal Engine. Selbst wenn Ihr Projekt zu kompilieren scheint und gut funktioniert, stellen Sie sicher, dass sowohl Pushwoosh als auch die Unreal Engine dieselbe Version der Google Play Services verwenden. Die Verwendung unterschiedlicher Versionen von google-play-services in einem Projekt führt zu undefiniertem Verhalten.

Um einen Konflikt zu beheben, sollten Sie Folgendes tun:

1. Bestimmen Sie, welche Google Play Services-Bibliotheken bereits in einem Projekt verwendet werden. Überprüfen Sie die Verzeichnisse ${UNREAL_PROJECT}/Intermediate/Android/APK/JavaLibs und ${UNREAL_PROJECT}/Intermediate/Android/APK/libs. Zum Beispiel gibt es im Beispielprojekt, das mit der Unreal Engine 4.15 erstellt wurde, die folgenden Bibliotheken:

JavaLibs:

  • downloader_library
  • play-services-ads-lite-9.2.0
  • play-services-auth-base-9.2.0
  • play-services-basement-9.2.0
  • play-services-drive-9.2.0
  • play-services-gass-9.2.0
  • play-services-plus-9.2.0
  • support-v4-23.0.0
  • play-services-ads-9.2.0
  • play-services-auth-9.2.0
  • play-services-base-9.2.0
  • play-services-clearcut-9.2.0
  • play-services-games-9.2.0
  • play-services-nearby-9.2.0
  • play-services-tasks-9.2.0
  • pushwoosh-ue-plugin // Vom Pushwoosh-Plugin hinzugefügt

libs:

  • SystemUtils.jar
  • VrApi.jar
  • play-services-gcm-9.2.0.jar // Vom Pushwoosh-Plugin hinzugefügt
  • play-services-iid-9.2.0.jar // Vom Pushwoosh-Plugin hinzugefügt

2. Wenn die Versionen der in Pushwoosh und der Unreal Engine verwendeten play-services*-Bibliotheken nicht übereinstimmen, entfernen Sie diese Bibliotheken aus dem Pushwoosh-Plugin.

3. Bestimmen Sie, welche fehlenden Bibliotheken Sie zum Pushwoosh-Plugin hinzufügen sollten. Das Plugin benötigt die Bibliotheken android-support-v4, play-services-base, play-services-basement, play-services-gcm, play-services-iid. Für das Beispielprojekt überschneiden sich nur play-services-gcm und play-services-iid nicht, daher sind dies die einzigen Bibliotheken, die in diesem speziellen Fall hinzugefügt werden sollten.

4. Fügen Sie die Bibliothek hinzu, indem Sie die .jar-Datei aus dem Android SDK in https://github.com/Pushwoosh/pushwoosh-unreal-engine/tree/master/Plugins/Pushwoosh/lib/Android/libs platzieren. Der Speicherort der Google Play-Bibliotheken wird am Anfang dieses Artikels beschrieben.

Teilen Sie uns Ihr Feedback mit

Anchor link to

Ihr Feedback hilft uns, eine bessere Erfahrung zu schaffen. Wenn Sie während des SDK-Integrationsprozesses auf Schwierigkeiten stoßen, teilen Sie uns Ihre Gedanken über dieses Formular mit.