Desofuscación o simbolización de seguimientos de pila de fallas

En Android, las fallas y los ANR producen un seguimiento de pila, que es un resumen de la secuencia de funciones anidadas que se llamaron en el programa hasta el momento en que se produjo la falla. Estos resúmenes pueden ayudar a identificar y solucionar cualquier problema en la fuente.

Si tu app o juego se desarrollaron con Java y usas ProGuard para optimizarlos y ofuscarlos, puedes subir un archivo de asignación ProGuard para cada versión de la app o del juego en Play Console. Si, en cambio, se desarrollaron con código nativo, como C++, puedes subir un archivo de símbolos de depuración para cada versión de la app o el juego en Play Console. Esto facilita el análisis y la corrección de fallas y ANR.

Importante: Para la desofuscación de apps compiladas en Java, solo se admiten archivos de asignación compatibles con ReTrace. Este es el mismo formato que usan ProGuard y R8.

Paso 1: Genera un archivo de desofuscación o de simbolización

Para desofuscar o simbolizar las fallas y los ANR de la app, primero debes generar los archivos necesarios para la misma versión. Para que la desofuscación o la simbolización funcionen, se debe generar y subir un archivo para cada versión nueva de la app.

Java: Genera un archivo de asignación de ProGuard

Para desofuscar los seguimientos de pila de Java, primero debes generar un archivo de asignación de ProGuard. A fin de obtener información para hacerlo, visita el sitio de Google Developers.

Nativo: Genera un archivo de símbolos de depuración

Complemento de Android para Gradle versión 4.1 y posteriores

Si tu proyecto involucra la compilación de un Android App Bundle, puedes incluir el archivo de símbolos de depuración automáticamente. Para ello, agrega lo siguiente al archivo build.gradle de la app:

  • android.defaultConfig.ndk.debugSymbolLevel = 'FULL'

Nota: El límite del archivo de símbolos de depuración es de 800 MB. Si la huella de tus símbolos de depuración es demasiado grande, usa SYMBOL_TABLE en lugar de FULL para reducir el tamaño del archivo.

Si tu proyecto involucra la creación de un APK, usa la configuración de compilación build.gradle anterior para generar el archivo de símbolos de depuración por separado. Sube manualmente el archivo de símbolos de depuración a Google Play Console como se describe a continuación en el Paso 2: Sube un archivo de desofuscación o de simbolización. Como parte del proceso de compilación, el complemento de Gradle para Android genera este archivo en la siguiente ubicación del proyecto:

  • app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip

Complemento de Android para Gradle versión 4.0 y anteriores (y otros sistemas de compilación)

Como parte del proceso de compilación de un paquete de aplicación o APK, el complemento de Android para Gradle conserva una copia de las bibliotecas sin extraer en un directorio de proyecto. Este directorio sigue una estructura similar a la que se muestra a continuación:

app/build/intermediates/cmake/universal/release/obj

├── armeabi-v7a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── arm64-v8a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── x86/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

└── x86_64/

    ├── libgameengine.so

    ├── libothercode.so

    └── libvideocodec.so

Nota: Si usas un sistema de compilación diferente, puedes modificarlo para almacenar bibliotecas sin extraer en un directorio que cumpla con la estructura que se indicó más arriba.

  1. Comprime el contenido de este directorio:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -rmbols.zip .
  2. Sube manualmente el archivo symbols.zip a Play Console como se describe a continuación en el Paso 2: Sube un archivo de desofuscación o de simbolización.

El archivo de símbolos de depuración tiene un límite de 800 MB. Si tu archivo es demasiado grande, es posible que se deba a que los archivos .so contienen una tabla de símbolos (nombres de funciones) además de información de depuración DWARF (nombres de archivos y líneas de código). Estos elementos no son necesarios para simbolizar el código y se pueden quitar mediante la ejecución del siguiente comando:

  • $OBJCOPY --strip-debug lib.so lib.so.sym

Nota: $OBJCOPY apunta a la versión específica de la ABI que estás quitando. Por ejemplo: ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuild/linux-x86_64/bin/aarch64-linux-android-objcopy

