Resolvendo conflitos do Google Play Services
Diferentes plugins para diferentes frameworks podem usar diferentes versões da biblioteca google-play-services, fazendo com que seu projeto falhe ao compilar ou trave porque a versão da biblioteca está desatualizada.
As seções a seguir fornecem soluções para diferentes plugins.
Localização da biblioteca
Anchor link toVocê pode encontrar a biblioteca do Google Play Services em <Android SDK>/extras/google.
A biblioteca está disponível em dois formatos:
-
Arquivo jar monolítico (contendo todos os componentes do Google Play Services em um único arquivo):
sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar -
Arquivos aar modulares (Android Archive), onde cada componente está em um arquivo separado:
sdk/extras/google/m2repository/com/google/android/gms/…
Um arquivo aar pode ser reduzido a um arquivo jar (nem todos os frameworks suportam aar no momento) descompactando o arquivo (aar é um arquivo zip) e pegando o classes.jar - o código da biblioteca.
1. Cordova
Anchor link toTodos os conflitos do google play services no Cordova são resolvidos automaticamente usando o gradle. Às vezes (por exemplo, quando diferentes plugins usam diferentes versões principais da biblioteca), a resolução pode falhar e podem aparecer duas versões diferentes da mesma biblioteca na compilação resultante.
2. Unity, Appcelerator Titanium
Anchor link toVocê pode encontrar a biblioteca do Google Play Services no plugin (ou projeto de exemplo). Eles são fáceis de atualizar/alterar/remover para resolver possíveis conflitos:
- Unity: https://github.com/Pushwoosh/pushwoosh-unity/tree/master/PushwooshUnitySample/Assets/Plugins/Android
- Unity e plugin do Google Analytics: O plugin do Google Analytics usa uma biblioteca do google play desatualizada, que precisa ser atualizada. Mais informações aqui: 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 (observe que a versão do módulo pode mudar mais rápido do que este documento!): https://github.com/Pushwoosh/pushwoosh-appcelerator-titanium/tree/master/Module-Source/android/src/com/pushwoosh/module
3. Adobe Air
Anchor link toPegue a extensão ANE, extraia-a, modifique-a e reempacote-a.
Use o seguinte exemplo com PushNotification.ane:
unzip PushNotification.ane -d tmpEste comando extrai o conteúdo do arquivo .ane para o diretório tmp.
Agora em tmp/META-INF/ANE/Android-ARM/ e tmp/META-INF/ANE/Android-x86/ você pode encontrar todas as bibliotecas: android-support_, play-services_, que podem ter sido modificadas/atualizadas/removidas.
Se você ainda seguir o link para o documento acima, altere tmp/META-INF/ANE/Android-ARM/platform.xml e tmp/META-INF/ANE/Android-x86/platform.xml, então compacte a extensão novamente e tudo deverá funcionar normalmente.
Se você receber o erro:
PushNotification.ane is not a valid native extension file.
Reempacote a extensão usando os seguintes passos:
- Exclua
tmp/META-INF/ANE/Android-ARM/platform.xmletmp/META-INF/ANE/Android-x86/platform.xml - Modifique conforme o guia no link acima
tmp/META-INF/ANE/Android-ARM/android-depends.xmletmp/META-INF/ANE/Android-x86/android-depends.xmlem vez disso - Execute os seguintes comandos 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/ .Você pode encontrar PushNotification.swc aqui: https://github.com/Pushwoosh/pushwoosh-adobe-air/blob/master/SWC-Pushwoosh/PushNotification.swc
4. Unreal Engine
Anchor link toO Unreal Engine e o Plugin Pushwoosh quase sempre entrarão em conflito um com o outro. Isso se explica pelo fato de o Unreal Engine conter os serviços do Google Play por padrão, e diferentes versões do Engine usarem diferentes versões dessas bibliotecas. O plugin Pushwoosh também usa essas bibliotecas, no entanto, um subconjunto diferente. Sempre tenha cuidado ao integrar o Plugin Pushwoosh para Unreal Engine. Mesmo que seu projeto pareça compilar e funcionar bem, certifique-se de que tanto o Pushwoosh quanto o Unreal Engine usem a mesma versão do Google Play Services. Usar diferentes versões do google-play-services em um projeto resulta em comportamento indefinido.
Para resolver um conflito, você deve fazer o seguinte:
1. Determine quais bibliotecas do Google Play services já são usadas em um projeto. Verifique os diretórios ${UNREAL_PROJECT}/Intermediate/Android/APK/JavaLibs e ${UNREAL_PROJECT}/Intermediate/Android/APK/libs. Por exemplo, no projeto de exemplo criado usando o Unreal Engine 4.15, existem as seguintes 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 // Adicionado pelo plugin Pushwoosh
libs:
- SystemUtils.jar
- VrApi.jar
- play-services-gcm-9.2.0.jar // Adicionado pelo plugin Pushwoosh
- play-services-iid-9.2.0.jar // Adicionado pelo plugin Pushwoosh
2. Se as versões das bibliotecas play-services* usadas no Pushwoosh e no Unreal Engine não corresponderem, remova essas bibliotecas do plugin Pushwoosh.
3. Determine quais bibliotecas ausentes você deve adicionar ao Plugin Pushwoosh. O plugin requer as bibliotecas android-support-v4, play-services-base, play-services-basement, play-services-gcm, play-services-iid. Para o projeto de exemplo, apenas play-services-gcm e play-services-iid não se sobrepõem, então elas são as únicas bibliotecas que devem ser adicionadas neste caso específico.
4. Adicione a biblioteca colocando o arquivo .jar do SDK do Android em https://github.com/Pushwoosh/pushwoosh-unreal-engine/tree/master/Plugins/Pushwoosh/lib/Android/libs. A localização das bibliotecas do Google Play é descrita no início deste artigo.
Compartilhe seu feedback conosco
Anchor link toSeu feedback nos ajuda a criar uma experiência melhor. Se você enfrentar alguma dificuldade durante o processo de integração do SDK, compartilhe suas ideias conosco através deste formulário.