Cómo incluir símbolos nativos en tu compilación de lanzamiento

De forma predeterminada, las bibliotecas de código nativo se quitan en las compilaciones de versión de tu app. Esta acción consiste en quitar la tabla de símbolos y la información de depuración que contienen las bibliotecas nativas que usa tu app. Quitar las bibliotecas de código nativo genera un ahorro significativo de tamaño. Sin embargo, es imposible diagnosticar fallas en Google Play Console debido a la falta de información (como nombres de clases y funciones). Para depurar fallas, debes incluir un archivo de símbolos de depuración con tu app en Play Console.

Cómo subir un archivo de símbolos

Google Play Console informa las fallas por error en código nativo en Android vitals. Con solo unos pasos, puedes generar y subir un archivo nativo de símbolos de depuración para tu app. Este archivo habilita seguimientos de pila de fallas simbólicas por error en código nativo (que incluyen nombres de clases y funciones), en Android vitals para que te ayuden a depurar tu app en producción. Estos pasos varían según la versión del complemento de Android para Gradle que uses en tu proyecto y si usas un Android App Bundle (recomendado) o un APK.

Versión del complemento de Gradle para Android: 4.1 o posterior

Si tu proyecto compila un Android App Bundle (AAB), puedes configurar tu compilación para que incluya automáticamente el archivo de símbolos de depuración nativos en el AAB, de modo que se suba a Play Console cuando publiques tu app. Para incluir este archivo en las compilaciones de lanzamiento, agrega lo siguiente al archivo build.gradle.kts de tu app:

android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }

Selecciona uno de los siguientes niveles de símbolos de depuración:

  • Usa SYMBOL_TABLE para obtener los nombres de las funciones en los seguimientos de pila simbólicos de Play Console. Este nivel admite tombstones.
  • Usa FULL para obtener los nombres de funciones, los archivos y los números de línea en los seguimientos de pila simbólicos de Play Console.

Si tu proyecto involucra la creación de un APK, usa el parámetro de configuración android.buildTypes.release.ndk.debugSymbolLevel que se mostró anteriormente para generar el archivo de símbolos de depuración nativos por separado. Sube manualmente el archivo de símbolos de depuración nativos a Google Play Console (el proceso es similar al de subir un archivo de asignación para desofuscar seguimientos de pila). Como parte del proceso de compilación, el complemento de Android para Gradle genera este archivo en la siguiente ubicación del proyecto:

app/build/outputs/native-debug-symbols/<var>variant-name</var>/native-debug-symbols.zip

Si tus dependencias contienen bibliotecas nativas, es probable que la información de depuración se quite para reducir el tamaño. Para verificar esto, ejecuta una compilación con el nivel de registro info y configura debugSymbolLevel = { SYMBOL_TABLE | FULL }. Luego, busca la siguiente línea en el resultado de la compilación:

Unable to extract native debug metadata from ... because the native debug metadata has already been stripped.

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

Como parte del proceso de compilación, el complemento de Android para Gradle conserva una copia de las bibliotecas sin extraer en un directorio de proyecto. Esta estructura de directorios es similar a la siguiente:

app/build/intermediates/cmake/universal/release/obj/
├── armeabi-v7a/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
├── arm64-v8a/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
├── x86/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
└── x86_64/
    ├── libgameengine.so
    ├── libothercode.so
    └── libvideocodec.so
  1. Comprime el contenido de este directorio:

    cd app/build/intermediates/cmake/universal/release/obj
    zip -r symbols.zip .
    
  2. De forma manual, sube el archivo symbols.zip a Google Play Console.