Перейти к содержанию

Разрешение конфликтов Google Play Services

Различные плагины для разных фреймворков могут использовать разные версии библиотеки google-play-services, что приводит к сбою компиляции или аварийному завершению работы вашего проекта из-за устаревшей версии библиотеки.

В следующих разделах представлены решения для различных плагинов.

Расположение библиотеки

Anchor link to

Библиотеку Google Play Services можно найти по пути <Android SDK>/extras/google.

Библиотека доступна в двух форматах:

  1. Монолитный jar-файл (содержащий все компоненты Google Play Services в одном файле):

    sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar
  2. Модульные aar-файлы (Android Archive), где каждый компонент находится в отдельном файле:

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

aar-файл можно преобразовать в jar-файл (в настоящее время не все фреймворки поддерживают aar), разархивировав файл (aar — это zip-архив) и взяв classes.jar — код библиотеки.

1. Cordova

Anchor link to

Все конфликты google play services в Cordova разрешаются автоматически с помощью gradle. Иногда (например, когда разные плагины используют разные мажорные версии библиотеки) разрешение может не сработать, и в итоговой сборке могут появиться две разные версии одной и той же библиотеки.

2. Unity, Appcelerator Titanium

Anchor link to

Библиотеку Google Play Services можно найти в плагине (или в примере проекта). Их легко обновить/изменить/удалить для решения возможных конфликтов:

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

Возьмите расширение ANE, извлеките его, измените и перепакуйте.

Используйте следующий пример с PushNotification.ane:

Terminal window
unzip PushNotification.ane -d tmp

Эта команда извлекает содержимое .ane-файла в каталог tmp.

Теперь в tmp/META-INF/ANE/Android-ARM/ и tmp/META-INF/ANE/Android-x86/ вы можете найти все библиотеки: android-support_, play-services_, которые можно было изменить/обновить/удалить.

Если вы все еще следуете ссылке на документ выше, измените tmp/META-INF/ANE/Android-ARM/platform.xml и tmp/META-INF/ANE/Android-x86/platform.xml, затем снова заархивируйте расширение, и все должно работать нормально.

Если вы получаете ошибку:

PushNotification.ane is not a valid native extension file.

Перепакуйте расширение, выполнив следующие шаги:

  1. Удалите tmp/META-INF/ANE/Android-ARM/platform.xml и tmp/META-INF/ANE/Android-x86/platform.xml
  2. Вместо этого измените tmp/META-INF/ANE/Android-ARM/android-depends.xml и tmp/META-INF/ANE/Android-x86/android-depends.xml в соответствии с руководством по ссылке выше
  3. Выполните следующие bash-команды:
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/ .

Вы можете найти PushNotification.swc здесь: https://github.com/Pushwoosh/pushwoosh-adobe-air/blob/master/SWC-Pushwoosh/PushNotification.swc

4. Unreal Engine

Anchor link to

Unreal Engine и плагин Pushwoosh почти всегда будут конфликтовать друг с другом. Это объясняется тем, что Unreal Engine по умолчанию содержит сервисы Google Play, и разные версии движка используют разные версии этих библиотек. Плагин Pushwoosh также использует эти библиотеки, но другой их набор. Всегда будьте осторожны при интеграции плагина Pushwoosh для Unreal Engine. Даже если ваш проект, кажется, компилируется и работает хорошо, убедитесь, что и Pushwoosh, и Unreal Engine используют одну и ту же версию Google Play Services. Использование разных версий google-play-services в одном проекте приводит к неопределенному поведению.

Чтобы разрешить конфликт, вам следует сделать следующее:

1. Определите, какие библиотеки Google Play services уже используются в проекте. Проверьте каталоги ${UNREAL_PROJECT}/Intermediate/Android/APK/JavaLibs и ${UNREAL_PROJECT}/Intermediate/Android/APK/libs. Например, в примере проекта, созданном с использованием Unreal Engine 4.15, есть следующие библиотеки:

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 // Added by Pushwoosh plugin

libs:

  • SystemUtils.jar
  • VrApi.jar
  • play-services-gcm-9.2.0.jar // Added by Pushwoosh plugin
  • play-services-iid-9.2.0.jar // Added by Pushwoosh plugin

2. Если версии библиотек play-services*, используемых в Pushwoosh и Unreal Engine, не совпадают, удалите эти библиотеки из плагина Pushwoosh.

3. Определите, какие недостающие библиотеки следует добавить в плагин Pushwoosh. Плагину требуются библиотеки android-support-v4, play-services-base, play-services-basement, play-services-gcm, play-services-iid. Для примера проекта не пересекаются только play-services-gcm и play-services-iid, поэтому в данном конкретном случае следует добавить только их.

4. Добавьте библиотеку, поместив .jar-файл из Android SDK в https://github.com/Pushwoosh/pushwoosh-unreal-engine/tree/master/Plugins/Pushwoosh/lib/Android/libs. Расположение библиотек Google Play описано в начале этой статьи.

Поделитесь с нами своим мнением

Anchor link to

Ваши отзывы помогают нам делать наш продукт лучше. Если вы столкнулись с какими-либо трудностями в процессе интеграции SDK, поделитесь своими мыслями с нами через эту форму.