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 toSie finden die Google Play Services-Bibliothek unter <Android SDK>/extras/google.
Die Bibliothek ist in zwei Formaten verfügbar:
-
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 -
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 toAlle 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 toSie 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:
- Unity: https://github.com/Pushwoosh/pushwoosh-unity/tree/master/PushwooshUnitySample/Assets/Plugins/Android
- Unity und Google Analytics-Plugin: Das Google Analytics-Plugin verwendet eine veraltete Google Play-Bibliothek, die aktualisiert werden muss. Weitere Informationen finden Sie hier: https://github.com/Pushwoosh/pushwoosh-unity/issues/5
rm -rf Assets/Plugins/Android/google-play-services_lib/libsrm -rf Assets/Plugins/Android/google-play-services_lib/rescp ${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/- Appcelerator Titanium (beachten Sie, dass sich die Version des Moduls schneller ändern kann als dieses Dokument!): https://github.com/Pushwoosh/pushwoosh-appcelerator-titanium/tree/master/Module-Source/android/src/com/pushwoosh/module
3. Adobe Air
Anchor link toNehmen Sie die ANE-Erweiterung, extrahieren Sie sie, modifizieren Sie sie und packen Sie sie neu.
Verwenden Sie das folgende Beispiel mit PushNotification.ane:
unzip PushNotification.ane -d tmpDieser 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:
- Löschen Sie
tmp/META-INF/ANE/Android-ARM/platform.xmlundtmp/META-INF/ANE/Android-x86/platform.xml - Modifizieren Sie stattdessen gemäß der Anleitung im obigen Link
tmp/META-INF/ANE/Android-ARM/android-depends.xmlundtmp/META-INF/ANE/Android-x86/android-depends.xml - Führen Sie die folgenden Bash-Befehle aus:
#rename platform.xml on iOS, required to repackage the extensionmv tmp/META-INF/ANE/iPhone-ARM/platform.xml tmp/META-INF/ANE/iPhone-ARM/platform-iOS.xml
#pack the extension back with adtcd 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 toUnreal 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 toIhr 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.