Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

479
Vistas
AndroidRuntime: EXCEPCIÓN FATAL: androidmapsapi-ZoomTableManager

Mi aplicación que usa Google Maps SDK (v2) comenzó 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@201216081@20.12.16 (120400-0):9) at com.google.maps.api.android.lib6.gmm6.vector.cv.a(:com.google.android.gms.dynamite_mapsdynamite@201216081@20.12.16 (120400-0):23) at com.google.maps.api.android.lib6.gmm6.util.m.run(:com.google.android.gms.dynamite_mapsdynamite@201216081@20.12.16 (120400-0):14) at java.lang.Thread.run(Thread.java:919)

En el SDK beta v3, 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?

over 4 years ago · Hanz Gallego
8 Respuestas
Responde la pregunta

0

Parece que en todas las aplicaciones, Google Map crea el archivo ZoomTables.data.

ingrese la descripción de la imagen aquí

Este archivo estaba mal formado, una versión mal formada del mismo que se podía descargar desde el comentario . Para reproducir el problema, elimine ZoomTables.data de los paquetes de aplicaciones 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 Application onCreate.

 private void fixGoogleMapBug() { try { SharedPreferences hasFixedGoogleBug154855417 = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE); if (!hasFixedGoogleBug154855417.contains("fixed")) { File corruptedZoomTables = new File(getFilesDir(), "ZoomTables.data"); File corruptedSavedClientParameters = new File(getFilesDir(), "SavedClientParameters.data.cs"); File corruptedClientParametersData = new File( getFilesDir(), "DATA_ServerControlledParametersManager.data." + getBaseContext().getPackageName()); File corruptedClientParametersDataV1 = new File( getFilesDir(), "DATA_ServerControlledParametersManager.data.v1." + getBaseContext().getPackageName()); corruptedZoomTables.delete(); corruptedSavedClientParameters.delete(); corruptedClientParametersData.delete(); corruptedClientParametersDataV1.delete(); hasFixedGoogleBug154855417.edit().putBoolean("fixed", true).apply(); } } catch (Exception e) { } }

Actualización 1

He actualizado la solución alternativa, basada en el último comentario de los desarrolladores de Google:

Las soluciones provisionales proporcionadas aquí cubren 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 que no eliminó tantos archivos):

Las aplicaciones que usan Maps Android SDK v2 solo deben eliminar un archivo: ZoomTables.data. 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())

over 4 years ago · Hanz Gallego Denunciar

0

Para Android, varios desarrolladores mencionaron una solución que consistía en eliminar el archivo ZoomTable.data directamente desde 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 y pega aquí para su comodidad. En Aplicación.onCreate() :

 SharedPreferences googleBug = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE); if (!googleBug.contains("fixed")) { File corruptedZoomTables = new File(getFilesDir(), "ZoomTables.data"); corruptedZoomTables.delete(); googleBug.edit().putBoolean("fixed", true).apply(); }

referencia: Google Maps SDK está fallando, parcialmente resuelto

over 4 years ago · Hanz Gallego Denunciar

0

Esta solucion funciono para mi

  1. Primero abra "Información de la aplicación"

  2. Elija "Almacenamiento"

  3. Haga clic en "Borrar datos"

  4. Abra la aplicación nuevamente y verifique si el problema se solucionó.

    A continuación se presentan sugerencias solo para ayudar a sus clientes.

  5. Envíe un correo electrónico a todos sus usuarios por las molestias y descríbales el problema que enfrentaron y bríndeles los pasos mencionados anteriormente para resolver su problema.

  6. También puede enviar notificaciones automáticas a todos sus usuarios con notificaciones automáticas de Firebase, si su aplicación tiene el servicio de notificaciones automáticas.

Demostración de capturas de pantalla:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

over 4 years ago · Hanz Gallego Denunciar

0

Solución ofrecida para iOS y Android:

https://issuetracker.google.com/issues/154855417#comment509

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 Google Play Services en el dispositivo después de instalar la actualización. No se requiere ninguna acción por parte de los desarrolladores o usuarios finales para recibir el módulo de Maps actualizado; sin embargo, los desarrolladores pueden verificar que el módulo esté presente en un dispositivo determinado con el siguiente comando adb:

 adb shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider

Debería ver la línea Module Set ID: maps enumerados en la sección Module Sets .

 Module Set ID: maps, Module Set Version: 2015120015120000

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 del código del lado del cliente que se mencionan a continuación, no es necesario que realice ninguna otra acción.

Si ya ha actualizado su aplicación con las soluciones alternativas, puede eliminar la solución alternativa en una actualización posterior de su aplicación (pero mantener la solución alternativa es seguro).


Solución de código para Android:

