Desofuscar o simbolizar rastreos de pilas de fallos

Los fallos y los errores ANR en Android producen un rastreo de la pila, que es una captura de la secuencia de funciones anidadas que se hayan ejecutado en tu programa hasta el momento en que falla. Estas capturas pueden ayudarte a identificar y solucionar cualquier problema en el origen.

Si has desarrollado tu aplicación o juego con Java y usas ProGuard para optimizar y ofuscar tu aplicación, puedes subir un archivo de asignación de ProGuard para cada versión de tu aplicación en Play Console. Si has desarrollado tu aplicación o juego con código nativo (como C++), puedes subir un archivo de símbolos de depuración para cada versión de tu aplicación en Play Console. De esta forma, es más fácil analizar y resolver los fallos y los errores ANR.

Importante: Para realizar la desofuscación de aplicaciones compiladas en Java, solo se admiten archivos de asignación compatibles con ReTrace. Es el mismo formato utilizado por ProGuard o R8.

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

Si quieres desofuscar o simbolizar los fallos y los errores ANR de una versión de tu aplicación, primero tienes que generar los archivos necesarios para esa versión de tu aplicación. Debes generar y subir un archivo por cada versión nueva de la aplicación; si no, la desofuscación o la simbolización no funcionarán.

Java: Generar un archivo de asignación de ProGuard

Para desofuscar los rastreos de la pila de Java, primero tienes que generar un archivo de asignación de ProGuard. Si quieres consultar cómo hacerlo, ve al sitio web de Google Developers.

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

Complemento de Android para Gradle (versión 4.1 y posteriores)

Si tu proyecto crea un Android App Bundle, puedes incluir automáticamente el archivo de símbolos de depuración en él. Para incluir este archivo, añade lo siguiente al archivo build.gradle de tu aplicación:

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

Nota: El tamaño del archivo de símbolos de depuración no puede ser superior a 800 MB. Si tu archivo de símbolos de depuración es demasiado grande, utiliza SYMBOL_TABLE en lugar de FULL para reducir su tamaño.

Si tu proyecto crea un APK, utiliza el ajuste de compilación build.gradle en el código que se muestra arriba 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. Para ello, sigue las indicaciones que se incluyen más abajo, en el Paso 2: Sube un archivo de desofuscación o simbolización. Como parte del proceso de compilación, el complemento de Android para Gradle genera un archivo que está 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 app bundle o un APK, el complemento de Android para Gradle guarda una copia de las bibliotecas que no se hayan optimizado en un directorio de proyecto. Este directorio sigue una estructura similar a esta:

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 utilizas un sistema de compilación diferente, puedes cambiarlo para almacenar bibliotecas que no se hayan optimizado en un directorio con la estructura requerida que se muestra arriba.

  1. Comprime el contenido de este directorio:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. Sube manualmente el archivo symbols.zip a Play Console. Para ello, sigue las indicaciones que se incluyen más abajo, en el Paso 2: Sube un archivo de desofuscación o simbolización.

El tamaño del archivo de símbolos de depuración no puede ser superior a 800 MB. Si el archivo es demasiado grande, es probable que tus archivos .so contengan una tabla de símbolos (nombres de funciones) e información de depuración en formato DWARF (nombres de archivos y líneas de código). Estos elementos no son necesarios para simbolizar el código y se pueden quitar ejecutando el siguiente comando:

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

Nota: $OBJCOPY apunta a la versión específica del ABI que estés preparando (por ejemplo, ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy).

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

Para desofuscar o simbolizar los fallos y los errores ANR de una versión de tu aplicación, tienes que subir los archivos de desofuscación o simbolización para cada versión de tu aplicación.

Importante: Este paso solo es necesario en el caso de los desarrolladores que utilicen APKs. Si utilizas un app bundle y el complemento de Android para Gradle (versión 4.1 o posterior), no tienes que hacer nada, ya que obtendremos automáticamente el archivo de desofuscación del bundle. Puedes ir directamente al Paso 3: Consulta los rastreos de pilas de fallos desofuscados. Puedes consultar más información sobre app bundles en el sitio para desarrolladores de Android.