Paso 2: Sube un archivo de desofuscación o de simbolización

Para desofuscar o simbolizar las fallas y los ANR de una de las versiones de la app, debes subir los archivos de desofuscación o simbolización de cada una de las versiones.

Importante: Este paso es obligatorio únicamente para los desarrolladores que usan APK. Si usas un paquete de aplicación y el complemento de Android para Gradle versión 4.1 o posterior, no debes realizar ninguna acción adicional. Tomaremos automáticamente el archivo de desofuscación del paquete y podrás omitir el Paso 3: Visualiza los seguimientos de pila de fallas desofuscados. Para obtener más información sobre los paquetes de aplicaciones, visita el sitio para desarrolladores de Android.

Cómo subir archivos con Play Console

Para subir un archivo de desofuscación o simbolización, sigue estos pasos:

  1. Abre Play Console.
  2. Selecciona una app.
  3. En el menú de la izquierda, selecciona

    Prueba y lanza

    > Explorador de paquete de aplicación.
  4. En la esquina superior derecha, usa el selector para elegir el artefacto pertinente.
  5. Selecciona la pestaña Descargas y desplázate hacia abajo hasta la sección "Recursos".
  6. Haz clic en la flecha de carga del archivo de asignación o en los símbolos de depuración según corresponda para subir el archivo de desofuscación o de simbolización para la versión de la app.
Sube archivos mediante la API de Google Play Developer

Para subir archivos mediante la API de Google Play Developer, ve al sitio de Google Developers.

Paso 3: Visualiza los seguimientos de pila de fallas desofuscados

Luego de que subas un archivo de asignación ProGuard o un archivo de símbolos de depuración para una versión de la app, se desofuscarán las fallas y los ANR que ocurran posteriormente. Puedes revisar los seguimientos de pila desofuscados de fallas y ANR individuales en la página Fallas y ANR de tu app.

  1. Abre Play Console.
  2. Selecciona una app.
  3. En el menú de la izquierda, selecciona Supervisa y mejora > Android vitals > Fallas y ANR.
  4. Selecciona una falla.
  5. En la sección "Seguimientos de pila", verás los seguimientos de pila desofuscados y simbolizados.

Importante: Una vez que hayas subido un archivo de asignación para una versión de la app, solo se desofuscarán las fallas y los ANR futuros de esa versión. No se desofuscarán las fallas ni los ANR de una versión de la app que hayan ocurrido antes de que subieras el archivo de asignación respectivo.

Preguntas frecuentes

No quiero usar la desofuscación ni la simbolización de Play Console. ¿Puedo hacerlo sin conexión?

Play Console usa ndk-stack para simbolizar los seguimientos de pila en las apps nativas y ReTrace para las fallas de Java. Si eliges no compartir tus archivos de desofuscación, puedes copiar las pilas de fallas ofuscadas desde Play Console y usar la herramienta adecuada sin conexión para simbolizarlas. Sin embargo, este proceso debe realizarse de forma manual en cada pila de fallas, por lo que es lento y requiere mucho tiempo. Si proporcionas los archivos de desofuscación, Play Console podrá hacerlo por ti.

Si subí el archivo de desofuscación o simbolización, ¿por qué se siguen ofuscando mis fallas y ANR?

Después de que subas un archivo de asignación ProGuard o un archivo de símbolos de depuración para una versión de la app, solo se desofuscarán las fallas y los ANR que ocurran posteriormente. Para ver las fallas y los ANR desofuscados en Play Console, deberás esperar un tiempo hasta que los dispositivos de los usuarios envíen los informes correspondientes.

¿Por qué solo se desofuscaron parcialmente mis fallas y ANR después de haber subido el archivo de desofuscación o simbolización?

Esto se debe a que subiste un archivo de desofuscación o simbolización incompleto. Asegúrate de incluir los archivos de simbolización de toda la app, especialmente si usas un proceso de compilación complejo o de varias etapas. Uno de los motivos más comunes de la desofuscación parcial es el uso de bibliotecas de terceros. En esos casos, es posible que el proveedor de la biblioteca pueda proporcionar los archivos de desofuscación.

