Разрешение конфликтов Google Play Services
Различные плагины для разных фреймворков могут использовать разные версии библиотеки google-play-services, что приводит к сбою компиляции или аварийному завершению работы вашего проекта из-за устаревшей версии библиотеки.
В следующих разделах представлены решения для различных плагинов.
Расположение библиотеки
Anchor link toБиблиотеку Google Play Services можно найти по пути <Android SDK>/extras/google.
Библиотека доступна в двух форматах:
-
Монолитный jar-файл (содержащий все компоненты Google Play Services в одном файле):
sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar -
Модульные 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 можно найти в плагине (или в примере проекта). Их легко обновить/изменить/удалить для решения возможных конфликтов:
- Unity: https://github.com/Pushwoosh/pushwoosh-unity/tree/master/PushwooshUnitySample/Assets/Plugins/Android
- Unity и плагин Google Analytics: плагин Google Analytics использует устаревшую библиотеку Google Play, которую необходимо обновить. Подробнее здесь: 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 (обратите внимание, что версия модуля может меняться быстрее, чем этот документ!): https://github.com/Pushwoosh/pushwoosh-appcelerator-titanium/tree/master/Module-Source/android/src/com/pushwoosh/module
3. Adobe Air
Anchor link toВозьмите расширение ANE, извлеките его, измените и перепакуйте.
Используйте следующий пример с PushNotification.ane:
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.
Перепакуйте расширение, выполнив следующие шаги:
- Удалите
tmp/META-INF/ANE/Android-ARM/platform.xmlиtmp/META-INF/ANE/Android-x86/platform.xml - Вместо этого измените
tmp/META-INF/ANE/Android-ARM/android-depends.xmlиtmp/META-INF/ANE/Android-x86/android-depends.xmlв соответствии с руководством по ссылке выше - Выполните следующие bash-команды:
#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/ .Вы можете найти PushNotification.swc здесь: https://github.com/Pushwoosh/pushwoosh-adobe-air/blob/master/SWC-Pushwoosh/PushNotification.swc
4. Unreal Engine
Anchor link toUnreal 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, поделитесь своими мыслями с нами через эту форму.