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_TABLEpara obtener los nombres de las funciones en los seguimientos de pila simbólicos de Play Console. Este nivel admite tombstones. - Usa
FULLpara 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
Comprime el contenido de este directorio:
cd app/build/intermediates/cmake/universal/release/obj zip -r symbols.zip .De forma manual, sube el archivo
symbols.zipa Google Play Console.