Obtén informes de fallas del NDK de Android

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 nuevo SDK de Firebase Crashlytics.

Antes de comenzar

Para comenzar, configura Crashlytics con el SDK de Firebase Crashlytics.

Paso 1: Actualiza la configuración de Gradle

En el build.gradle de nivel de app, agrega la dependencia del entorno de ejecución del NDK de Crashlytics:

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'

dependencies {
    // ...

    // Add the Crashlytics NDK dependency (if you have the
    // Firebase Crashlytics dependency, replace it).
    implementation 'com.google.firebase:firebase-crashlytics:17.1.1'
    implementation 'com.google.firebase:firebase-crashlytics-ndk:17.1.1'
}

// …
android {
    // ...
    buildTypes {
        release {
            // Add this extension
            firebaseCrashlytics {
                // Enable processing and uploading of native symbols to Crashlytics
                // 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 2: Habilita la carga 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. Nuestro complemento de Gradle incluye la tarea uploadCrashlyticsSymbolFileBUILD_VARIANT a fin de automatizar este proceso (para acceder a esta tarea, asegúrate de que nativeSymbolUploadEnabled esté configurado como true).

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

Paso 3 (opcional): Sube símbolos para dependencias externas

Nuestra tarea de carga de símbolos supone que compilas tus bibliotecas nativas como parte de la compilación de Gradle con herramientas de compilación de NDK estándar, como CMake. Si tienes bibliotecas nativas compiladas externamente o usas un proceso de compilación de NDK personalizado dentro de Gradle, es posible que debas especificar de forma explícita la ruta a tus bibliotecas eliminadas y no eliminadas. La extensión firebaseCrashlytics proporciona propiedades para realizar esta tarea: strippedNativeLibsDir y unstrippedNativeLibsDir.

// …
android {
    // ...
    buildTypes {
        release {
            firebaseCrashlytics {
                nativeSymbolUploadEnabled true
                strippedNativeLibsDir ‘path/to/stripped/parent/dir’
                unstrippedNativeLibsDir ‘path/to/unstripped/parent/dir’
            }
        }
    }
}

Nuestro complemento supone que las bibliotecas están ubicadas en subdirectorios específicos de la arquitectura dentro de los directorios especificados, y que los pares de bibliotecas eliminados y no eliminados correspondientes tienen rutas idénticas en ese directorio. Por ejemplo:

strippedNativeLibsDir/
 +- x86/
      |
      +- libfoo.so
      +- libbar.so
 +- arm64/
      |
      +- libfoo.so
      +- libbar.so

unstrippedNativeLibsDir/
 +- x86/
      |
      +- libfoo.so
      +- libbar.so
 +- arm64/
      |
      +- libfoo.so
      +- libbar.so

Si tu sistema de compilación no cumple con el esquema de estructura o nombre anterior, crea esta estructura manualmente en tu disco local antes de invocar la tarea uploadCrashlyticsSymbolFileBUILD_VARIANT.

Paso 4 (opcional): Personaliza los informes de fallas del NDK

De manera opcional, puedes incluir el encabezado crashlytics.h en tu código de C++ para agregar metadatos a los informes de fallas del NDK, como registros, ID de usuarios y claves personalizadas. crashlytics.h está disponible como una biblioteca C++ de solo encabezado en el repositorio de GitHub del SDK de Firebase Android. Lee los comentarios del archivo de encabezado para obtener instrucciones sobre el uso de las API de C++ del NDK.

Paso 5: Consulta tus informes de fallas

Verifica que Crashlytics informe adecuadamente las fallas del NDK. Para ello, compila tu app, sube los símbolos y fuerza una falla por error en código nativo. Deberás reiniciar la app después de la falla a fin de que Crashlytics envíe el informe. En pocos minutos, la falla debería aparecer en Firebase console.

Soluciona problemas