Subir archivos con Play Console

Para subir un archivo de desofuscación o simbolización, haz lo siguiente:

  1. Abre Play Console.
  2. Selecciona una aplicación.
  3. En el menú de la izquierda, selecciona Probar y publicar > Explorador de app bundles.
  4. Elige el artefacto pertinente usando el selector situado en la esquina superior derecha.
  5. Selecciona la pestaña Descargas y desplázate hacia abajo hasta la sección "Recursos".
  6. Haz clic en la flecha de subida del archivo de asignación o del archivo de los símbolos de depuración para subir el archivo de desofuscación o simbolización correspondiente a la versión de tu aplicación.
Subir archivos con la API Google Play Developer

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

Paso 3: Consulta los rastreos de pilas de fallos desofuscados

Una vez que hayas subido un archivo de asignación de ProGuard o un archivo de símbolos de depuración correspondiente a una versión de tu aplicación, los fallos y los errores ANR que se produzcan después se desofuscarán. En la página Fallos y errores ANR de tu aplicación, puedes revisar los rastreos de la pila desofuscados de fallos y errores ANR concretos.

  1. Abre Play Console.
  2. Selecciona una aplicación.
  3. En el menú de la izquierda, selecciona Monitorizar y mejorar > Android vitals > Fallos y errores ANR.
  4. Selecciona un fallo.
  5. En la sección "Rastreos de pilas", verás los rastreos de pilas desofuscados y simbolizados.

Importante: Una vez que hayas subido un archivo de asignación correspondiente a una versión de tu aplicación, solo se desofuscarán los futuros fallos y errores ANR de esa versión de la aplicación. No se desofuscarán los fallos ni los errores ANR de una versión de la aplicación que se hayan producido antes de subir el archivo de asignación correspondiente.

Preguntas frecuentes

No quiero utilizar la desofuscación o la simbolización de Play Console. ¿Se puede hacer offline?

Play Console utiliza ndk-stack para simbolizar los rastreos de pilas de aplicaciones nativas. En el caso de los fallos de Java, Play Console utiliza ReTrace. Si decides no compartir tus archivos de desofuscación, puedes copiar las pilas de fallos ofuscados de Play Console y utilizar la herramienta offline adecuada para simbolizarlas. Sin embargo, este proceso se debe realizar manualmente por cada pila de fallos, por lo que es lento y requiere mucho tiempo. Si proporcionas tus archivos de desofuscación, Play Console se encargará de ello.

He subido el archivo de desofuscación o simbolización, pero los fallos y errores ANR siguen estando ofuscados. ¿Por qué pasa esto?

Una vez que hayas subido un archivo de asignación de ProGuard o un archivo de símbolos de depuración correspondiente a una versión de tu aplicación, solo se desofuscarán los fallos y los errores ANR que se produzcan después. Tendrás que esperar un tiempo a que los dispositivos de los usuarios notifiquen nuevos fallos y errores ANR para que estos aparezcan desofuscados en Play Console.

He subido el archivo de desofuscación o simbolización, pero los fallos y errores ANR solo están parcialmente desofuscados. ¿Por qué pasa esto?

Esto se debe a que has subido un archivo de desofuscación o simbolización incompleto. Debes incluir los archivos de simbolización de toda la aplicación, especialmente si utilizas un proceso de compilación complejo o de varias fases. Una de las causas más habituales de la desofuscación parcial es usar una biblioteca de terceros. En este caso, es posible que el proveedor de la biblioteca pueda proporcionarte los archivos de desofuscación.

Después de subir el archivo de desofuscación o simbolización, parece que hay menos fallos y errores ANR, pero más graves. ¿Por qué pasa esto?