Después de subir el archivo de desofuscación o simbolización, noté que recibía menos fallas y ANR, pero de mayor gravedad. ¿Por qué ocurre esto?

Sin los archivos de desofuscación, se mostrarán por separado la misma falla o ANR, ya sea que ocurran en dispositivos de 32 y 64 bits o en dispositivos Intel y ARM. Si proporcionas archivos de desofuscación, podemos agrupar las fallas, lo que te brinda una mejor perspectiva de las fallas y los ANR de mayor impacto para la app.

¿Qué sucede si olvido subir el archivo?

Si olvidas subir el archivo para una nueva versión de la app, volverán a ofuscarse las fallas y los ANR. Sigue las instrucciones que se detallaron arriba para subirlo ahora. Después de que subas un archivo de asignación ProGuard o un archivo de símbolos de depuración para una versión de la app, solo se desofuscarán las fallas y los ANR que ocurran posteriormente. Para ver las fallas y los ANR desofuscados en Play Console, deberás esperar un tiempo hasta que los dispositivos de los usuarios envíen los informes correspondientes.

Para evitar el riesgo de que se te olvide subir el archivo, considera cambiar el proceso de compilación para usar paquetes de aplicaciones con el complemento de Gradle para Android 4.1 o versiones posteriores. En este caso, puedes seguir las instrucciones que aparecen en el sitio para desarrolladores de Android para incluir automáticamente el archivo de símbolos de depuración en el paquete de aplicación.

¿Qué pasa si subo el archivo incorrecto?

Si subes un archivo incorrecto para una versión de la app, volverán a ofuscarse las fallas y los ANR. Para subir una versión corregida, sigue estos pasos:

  1. Abre Play Console.
  2. Selecciona una app.
  3. En el menú de la izquierda, selecciona

    Prueba y lanza

    > Explorador de paquete de aplicación.
  4. En la esquina superior derecha, usa el selector para elegir el artefacto pertinente.
  5. Selecciona la pestaña Descargas y desplázate hacia abajo hasta la sección "Recursos".
  6. Haz clic en el ícono de borrar junto al archivo de desofuscación o de simbolización incorrecto.
  7. Una vez que se borre la versión incorrecta, haz clic en el ícono de carga y sube el archivo correcto para la versión de la app.

Luego de que subas el archivo correcto de asignación ProGuard o de símbolos de depuración para una versión de la app, solo se desofuscarán las fallas y los ANR que ocurran posteriormente. Para ver las fallas y los ANR desofuscados en Play Console, deberás esperar un tiempo hasta que los dispositivos de los usuarios envíen los informes correspondientes.

Sugerencia: Para evitar el riesgo de subir una versión incorrecta del archivo, considera cambiar el proceso de compilación para usar paquetes de aplicaciones con el complemento de Gradle para Android 4.1 o versiones posterior. En este caso, puedes seguir las instrucciones que aparecen en el sitio para desarrolladores de Android para incluir automáticamente el archivo de símbolos de depuración en el paquete de aplicación.

Actualmente uso archivos APK. ¿Cómo me cambio a los paquetes de aplicaciones?

Para comenzar, visita el sitio para desarrolladores de Android.

Mi app contiene código nativo y Java. ¿Puedo subir un archivo de simbolización nativo y uno de desofuscación de Java?

Sí.

¿Por qué algunos errores de ANR no muestran un seguimiento de pila?

En ocasiones, el sistema encuentra un error de ANR, pero no puede recopilar el seguimiento de pila. Cuando eso ocurre, se muestra el error de ANR para brindarte una vista más completa de la estabilidad de tu app, pero no se puede mostrar el seguimiento de pila en sí. Los ANR sin seguimientos de pila se agrupan por tipo y actividad, por lo que revisar y corregir ANR similares puede ayudar a reducir la cantidad sin seguimientos de pila.

¿Te resultó útil esto?

¿Cómo podemos mejorarla?

¿Necesitas más ayuda?

Prueba estos próximos pasos:

Búsqueda
Borrar búsqueda
Cerrar la búsqueda
Menú principal
11542239996681001123
true
Buscar en el Centro de asistencia
true
true
true
true
true
92637
false
false