Se corrigió la versión productiva (del lado de Google), pero si aún tiene problemas con su emulador, debe ejecutar el siguiente código solo una vez.

La ubicación recomendada para el código es Application.onCreate():

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) fixGoogleMapBugTemp() //TODO: Then clean this line // ... } /** * Observation: Invoke this method only once */ private fun fixGoogleMapBugTemp() { val googleBug = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE) if (!googleBug.contains("fixed")) { val corruptedZoomTables = File(filesDir, "ZoomTables.data"); corruptedZoomTables.delete(); googleBug.edit().putBoolean("fixed", true).apply(); } }

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 la reproducción.

Cuadra

Fuente

GL

over 4 years ago · Hanz Gallego Denunciar

0

Inconvenientes de las soluciones anteriores:

  • ZoomTables.data se elimina en todos los dispositivos, independientemente de si el dispositivo se ve afectado por el bloqueo o no
  • La solución alternativa solo funciona una vez, ¿está seguro de que este problema nunca volverá a ocurrir?

Inconvenientes de mi solución:

  • en la primera ejecución de la actividad de mapas en el dispositivo afectado, el mapa está vacío. Después de que se muestre la rotación del dispositivo o el segundo mapa de ejecución

Mi solución detecta la excepción lanzada por Maps SDK, llame a esto en onCreate de la clase de aplicación:

 public static void catchGoogleMapsException(final Context context) { final Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler( (@NonNull final Thread thread, @NonNull final Throwable ex) -> { if (thread.getName().contains("ZoomTableManager")) { new File(context.getFilesDir(), "ZoomTables.data").delete(); Log.w("Maps Bug 154855417", "Caught exception and deleted ZoomTables.data"); } else if (defaultHandler!=null) defaultHandler.uncaughtException(thread, ex); else throw new RuntimeException( "No default uncaught exception handler.", ex); }); }
over 4 years ago · Hanz Gallego Denunciar

0

Este es un código de trabajo para Xamarin. Debe instalar el paquete nuget de Xamarin.Essentials.

 if (!Preferences.Get("google_bug_fixed", false)) { var corruptedZoomTables = new File(FileSystem.AppDataDirectory, "ZoomTables.data"); corruptedZoomTables.Delete(); Preferences.Set("google_bug_fixed", true); }
over 4 years ago · Hanz Gallego Denunciar

0

Debe llamar al método de seguimiento en onCreate de su aplicación de Android para evitar el bloqueo.

 private fun clearCorruptedGMapsPreference() { try { val sharedPreferences = getSharedPreferences("google_bug_154855417", Context.MODE_PRIVATE) if (!sharedPreferences.contains("fixed")) { val corruptedZoomTables = File(filesDir, "ZoomTables.data") val corruptedSavedClientParameters = File(filesDir, "SavedClientParameters.data.cs") val corruptedClientParametersData = File(filesDir, "DATA_ServerControlledParametersManager.data.${packageName}") val corruptedClientParametersDataV1 = File(filesDir, "DATA_ServerControlledParametersManager.data.v1.${packageName}") corruptedZoomTables.delete() corruptedSavedClientParameters.delete() corruptedClientParametersData.delete() corruptedClientParametersDataV1.delete() sharedPreferences.edit().putBoolean("fixed", true).apply() } } catch (exception: Exception) { LogUtil.e(this@CourierApplication::class.java.name, "An error has happened. Error: ".plus(exception.cause?.message ?: "")) } }
over 4 years ago · Hanz Gallego Denunciar

0

La solución sugerida solo funcionará una vez:

Sugiero enviar una notificación push silenciosa a su aplicación sobre los datos de Google Map Zoom corruptos o hacer una llamada a la API para verificar el estado de los datos de Google Map Zoom. Si cree que esto es una llamada al servidor innecesaria cada vez, puede usar la notificación automática para activar esta lógica o integrarla con una de sus llamadas existentes donde verifica el estado de sus servidores. Dejando esto a la lógica específica de su aplicación. Al hacerlo, si Google Maps nuevamente arroja este error, puede volver a activar su solución alternativa.

Si llama al servidor, esto restablecerá ZoomData para todos sus usuarios. Si utiliza notificaciones automáticas, puede enviar notificaciones a algunos usuarios.

 fun receivedPushNotificationZoomDataCorrupted() { try { val corruptedZoomTables = File(filesDir, "ZoomTables.data") val corruptedSavedClientParameters = File(filesDir, "SavedClientParameters.data.cs") val corruptedClientParametersData = File(filesDir, "DATA_ServerControlledParametersManager.data.v1.${packageName}") corruptedZoomTables.delete() corruptedSavedClientParameters.delete() corruptedClientParametersData.delete() } } catch (exception: Exception) { } }
over 4 years ago · Hanz Gallego Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda