Si tu app para Android contiene bibliotecas nativas, puedes habilitar los seguimientos de pila completa y los informes de fallas detallados para tu código nativo desde Firebase Crashlytics con solo hacer unas pequeñas actualizaciones en la configuración de compilación de tu app.
En esta guía, se describe cómo configurar los informes de fallas con el SDK de Firebase Crashlytics para el NDK.
Si quieres saber cómo comenzar a usar Crashlytics en tus proyectos de Unity, consulta la guía de introducción de Unity.
Antes de comenzar
Si aún no lo has hecho, agrega Firebase a tu proyecto de Android. Si no tienes ninguna app para Android, puedes descargar una app de ejemplo.
Recomendación: Para obtener funciones como usuarios que no experimentan fallas, registros de rutas de navegación y alertas de velocidad, debes habilitar Google Analytics en tu proyecto de Firebase.
Si el proyecto de Firebase actual no tiene habilitado Google Analytics, puedes hacerlo en la pestaña Integraciones de tu
en Firebase console. > Configuración del proyecto Si quieres crear un nuevo proyecto de Firebase, habilita Google Analytics durante el flujo de trabajo de creación.
Paso 1: Agrega el SDK de Firebase Crashlytics para el NDK a tu app
Usa la BoM de Firebase para Android a fin de declarar la dependencia de la biblioteca de Android para el NDK de Crashlytics en el archivo Gradle (generalmenteapp/build.gradle
)
de tu módulo (nivel de app).
Para obtener una experiencia óptima con Crashlytics, recomendamos habilitar Google Analytics en tu proyecto de Firebase y agregar el SDK de Firebase para Google Analytics a la app.
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:30.3.0') // Declare the dependencies for the Crashlytics NDK and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-crashlytics-ndk' implementation 'com.google.firebase:firebase-analytics' }
Si usas la BoM de Firebase para Android, tu app siempre utilizará versiones compatibles de las bibliotecas de Firebase para Android.
Como alternativa, puedes declarar las dependencias de la biblioteca de Firebase sin usar la BoM.
Si eliges no usar la BoM de Firebase, debes especificar cada versión de la biblioteca de Firebase en su línea de dependencia.
Si usas varias bibliotecas de Firebase en tu app, es muy recomendable que utilices la BoM para administrar las versiones de las bibliotecas, lo que garantiza que todas las versiones sean compatibles.
dependencies { // Declare the dependencies for the Crashlytics NDK and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-crashlytics-ndk:18.2.11' implementation 'com.google.firebase:firebase-analytics:21.1.0' }
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:30.3.0') // Declare the dependencies for the Crashlytics NDK and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-crashlytics-ndk' implementation 'com.google.firebase:firebase-analytics-ktx' }
Si usas la BoM de Firebase para Android, tu app siempre utilizará versiones compatibles de las bibliotecas de Firebase para Android.
Como alternativa, puedes declarar las dependencias de la biblioteca de Firebase sin usar la BoM.
Si eliges no usar la BoM de Firebase, debes especificar cada versión de la biblioteca de Firebase en su línea de dependencia.
Si usas varias bibliotecas de Firebase en tu app, es muy recomendable que utilices la BoM para administrar las versiones de las bibliotecas, lo que garantiza que todas las versiones sean compatibles.
dependencies { // Declare the dependencies for the Crashlytics NDK and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-crashlytics-ndk:18.2.11' implementation 'com.google.firebase:firebase-analytics-ktx:21.1.0' }
Paso 2: Agrega el complemento de Firebase Crashlytics a tu app
En el archivo
build.gradle
de nivel de proyecto, agrega el complemento de Crashlytics para Gradle como dependencia de buildscript.buildscript { repositories { // Check that you have Google's Maven repository (if not, add it). google() } dependencies { // ... // Check that you have the Google services Gradle plugin v4.3.2 or later // (if not, add it). classpath 'com.google.gms:google-services:4.3.13' // Add the Crashlytics Gradle plugin classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1' } } allprojects { repositories { // Check that you have Google's Maven repository (if not, add it). google() } }
En tu archivo
build.gradle
de nivel de app, aplica el complemento de Crashlytics para Gradle:apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // Google services Gradle plugin // Apply the Crashlytics Gradle plugin apply plugin: 'com.google.firebase.crashlytics'
Paso 3: Agrega la extensión firebaseCrashlytics
a tu compilación
En el archivo Gradle (generalmente app/build.gradle
) del módulo (nivel de app),
agrega la extensión firebaseCrashlytics
.
Java
// ... android { // ... buildTypes { release { // Add this extension firebaseCrashlytics { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled true } } } }
Kotlin+KTX
// ... android { // ... buildTypes { release { // Add this extension firebaseCrashlytics { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled true } } } }
Paso 4: Configura la carga automática de símbolos nativos
Para producir seguimientos de pila legibles de las fallas del NDK, Crashlytics debe conocer
los símbolos de tus objetos binarios nativos. El complemento de Crashlytics para Gradle
incluye la tarea uploadCrashlyticsSymbolFileBUILD_VARIANT
a fin de automatizar el proceso.
A fin de que puedas acceder a la tarea para subir símbolos automáticamente, asegúrate de que
nativeSymbolUploadEnabled
esté configurado comotrue
en el archivo Gradle de tu módulo (nivel de app).Para que los nombres de los métodos aparezcan en los seguimientos de pila, debes invocar de manera explícita la tarea
uploadCrashlyticsSymbolFileBUILD_VARIANT
después de cada compilación de la biblioteca del NDK. Por ejemplo:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
El SDK de Crashlytics para el NDK y el complemento de Crashlytics para Gradle dependen de la presencia del ID de compilación de GNU dentro de los objetos compartidos nativos.
Puedes verificar la presencia de este ID ejecutando
en cada objeto binario. Si no aparece el ID de compilación, agregareadelf -n
a las marcas del sistema de compilación para solucionar el problema.-Wl,--build-id
Paso 5: Fuerza una falla de prueba para finalizar la configuración
Para finalizar la configuración de Crashlytics y ver los datos iniciales en el panel de Crashlytics de Firebase console, debes forzar una falla de prueba.
Agrega código a tu app para forzar una falla de prueba.
Puedes usar el siguiente código en la
MainActivity
de tu app para agregar un botón que, cuando se presione, genere una falla. El botón tiene la etiqueta “Test Crash”.Java
Button crashButton = new Button(this); crashButton.setText("Test Crash"); crashButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { throw new RuntimeException("Test Crash"); // Force a crash } }); addContentView(crashButton, new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
Kotlin+KTX
val crashButton = Button(this) crashButton.text = "Test Crash" crashButton.setOnClickListener { throw RuntimeException("Test Crash") // Force a crash } addContentView(crashButton, ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
Compila y ejecuta tu app.
Fuerza la falla de prueba para enviar el primer informe de fallas de la app, de la siguiente manera:
Abre la app desde tu emulador o dispositivo de prueba.
En tu app, presiona el botón “Test Crash” que agregaste con el código anterior.
Una vez que tu app falle, reiníciala para que pueda enviar el informe de fallas a Firebase.
Ve al panel de Crashlytics en Firebase console para ver la falla de prueba.
Si actualizaste la consola y sigues sin poder ver la falla de prueba después de cinco minutos, habilita el registro de depuración para confirmar si tu app está enviando informes de fallas.
Eso es todo. Crashlytics ahora supervisa la app para detectar fallas, y
puedes ver e investigar informes y estadísticas de fallas en el
panel de Crashlytics.
Alternativas para subir símbolos
El flujo de trabajo principal de esta página aplica a compilaciones estándar de Gradle. Sin embargo, algunas apps usan una configuración o herramientas diferentes (por ejemplo, un proceso de compilación distinto de Gradle). En estas situaciones, las siguientes opciones pueden ser útiles para subir símbolos correctamente.
Opción: Sube símbolos para módulos de biblioteca y dependencias externas
Esta opción puede ser útil en las siguientes situaciones:
- Si usas un proceso de compilación personalizado del NDK en Gradle.
- Si tus bibliotecas nativas se compilan en un módulo de biblioteca o de funciones o las proporciona un tercero.
- Si la tarea de carga de símbolos automática falla o ves fallas no simbolizadas en el panel.
Opción: Sube símbolos para compilaciones que no sean de Gradle o bibliotecas nativas inaccesibles no eliminadas
Esta opción puede ser útil en las siguientes situaciones:
Si usas un proceso de compilación diferente de Gradle.
Si se proporcionan tus bibliotecas nativas no eliminadas de alguna manera en la que no sean accesibles durante las compilaciones de Gradle.
Soluciona problemas
Si ves diferentes seguimientos de pila en Firebase console y en logcat, consulta la guía para solucionar problemas.
Próximos pasos
Agrega informes, registros y claves opcionales, así como seguimiento de errores recuperables para personalizar la configuración del informe de fallas.
Realiza integraciones en Google Play a fin de poder filtrar los informes de fallas de tu app para Android por segmentos de Google Play directamente en el panel de Crashlytics. Esto te permite enfocar mejor el panel en compilaciones específicas.