Passer au contenu

Résolution des conflits avec les services Google Play

Différents plugins pour différents frameworks peuvent utiliser différentes versions de la bibliothèque google-play-services, ce qui peut entraîner l’échec de la compilation de votre projet ou son plantage car la version de la bibliothèque est obsolète.

Les sections suivantes fournissent des solutions pour différents plugins.

Emplacement de la bibliothèque

Anchor link to

Vous pouvez trouver la bibliothèque des services Google Play à l’emplacement <Android SDK>/extras/google.

La bibliothèque est disponible en deux formats :

  1. Fichier jar monolithique (contenant tous les composants des services Google Play dans un seul fichier) :

    sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar
  2. Fichiers aar modulaires (Android Archive), où chaque composant se trouve dans un fichier séparé :

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

Un fichier aar peut être réduit à un fichier jar (tous les frameworks ne prennent pas en charge les aar pour le moment) en décompressant le fichier (un aar est une archive zip) et en prenant classes.jar - le code de la bibliothèque.

1. Cordova

Anchor link to

Tous les conflits des services Google Play sur Cordova sont résolus automatiquement à l’aide de gradle. Parfois (par exemple, si différents plugins utilisent des versions majeures différentes de la bibliothèque), la résolution peut échouer et deux versions différentes de la même bibliothèque peuvent apparaître dans la compilation finale.

2. Unity, Appcelerator Titanium

Anchor link to

Vous pouvez trouver la bibliothèque des services Google Play dans le plugin (ou le projet d’exemple). Ils sont faciles à mettre à jour/modifier/supprimer pour résoudre les conflits potentiels :

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

Prenez l’extension ANE, extrayez-la, modifiez-la et reconditionnez-la.

Utilisez l’exemple suivant avec PushNotification.ane :

Terminal window
unzip PushNotification.ane -d tmp

Cette commande extrait le contenu du fichier .ane dans le répertoire tmp.

Maintenant, dans tmp/META-INF/ANE/Android-ARM/ et tmp/META-INF/ANE/Android-x86/, vous pouvez trouver toutes les bibliothèques : android-support_, play-services_, qui peuvent avoir été modifiées/mises à jour/supprimées.

Si vous suivez toujours le lien vers le document ci-dessus, modifiez tmp/META-INF/ANE/Android-ARM/platform.xml et tmp/META-INF/ANE/Android-x86/platform.xml, puis rezippez l’extension et tout devrait fonctionner normalement.

Si vous obtenez l’erreur :

PushNotification.ane n’est pas un fichier d’extension natif valide.

Reconditionnez l’extension en suivant les étapes suivantes :

  1. Supprimez tmp/META-INF/ANE/Android-ARM/platform.xml et tmp/META-INF/ANE/Android-x86/platform.xml
  2. Modifiez plutôt tmp/META-INF/ANE/Android-ARM/android-depends.xml et tmp/META-INF/ANE/Android-x86/android-depends.xml conformément au guide dans le lien ci-dessus
  3. Exécutez les commandes bash suivantes :
Terminal window
#renommer platform.xml sur iOS, requis pour reconditionner l'extension
mv tmp/META-INF/ANE/iPhone-ARM/platform.xml tmp/META-INF/ANE/iPhone-ARM/platform-iOS.xml
#reconditionner l'extension avec 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/ .

Vous pouvez trouver PushNotification.swc ici : https://github.com/Pushwoosh/pushwoosh-adobe-air/blob/master/SWC-Pushwoosh/PushNotification.swc

4. Unreal Engine

Anchor link to

Unreal Engine et le plugin Pushwoosh entreront presque toujours en conflit l’un avec l’autre. Cela s’explique par le fait qu’Unreal Engine contient les services Google Play par défaut, et que différentes versions du moteur utilisent différentes versions de ces bibliothèques. Le plugin Pushwoosh utilise également ces bibliothèques, mais un sous-ensemble différent. Soyez toujours prudent lors de l’intégration du plugin Pushwoosh pour Unreal Engine. Même si votre projet semble compiler et fonctionner correctement, assurez-vous que Pushwoosh et Unreal Engine utilisent la même version des services Google Play. L’utilisation de différentes versions de google-play-services dans un même projet entraîne un comportement indéfini.

Pour résoudre un conflit, vous devez procéder comme suit :

1. Déterminez quelles bibliothèques des services Google Play sont déjà utilisées dans un projet. Vérifiez les répertoires ${UNREAL_PROJECT}/Intermediate/Android/APK/JavaLibs et ${UNREAL_PROJECT}/Intermediate/Android/APK/libs. Par exemple, dans le projet d’exemple créé avec Unreal Engine 4.15, il y a les bibliothèques suivantes :

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 // Ajouté par le plugin Pushwoosh

libs :

  • SystemUtils.jar
  • VrApi.jar
  • play-services-gcm-9.2.0.jar // Ajouté par le plugin Pushwoosh
  • play-services-iid-9.2.0.jar // Ajouté par le plugin Pushwoosh

2. Si les versions des bibliothèques play-services* utilisées dans Pushwoosh et Unreal Engine ne correspondent pas, supprimez ces bibliothèques du plugin Pushwoosh.

3. Déterminez quelles bibliothèques manquantes vous devez ajouter au plugin Pushwoosh. Le plugin nécessite les bibliothèques android-support-v4, play-services-base, play-services-basement, play-services-gcm, play-services-iid. Pour le projet d’exemple, seules play-services-gcm et play-services-iid ne se chevauchent pas, ce sont donc les seules bibliothèques qui devraient être ajoutées dans ce cas particulier.

4. Ajoutez la bibliothèque en plaçant le fichier .jar du SDK Android dans https://github.com/Pushwoosh/pushwoosh-unreal-engine/tree/master/Plugins/Pushwoosh/lib/Android/libs. L’emplacement des bibliothèques Google Play est décrit au début de cet article.

Partagez vos commentaires avec nous

Anchor link to

Vos commentaires nous aident à créer une meilleure expérience. Si vous rencontrez des difficultés lors du processus d’intégration du SDK, partagez vos réflexions avec nous via ce formulaire.