Meu aplicativo que usa o SDK do Google Maps (v2) começou a falhar com esta exceção:
Process: com.currentlocation.android, PID: 7328
java.lang.ArrayIndexOutOfBoundsException: length=1; index=12
at com.google.maps.api.android.lib6.gmm6.vector.ct.<init>(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (120400-0):9)
at com.google.maps.api.android.lib6.gmm6.vector.cv.a(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (120400-0):23)
at com.google.maps.api.android.lib6.gmm6.util.m.run(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (120400-0):14)
at java.lang.Thread.run(Thread.java:919)
No v3 beta SDK, o rastreamento de pilha é:
2020-04-23 15:59:06.064 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example, PID: 22717
java.lang.ArrayIndexOutOfBoundsException: length=1; index=12
at com.google.android.libraries.maps.bv.zzbs.<init>(ZoomTable.java:24)
at com.google.android.libraries.maps.bv.zzbv.zza(ZoomTableQuadTree.java:57)
at com.google.android.libraries.maps.br.zzd.zza(Unknown Source:4)
at com.google.android.libraries.maps.hi.zzas.zza(Suppliers.java:7)
at com.google.android.libraries.maps.br.zza.zzh(SharedMapComponentImpl.java:58)
at com.google.android.libraries.maps.gu.zzat.zza(RendererFactoryImpl.java:88)
at com.google.android.libraries.maps.it.zzav.zza(GoogleMapImpl.java:59)
at com.google.android.libraries.maps.it.zzci.zza(MapFragmentDelegateImpl.java:3)
at com.google.android.libraries.maps.it.zzcg.zza(MapFragmentDelegateImpl.java:15)
at com.google.android.libraries.maps.SupportMapFragment$zza.onCreateView(SupportMapFragment.java:15)
at com.google.android.gms.dynamic.zae.zaa(com.google.android.gms:play-services-base@@17.1.0:4)
at com.google.android.gms.dynamic.DeferredLifecycleHelper.zaa(com.google.android.gms:play-services-base@@17.1.0:9)
at com.google.android.gms.dynamic.DeferredLifecycleHelper.onCreateView(com.google.android.gms:play-services-base@@17.1.0:25)
at com.google.android.libraries.maps.SupportMapFragment.onCreateView(SupportMapFragment.java:34)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:310)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2617)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2569)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:336)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1186)
at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2222)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1995)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1951)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2621)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2569)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:336)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1186)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2617)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2569)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1432)
at android.app.Activity.performStart(Activity.java:7848)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3294)
2020-04-23 15:59:06.064 E/AndroidRuntime: at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Qual é a causa?
Respostas:
Edit : a seguir é a solução oficial do Google ( link )
Sumário
O segmento do SDK do Google Maps trava o aplicativo (ArrayIndexOutOfBoundsException) - solução oferecida
Descrição
Em 23 de abril de 2020, a partir das 11:30 PDT , o Google exibiu por 4 horas uma atualização da configuração de um componente móvel do Google Maps, provocando falhas nos SDKs do Google Maps para Android e iOS. Os aplicativos em dispositivos que baixaram esta versão da configuração (durante o período de interrupção) estavam vulneráveis à falha. Soluções alternativas são oferecidas para SDKs do Google Maps para Android e iOS.
SDK do Google Maps para Android
SDK do Google Maps para Android v2 (incluído no Google Play Services)
As atualizações do Google Play Services para corrigir a falha foram publicadas em todos os dispositivos com o Google Play Services versão 17.4.55 e mais recente. Não há alterações no número da versão do Google Play Services no dispositivo após a instalação da atualização. Nenhuma ação é necessária de desenvolvedores ou usuários finais para receber o módulo Mapas atualizado; no entanto, os desenvolvedores podem verificar se o módulo está presente em um determinado dispositivo com o seguinte comando adb:
Você deve ver a linha
Module Set ID: maps
listada naModule Sets
seção.As taxas de falha do Maps SDK para Android v2 estão de volta ao normal.
A partir de agora, se você não tiver atualizado seu aplicativo com as soluções alternativas de código do cliente mencionadas abaixo, não será necessário executar outras ações.
Se você já atualizou seu aplicativo com as soluções alternativas, poderá remover a solução alternativa em uma atualização subsequente do aplicativo (mas manter a solução alternativa segura).
Plano Premium SDK do Maps para Android v2 ou SDK do Maps para Android v3 beta (bibliotecas estáticas)
Se o seu aplicativo usar o SDK do Maps do plano Premium para Android v2 ou o SDK do Google Maps para Android v3 beta (bibliotecas estáticas) e ainda estiver com falhas, é altamente recomendável que você execute as soluções alternativas abaixo por meio de uma atualização do aplicativo. Como seu aplicativo está carregando uma versão estática do SDK, vulnerável aos dados ruins armazenados em alguns dispositivos, apenas uma atualização para o seu aplicativo pode resolver o problema.
Aprovações de revisão da Play Store
Se você atualizar o aplicativo, mas sofrer atrasos nas aprovações da revisão da Play Store, registre um caso de suporte com o ID do pacote do aplicativo: Entre em contato com a equipe de suporte . Nossa equipe de suporte encaminhará sua solicitação internamente e agilizará a aprovação.
Comentários negativos na Google Play Store
Alguns desenvolvedores de aplicativos perguntaram sobre críticas de 1 estrela na Google Play Store deixadas pelos usuários finais devido a falhas. Apenas comentários que violam a política do Google Play [1] podem ser removidos. Você também pode sinalizar críticas abusivas no Play Console [2]. Os aplicativos não serão removidos automaticamente da loja Google Play devido a críticas negativas. Também é importante observar que o cálculo da classificação geral da análise de aplicativos favorece as análises recentes, o que significa que sua classificação se recuperará para níveis pré-incidentes ao longo do tempo.
[1] Avaliações e críticas na Play Store
[2] Denunciar avaliações inapropriadas
SDK do Google Maps para iOS
As taxas de falhas no iOS estão de volta ao normal. Se o seu aplicativo ainda estiver com falhas, você precisará atualizar e publicar seu aplicativo com as soluções alternativas de código aqui comunicadas.
Para perguntas sobre como implantar ou acelerar seu aplicativo na Apple App Store, entre em contato diretamente com a Apple.
Com esta atualização, estamos encerrando esse problema. Obrigado a todos por sua paciência. Nossa equipe está realizando uma investigação interna aprofundada desse incidente; assim que possível, publicaremos nossa análise (em aproximadamente uma semana). Enquanto isso, se você tiver alguma dúvida ou ainda estiver com problemas, envie um caso de suporte .
Soluções alternativas:
Os usuários finais no Android podem limpar os dados do aplicativo afetado (não apenas o cache).
Os usuários finais no iOS podem desinstalar e reinstalar os aplicativos afetados.
Os desenvolvedores de aplicativos podem aplicar as soluções alternativas de código abaixo para resolver o problema para todos os usuários finais.
Solução alternativa de código para iOS:
O posicionamento recomendado para o código é anterior à inicialização do GMSServices no método aplicativo (_: didFinishLaunchingWithOptions :) (Swift) ou aplicativo: didFinishLaunchingWithOptions: (Objective-C). Especificamente:
Rápido:
Objetivo-C:
Solução alternativa de código para Android:
O canal recomendado para o código está em Application.onCreate ():
Java
Kotlin
As soluções alternativas fornecidas aqui abrangem todos os tipos e versões disponíveis de nossos SDKs para Android. Para esclarecer mais (caso você tenha lançado uma versão anterior da solução alternativa que não excluiu tantos arquivos):
Os aplicativos que usam o SDK para Android do Google Maps v3 beta devem precisar excluir apenas um arquivo,
DATA_ServerControlledParametersManager.data.v1. + getBaseContext (). getPackageName ()) ou
DATA_ServerControlledParametersManager.data. + getBaseContext (). getPackageName ())
fonte
Parece que em todos os aplicativos o Google Map cria o arquivo ZoomTables.data.
Este arquivo estava com formato incorreto, uma versão malformada dele que poderia ser baixada do comentário . Para reproduzir o problema, remova o ZoomTables.data dos pacotes de aplicativos no dispositivo e insira um malformado. O aplicativo deve falhar.
Atualmente, o problema foi resolvido no lado do Google, mas os aplicativos ainda contêm uma versão em cache desse arquivo de dados. Para corrigir o problema, remova esse arquivo diretamente no aplicativo e inicie no Método Application onCreate.
Atualização 1
Atualizei a solução alternativa, com base nos comentários mais recentes dos desenvolvedores do Google :
fonte
Esta solução funcionou para mim
Abra o aplicativo novamente e verifique se o problema foi corrigido.
Abaixo estão sugestões apenas para ajudar seus clientes.
Envie um e-mail a todos os usuários pelo inconveniente e descreva o problema que eles enfrentaram e dê as etapas acima mencionadas para resolver o problema.
Você também pode enviar notificações por push a todos os usuários com as notificações por push do Firebase, se o seu aplicativo tiver o serviço de notificações por push.
Demonstração de capturas de tela:
fonte
Para o Android, vários desenvolvedores mencionaram uma solução alternativa que consiste em excluir o arquivo ZoomTable.data diretamente do aplicativo. Após a revisão, essa correção parece segura e você pode tentar em seu aplicativo.
Consulte https://issuetracker.google.com/154855417#comment179
Se você deseja que seus usuários continuem usando seu aplicativo sem reinstalar, o código de exemplo é copiado e colado aqui para sua conveniência. Em Application.onCreate () :
referência: o SDK do Google Maps está falhando - parcialmente resolvido
fonte
Desvantagens das soluções acima:
Desvantagens da minha solução:
Minha solução captura a exceção lançada pelo SDK do Google Maps, chame isso em onCreate da classe Application:
fonte
A versão produtiva foi corrigida (no lado do google), mas se você ainda tiver problemas com seu emulador, precisará executar o código a seguir apenas uma vez.
MainActivity.kt
Solução alternativa : limpe os dados do aplicativo (não apenas o cache).
Nota : Uma cópia do arquivo problemático dos pacotes de aplicativos no dispositivo, se alguém precisar dele para reprodução.
Fonte
GL
fonte
Resposta completa e oficial para todos:
Diagnóstico: falha nos SDKs para dispositivos móveis da Google Maps Platform (iOS e Android) em carga.
Solução alternativa: * Limpe os dados do aplicativo afetado (não apenas o cache) ou desinstale e reinstale o (s) aplicativo (s) afetado (s).
O posicionamento recomendado para o código é anterior à inicialização do GMSServices no método aplicativo (_: didFinishLaunchingWithOptions :) (Swift) ou aplicativo: didFinishLaunchingWithOptions: (Objective-C). Especificamente:
Rápido:
Objetivo-C:
Depois de implantá-lo em seu aplicativo, você poderá registrar um caso de Suporte do Maps se desejar que ajudemos a acelerar sua aprovação. Certifique-se de incluir o ID do seu aplicativo, o ID do pacote e a versão que você deseja revisar no seu caso.
Solução alternativa de código para Android:
O canal recomendado para o código está em Application.onCreate ():
Java
Kotlin
Fonte: https://issuetracker.google.com/issues/1548554
fonte
Este é um código que funciona para o Xamarin. Você precisa instalar o pacote de nuget do Xamarin.Essentials.
fonte
Você deve chamar o método a seguir no onCreate do seu aplicativo Android para evitar a falha.
fonte