Mi aplicación que usa el SDK de Google Maps (v2) acaba de comenzar a fallar con esta excepción:
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)
En el v3 beta SDK, el seguimiento de la pila es:
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)
¿Cual es la causa?
Respuestas:
Editar : la siguiente es la solución oficial de Google ( enlace )
Resumen
El hilo del SDK de Google Maps bloquea la aplicación (ArrayIndexOutOfBoundsException) - Solución ofrecida
Descripción
El 23 de abril de 2020 a partir de las 11:30 PDT , Google realizó durante 4 horas una actualización de la configuración de un componente móvil de Maps, lo que provocó bloqueos en los SDK de Maps para Android e iOS. Las aplicaciones en dispositivos que descargaron esta versión de la configuración (durante el período de interrupción) fueron vulnerables al bloqueo. Se ofrecen soluciones alternativas para los SDK de Maps para Android e iOS.
Maps SDK para Android
Maps SDK para Android v2 (incluido en Google Play Services)
Las actualizaciones de Google Play Services para solucionar el bloqueo se han publicado en todos los dispositivos con Google Play Services versión 17.4.55 y posteriores. No hay cambios en el número de versión de los Servicios de Google Play en el dispositivo después de instalar la actualización. No se requiere ninguna acción de los desarrolladores o usuarios finales para recibir el módulo Maps actualizado; sin embargo, los desarrolladores pueden verificar que el módulo esté presente en un dispositivo determinado con el siguiente comando adb:
Debería ver la línea que
Module Set ID: maps
figura en laModule Sets
sección.Las tasas de bloqueo de Maps SDK para Android v2 han vuelto a la normalidad.
A partir de ahora, si no ha actualizado su aplicación con las soluciones alternativas de código del lado del cliente que se mencionan a continuación, no necesita tomar más medidas.
Si ya ha actualizado su aplicación con las soluciones, puede eliminar la solución en una actualización posterior de su aplicación (pero mantener la solución es segura).
Premium Plan Maps SDK para Android v2 o Maps SDK para Android v3 beta (bibliotecas estáticas)
Si su aplicación utiliza el SDK de Mapas de Plan Premium para Android v2 o SDK de Maps para Android v3 beta (bibliotecas estáticas), y aún experimenta fallas, le recomendamos encarecidamente que implemente las soluciones a continuación a través de una actualización de su aplicación. Como su aplicación está cargando una versión estática del SDK que es vulnerable a los datos incorrectos que se almacenan en algunos dispositivos, solo una actualización de su aplicación puede resolver el problema.
Aprobaciones de reseñas de Play Store
Si actualiza su aplicación pero experimenta retrasos en las aprobaciones de las revisiones de Play Store, presente un caso de asistencia con el ID del paquete de su aplicación: Póngase en contacto con el equipo de asistencia . Nuestro equipo de soporte escalará internamente su solicitud y acelerará la aprobación.
Opiniones negativas en Google Play Store
Algunos desarrolladores de aplicaciones preguntaron sobre las reseñas de 1 estrella en Google Play Store que dejaron los usuarios finales debido a bloqueos. Solo se pueden eliminar los comentarios que violen la política de Google Play [1]. También puedes marcar reseñas abusivas en Play Console [2]. Las aplicaciones no se eliminarán automáticamente de la tienda Google Play debido a las críticas negativas. También vale la pena señalar que el cálculo de su calificación general de revisión de aplicaciones favorece las revisiones recientes, lo que significa que su calificación se recuperará a niveles previos al incidente con el tiempo.
[1] Calificaciones y reseñas en Play Store
[2] Informar de críticas inapropiadas
Maps SDK para iOS
Las tasas de bloqueo en iOS vuelven a la normalidad. Si su aplicación aún experimenta fallas, debe actualizar y publicar su aplicación con las soluciones de código que se comunican aquí.
Si tiene preguntas sobre cómo implementar o acelerar su aplicación en la tienda de aplicaciones de Apple, comuníquese directamente con Apple.
Con esta actualización, estamos cerrando este problema. Gracias a todos por su paciencia. Nuestro equipo está realizando una investigación interna en profundidad de este incidente; tan pronto como sea posible, publicaremos nuestro análisis (en aproximadamente una semana). Mientras tanto, si tiene alguna pregunta o todavía tiene problemas, presente un caso de asistencia .
Soluciones alternativas:
Los usuarios finales en Android pueden borrar los datos de la aplicación afectada (no solo el caché).
Los usuarios finales en iOS pueden desinstalar y luego reinstalar las aplicaciones afectadas.
Los desarrolladores de aplicaciones pueden aplicar las soluciones alternativas de código a continuación para resolver el problema para todos sus usuarios finales.
Solución alternativa de código para iOS:
La ubicación recomendada para el código es antes de la inicialización de GMSServices en la aplicación (_: didFinishLaunchingWithOptions :) (Swift) o aplicación: didFinishLaunchingWithOptions: (Objective-C). Específicamente:
Rápido:
C objetivo:
Solución alternativa de código para Android:
La ubicación recomendada para el código está en Application.onCreate ():
Java
Kotlin
La solución provista aquí cubre todos los sabores y versiones disponibles de nuestros SDK para Android. Para aclarar más (en caso de que haya lanzado una versión anterior de la solución alternativa que no eliminó tantos archivos):
Las aplicaciones que usan Maps Android SDK v3 beta solo deberían eliminar un archivo, ya sea
DATA_ServerControlledParametersManager.data.v1. + getBaseContext (). getPackageName ()) o
DATA_ServerControlledParametersManager.data. + getBaseContext (). getPackageName ())
fuente
Parece que en cada aplicación Google Map crea el archivo ZoomTables.data.
Este archivo tenía una versión con formato incorrecto, con formato incorrecto que podía descargarse de los comentarios . Para reproducir el problema, elimine ZoomTables.data de los paquetes de la aplicación en el dispositivo e inserte uno con formato incorrecto. La aplicación debería bloquearse.
Actualmente, el problema se resolvió por parte de Google, pero las aplicaciones aún contienen una versión en caché de ese archivo de datos. Para solucionar el problema, debemos eliminar ese archivo directamente en el inicio de la aplicación en el Método de creación de aplicaciones.
Actualización 1
He actualizado la solución, basándome en el último comentario de los desarrolladores de Google :
fuente
Esta solución me funcionó
Abra la aplicación nuevamente y verifique si se solucionó el problema.
A continuación hay sugerencias solo para ayudar a sus clientes.
Envíe un correo electrónico a todos sus usuarios por las molestias y describa el problema que enfrentaron y bríndeles los pasos mencionados anteriormente para resolver su problema.
También puede enviar notificaciones push a todos sus usuarios con notificaciones push de Firebase, si su aplicación tiene el servicio de notificaciones push.
Demostración de capturas de pantalla:
fuente
Para Android, varios desarrolladores mencionaron una solución alternativa que consiste en eliminar el archivo ZoomTable.data directamente de su aplicación. Después de la revisión, esta solución parece segura, y puede probarla en su aplicación.
Consulte https://issuetracker.google.com/154855417#comment179
Si desea que sus usuarios continúen usando su aplicación sin volver a instalarla, el código de muestra se copia aquí para su comodidad. En Application.onCreate () :
referencia: el SDK de Google Maps se bloquea - parcialmente resuelto
fuente
Inconvenientes de las soluciones anteriores:
Inconvenientes de mi solución:
Mi solución detecta la excepción lanzada por el SDK de Maps, llame a esto en onCreate de la clase de aplicación:
fuente
La versión productiva fue corregida (por parte de Google), pero si todavía tiene problemas con su emulador, debe ejecutar el siguiente código solo una vez.
MainActivity.kt
Solución alternativa : borre los datos de la aplicación (no solo el caché).
Nota : Una copia del archivo problemático de los paquetes de la aplicación en el dispositivo si alguien lo necesita para reprobar.
Fuente
GL
fuente
Respuesta completa y oficial para todos:
Diagnóstico: bloqueo de los SDK móviles de la plataforma Google Maps (iOS y Android) al cargarse.
Solución alternativa: * Borre los datos de la aplicación afectada (no solo el caché), o desinstálela y luego vuelva a instalar las aplicaciones afectadas.
La ubicación recomendada para el código es antes de la inicialización de GMSServices en la aplicación (_: didFinishLaunchingWithOptions :) (Swift) o aplicación: didFinishLaunchingWithOptions: (Objective-C). Específicamente:
Rápido:
C objetivo:
Una vez que lo haya implementado en su aplicación, puede presentar un caso de Soporte de Maps si desea que le ayudemos a acelerar su aprobación. Asegúrese de incluir la ID de su aplicación, la ID del paquete y la versión que desea revisar en su caso.
Solución alternativa de código para Android:
La ubicación recomendada para el código está en Application.onCreate ():
Java
Kotlin
Fuente: https://issuetracker.google.com/issues/1548554
fuente
Este es el código de trabajo para Xamarin. Necesita instalar el paquete nuget Xamarin.Essentials.
fuente
Debes llamar al siguiente método en onCreate de tu aplicación de Android para evitar el bloqueo.
fuente