Sin archivos de desofuscación, los mismos fallos o errores ANR que se produzcan en un dispositivo de 32 bits y de 64 bits, o en un dispositivo ARM e Intel, se mostrarán por separado. Al proporcionar archivos de desofuscación, podemos agrupar estos fallos para que puedas ver mejor qué fallos y errores ANR afectan más a tu aplicación.

¿Qué pasa si se me olvida subir el archivo?

Si se te olvida subir el archivo para una nueva versión de tu aplicación, los fallos y los errores ANR volverán a estar ofuscados. Para subir el archivo, sigue las instrucciones que se indican arriba. Una vez que hayas subido un archivo de asignación de ProGuard o un archivo de símbolos de depuración correspondiente a una versión de tu aplicación, solo se desofuscarán los fallos y los errores ANR que se produzcan después. Tendrás que esperar un tiempo a que los dispositivos de los usuarios notifiquen nuevos fallos y errores ANR para que estos aparezcan desofuscados en Play Console.

Para que no se te olvide subir el archivo, te recomendamos que cambies el proceso de compilación y uses app bundles con el complemento de Android para Gradle (versión 4.1 o posterior). En este caso, puedes incluir automáticamente el archivo de símbolos de depuración en el app bundle siguiendo las instrucciones que encontrarás en el sitio web para desarrolladores de Android.

¿Qué pasa si subo un archivo incorrecto?

Si subes un archivo incorrecto que no se corresponda con la versión de tu aplicación, los fallos y los errores ANR volverán a estar ofuscados. Para subir el archivo correcto, haz lo siguiente:

  1. Abre Play Console.
  2. Selecciona una aplicación.
  3. En el menú de la izquierda, selecciona Probar y publicar > Explorador de app bundles.
  4. Elige el artefacto pertinente usando el selector situado en la esquina superior derecha.
  5. Selecciona la pestaña Descargas y desplázate hacia abajo hasta la sección "Recursos".
  6. Haz clic en el icono de eliminar situado junto al archivo de desofuscación o de simbolización incorrecto.
  7. Una vez que se haya eliminado la versión incorrecta, haz clic en el icono de subida y sube el archivo correcto según la versión de tu aplicación.

Una vez que hayas subido el archivo correcto de asignación de ProGuard o el archivo correcto de símbolos de depuración correspondiente a una versión de tu aplicación, solo se desofuscarán los fallos y los errores ANR que se produzcan después. Tendrás que esperar un tiempo a que los dispositivos de los usuarios notifiquen nuevos fallos y errores ANR para que estos aparezcan desofuscados en Play Console.

Nota: Para evitar el riesgo de subir una versión incorrecta del archivo, te recomendamos que cambies el proceso de compilación y uses app bundles con el complemento de Android para Gradle (versión 4.1 o posterior). En este caso, puedes incluir automáticamente el archivo de símbolos de depuración en el app bundle siguiendo las instrucciones que encontrarás en el sitio web para desarrolladores de Android.

Actualmente, utilizo archivos APK. ¿Cómo puedo cambiar y usar app bundles? Mi aplicación tiene código nativo y código Java. ¿Puedo subir un archivo de simbolización nativo y un archivo de desofuscación de Java?

Sí.

¿Por qué en algunos errores ANR no aparece el rastreo de la pila?

A veces, el sistema detecta un error ANR, pero no puede obtener el rastreo de la pila. En este caso, se muestra el error ANR para darte más información sobre la estabilidad de tu aplicación, pero el rastreo de la pila no aparece. Los errores ANR sin rastreos de la pila se agrupan por tipo y actividad, así que revisar y corregir ANRs similares puede ayudar a reducir la cantidad de ANRs que no tienen rastreos de la pila.

¿Te ha resultado útil esta información?

¿Cómo podemos mejorar esta página?
Búsqueda
Borrar búsqueda
Cerrar búsqueda
Menú principal
6598631565523436626
true
Buscar en el Centro de ayuda
true
true
true
true
true
92637
false
false