De forma predeterminada, las bibliotecas de código nativo se extraen en las compilaciones de actualización de tu app. Esta extracción consiste en quitar la tabla de símbolos y la información de depuración de las bibliotecas nativas que usa tu app. La extracción de 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 los 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 Android para Gradle: 4.1 o posterior
Si tu proyecto involucra la compilación de un Android App Bundle (AAB), puedes configurar tu compilación para incluir automáticamente el archivo nativo de símbolos de depuración en el AAB, de modo que se suba a Play Console cuando publiques tu app. Para incluir este archivo en las compilaciones de actualización, 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 el elemento
SYMBOL_TABLEpara obtener los nombres de las funciones en los seguimientos de pila simbólicos de Play Console. Este nivel es compatible con tombstones. - Usa el objeto
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 la configuración android.buildTypes.release.ndk.debugSymbolLevel anterior para generar el archivo nativo de símbolos de depuración por separado. De forma manual, sube el archivo nativo
de símbolos de depuración
a Google Play Console (el proceso es similar a subir un archivo de asignación
para deofuscar 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 se extraiga la información de depuración para reducir el tamaño. Para verificarlo, 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 Android para Gradle 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.