Pular para o conteúdo

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 to

Você pode encontrar a biblioteca do Google Play Services em <Android SDK>/extras/google.

A biblioteca está disponível em dois formatos:

  1. 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
  2. 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 to

Todos 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 to

Você 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:

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

Pegue a extensão ANE, extraia-a, modifique-a e reempacote-a.

Use o seguinte exemplo com PushNotification.ane:

Terminal window
unzip PushNotification.ane -d tmp

Este 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:

  1. Exclua tmp/META-INF/ANE/Android-ARM/platform.xml e tmp/META-INF/ANE/Android-x86/platform.xml
  2. Modifique conforme o guia no link acima tmp/META-INF/ANE/Android-ARM/android-depends.xml e tmp/META-INF/ANE/Android-x86/android-depends.xml em vez disso
  3. Execute os seguintes comandos 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/ .

Você pode encontrar PushNotification.swc aqui: https://github.com/Pushwoosh/pushwoosh-adobe-air/blob/master/SWC-Pushwoosh/PushNotification.swc

4. Unreal Engine

Anchor link to

O 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 to

Seu 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.