Resolución de conflictos con los servicios de Google Play
Diferentes plugins para diferentes frameworks pueden usar distintas versiones de la biblioteca google-play-services, lo que puede provocar que su proyecto no se compile o se bloquee porque la versión de la biblioteca está desactualizada.
Las siguientes secciones proporcionan soluciones para diferentes plugins.
Ubicación de la biblioteca
Anchor link toPuede encontrar la biblioteca de los servicios de Google Play en <Android SDK>/extras/google.
La biblioteca está disponible en dos formatos:
-
Archivo jar monolítico (que contiene todos los componentes de los servicios de Google Play en un único archivo):
sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar -
Archivos aar modulares (Android Archive), donde cada componente está en un archivo separado:
sdk/extras/google/m2repository/com/google/android/gms/…
Un archivo aar se puede reducir a un archivo jar (no todos los frameworks admiten aar por el momento) descomprimiendo el archivo (aar es un archivo zip) y tomando classes.jar, que es el código de la biblioteca.
1. Cordova
Anchor link toTodos los conflictos de los servicios de Google Play en Cordova se resuelven automáticamente usando gradle. A veces (por ejemplo, cuando diferentes plugins usan distintas versiones principales de la biblioteca), la resolución puede fallar y pueden aparecer dos versiones diferentes de la misma biblioteca en la compilación resultante.
2. Unity, Appcelerator Titanium
Anchor link toPuede encontrar la biblioteca de los servicios de Google Play en el plugin (o en el proyecto de ejemplo). Son fáciles de actualizar/cambiar/eliminar para resolver posibles conflictos:
- Unity: https://github.com/Pushwoosh/pushwoosh-unity/tree/master/PushwooshUnitySample/Assets/Plugins/Android
- Unity y el plugin de Google Analytics: El plugin de Google Analytics utiliza una biblioteca de Google Play desactualizada que necesita ser actualizada. Más información aquí: 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 (¡tenga en cuenta que la versión del módulo puede cambiar más rápido que este documento!): https://github.com/Pushwoosh/pushwoosh-appcelerator-titanium/tree/master/Module-Source/android/src/com/pushwoosh/module
3. Adobe Air
Anchor link toTome la extensión ANE, extráigala, modifíquela y vuelva a empaquetarla.
Use el siguiente ejemplo con PushNotification.ane:
unzip PushNotification.ane -d tmpEste comando extrae el contenido del archivo .ane al directorio tmp.
Ahora en tmp/META-INF/ANE/Android-ARM/ y tmp/META-INF/ANE/Android-x86/ puede encontrar todas las bibliotecas: android-support_, play-services_, que pueden haber sido modificadas/actualizadas/eliminadas.
Si sigue el enlace al documento anterior, cambie tmp/META-INF/ANE/Android-ARM/platform.xml y tmp/META-INF/ANE/Android-x86/platform.xml, luego vuelva a comprimir la extensión y todo debería funcionar normalmente.
Si obtiene el error:
PushNotification.ane no es un archivo de extensión nativo válido.
Vuelva a empaquetar la extensión siguiendo estos pasos:
- Elimine
tmp/META-INF/ANE/Android-ARM/platform.xmlytmp/META-INF/ANE/Android-x86/platform.xml - En su lugar, modifique
tmp/META-INF/ANE/Android-ARM/android-depends.xmlytmp/META-INF/ANE/Android-x86/android-depends.xmlsegún la guía del enlace anterior - Ejecute los siguientes comandos bash:
#renombrar platform.xml en iOS, necesario para volver a empaquetar la extensiónmv tmp/META-INF/ANE/iPhone-ARM/platform.xml tmp/META-INF/ANE/iPhone-ARM/platform-iOS.xml
#empaquetar la extensión de nuevo con 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/ .Puede encontrar PushNotification.swc aquí: https://github.com/Pushwoosh/pushwoosh-adobe-air/blob/master/SWC-Pushwoosh/PushNotification.swc
4. Unreal Engine
Anchor link toUnreal Engine y el plugin de Pushwoosh casi siempre entrarán en conflicto. Esto se explica porque Unreal Engine contiene los servicios de Google Play por defecto, y diferentes versiones del motor usan diferentes versiones de estas bibliotecas. El plugin de Pushwoosh también usa estas bibliotecas, pero un subconjunto diferente. Tenga siempre cuidado al integrar el plugin de Pushwoosh para Unreal Engine. Incluso si su proyecto parece compilarse y funcionar bien, asegúrese de que tanto Pushwoosh como Unreal Engine usen la misma versión de los servicios de Google Play. Usar diferentes versiones de google-play-services en un proyecto resulta en un comportamiento indefinido.
Para resolver un conflicto, debe hacer lo siguiente:
1. Determine qué bibliotecas de servicios de Google Play ya se están utilizando en un proyecto. Revise los directorios ${UNREAL_PROJECT}/Intermediate/Android/APK/JavaLibs y ${UNREAL_PROJECT}/Intermediate/Android/APK/libs. Por ejemplo, en el proyecto de ejemplo creado con Unreal Engine 4.15 existen las siguientes bibliotecas:
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 // Añadido por el plugin de Pushwoosh
libs:
- SystemUtils.jar
- VrApi.jar
- play-services-gcm-9.2.0.jar // Añadido por el plugin de Pushwoosh
- play-services-iid-9.2.0.jar // Añadido por el plugin de Pushwoosh
2. Si las versiones de las bibliotecas play-services* utilizadas en Pushwoosh y Unreal Engine no coinciden, elimine estas bibliotecas del plugin de Pushwoosh.
3. Determine qué bibliotecas faltantes debe agregar al plugin de Pushwoosh. El plugin requiere las bibliotecas android-support-v4, play-services-base, play-services-basement, play-services-gcm, play-services-iid. Para el proyecto de ejemplo, solo play-services-gcm y play-services-iid no se superponen, por lo que son las únicas bibliotecas que deben agregarse en este caso particular.
4. Agregue la biblioteca colocando el archivo .jar del SDK de Android en https://github.com/Pushwoosh/pushwoosh-unreal-engine/tree/master/Plugins/Pushwoosh/lib/Android/libs. La ubicación de las bibliotecas de Google Play se describe al principio de este artículo.
Comparta sus comentarios con nosotros
Anchor link toSus comentarios nos ayudan a crear una mejor experiencia. Si encuentra alguna dificultad durante el proceso de integración del SDK, comparta sus ideas con nosotros a través de este formulario.