De forma predeterminada, las bibliotecas de código nativo se quitan en las compilaciones de lanzamiento de tu app. Esta eliminación consiste en quitar la tabla de símbolos y la información de depuración que se incluye en las bibliotecas nativas que usa tu app. Quitar las bibliotecas de código nativo genera un ahorro de tamaño significativo. 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.
Sube un archivo de símbolos
Google Play Console informa las fallas por error en código nativo en Android vitals. En unos pocos pasos, puedes generar y subir un archivo de símbolos de depuración nativo para tu app. Este archivo habilita los seguimientos de pila de fallas por error en código nativo simbolizados (que incluyen nombres de clases y funciones) en Android vitals para ayudarte a depurar tu app en producción. Estos pasos varían según la versión del complemento de Android para Gradle que se use 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 la 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 la 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 nombres de funciones en los seguimientos de pila con símbolos de Play Console. Este nivel admite tombstones. - Usa
FULLpara obtener nombres de funciones, archivos y números de línea en los seguimientos de pila con símbolos de Play Console.
Si tu proyecto compila un APK, usa el parámetro de configuración android.buildTypes.release.ndk.debugSymbolLevel que se mostró antes 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 se quite la información de depuración 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 directorio 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 .Sube manualmente el archivo
symbols.zipa Google Play Console.