Catch up on everthing we announced at this year's Firebase Summit. Learn more

Obtenez des rapports de plantage Android NDK

Si votre application Android contient des bibliothèques natives , vous pouvez activer les traces de pile complète et rapports d' erreur détaillés pour votre code natif de Firebase Crashlytics avec quelques petites mises à jour de la configuration de construction de votre application.

Ce guide explique comment configurer les rapports de plantage avec le SDK Firebase Crashlytics pour NDK.

Si vous cherchez comment commencer avec Crashlytics dans vos projets Unity, consultez l' unité Guide de démarrage .

Avant que tu commences

  1. Si vous avez pas déjà, ajoutez Firebase à votre projet Android. Si vous ne disposez pas d' une application Android, vous pouvez télécharger une application de l' échantillon .

  2. Recommandé: Pour obtenir des fonctionnalités comme les utilisateurs sans accident, les journaux panés et les alertes de vitesse, vous devez activer Google Analytics dans votre projet Firebase.

    • Si votre projet Firebase existant ne pas Google Analytics activé, vous pouvez activer Google Analytics à partir de l' onglet Intégrations de vos > Paramètres du projet dans la console Firebase.

    • Si vous créez un nouveau projet Firebase, activez Google Analytics pendant le workflow de création de projet.

Étape 1: Activer Crashlytics dans la console Firebase

  1. Accédez au tableau de bord Crashlytics dans la console Firebase.

  2. Assurez - vous que votre application est sélectionnée dans le menu déroulant à côté de Crashlytics en haut de la page.

  3. Cliquez sur Activer Crashlytics.

Étape 2: Ajouter le SDK Firebase Crashlytics pour NDK à votre application

Utilisation de la Firebase Android BoM , déclarer la dépendance de la bibliothèque Crashlytics NDK Android dans votre module (app-niveau) de fichier Gradle (généralement app/build.gradle ).

Pour une expérience optimale avec Crashlytics, nous vous recommandons de permettre à Google Analytics dans votre projet Firebase et en ajoutant le SDK Firebase Google Analytics à votre application.

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:29.0.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'
}

En utilisant le Firebase Android BoM , votre application utilise toujours des versions compatibles des bibliothèques Firebase Android.

(Alternative) déclarer des dépendances de bibliothèque firebase sans utiliser la nomenclature

Si vous choisissez de ne pas utiliser la nomenclature de Firebase, vous devez spécifier chaque version de la bibliothèque Firebase dans sa ligne de dépendance.

Notez que si vous utilisez plusieurs bibliothèques Firebase dans votre application, nous vous recommandons fortement d' utiliser la BoM pour gérer les versions bibliothèque, ce qui garantit que toutes les versions sont 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.4'
    implementation 'com.google.firebase:firebase-analytics:20.0.0'
}

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:29.0.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'
}

En utilisant le Firebase Android BoM , votre application utilise toujours des versions compatibles des bibliothèques Firebase Android.

(Alternative) déclarer des dépendances de bibliothèque firebase sans utiliser la nomenclature

Si vous choisissez de ne pas utiliser la nomenclature de Firebase, vous devez spécifier chaque version de la bibliothèque Firebase dans sa ligne de dépendance.

Notez que si vous utilisez plusieurs bibliothèques Firebase dans votre application, nous vous recommandons fortement d' utiliser la BoM pour gérer les versions bibliothèque, ce qui garantit que toutes les versions sont 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.4'
    implementation 'com.google.firebase:firebase-analytics-ktx:20.0.0'
}

Étape 3: Ajouter le plugin Firebase Crashlytics à votre application

  1. Dans votre niveau de projet build.gradle fichier, ajoutez le plugin Crashlytics Gradle en tant que dépendance 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.10'
    
            // Add the Crashlytics Gradle plugin
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.0'
        }
    }
    
    allprojects {
        repositories {
            // Check that you have Google's Maven repository (if not, add it).
            google()
        }
    }
  2. Dans votre niveau d'application build.gradle fichier, appliquez le plugin Crashlytics 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'
    

Étape 4: Ajoutez la firebaseCrashlytics extension à votre construction

Dans votre module (app-niveau) de fichier Gradle (généralement app/build.gradle ), ajoutez le firebaseCrashlytics l' extension.

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
          }
      }
  }
}

Requis pour targetSdkLevel 30 et ci - dessus: Vous devez désactiver Tagging pointeur dans votre application en ajoutant ce qui suit à votre AndroidManifest.xml :

<application android:allowNativeHeapPointerTagging="false">
...
</application>

Pour plus d' informations, consultez le soutien du développeur pour Tagged Pointeurs .

Étape 5: Mettre en place téléchargement automatique des symboles indigènes

Pour produire des traces de pile lisibles à partir des plantages de NDK, Crashlytics doit connaître les symboles de vos binaires natifs. Le plugin Crashlytics Gradle comprend la uploadCrashlyticsSymbolFile BUILD_VARIANT tâche d'automatiser ce processus.

  1. Pour que vous puissiez accéder à la tâche pour le téléchargement de symbole automatisé, assurez - vous que nativeSymbolUploadEnabled est réglé sur true dans votre module (niveau d'application) de fichier Gradle.

  2. Pour les noms de méthodes apparaissent dans vos traces de pile, vous devez appeler explicitement la uploadCrashlyticsSymbolFile BUILD_VARIANT tâche après chaque version de votre bibliothèque NDK. Par exemple:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. Le SDK Crashlytics pour NDK et le plugin Crashlytics Gradle dépendent de la présence de l'ID de build GNU dans les objets partagés natifs.

    Vous pouvez vérifier la présence de cet ID en exécutant readelf -n sur chaque binaire. Si l'ID de construction est absent, ajoutez -Wl,--build-id aux drapeaux de votre système de construction pour résoudre le problème.

Étape 6: Force un accident de test pour terminer l' installation

Pour terminer la configuration de Crashlytics et voir les données initiales dans le tableau de bord Crashlytics de la console Firebase, vous devez forcer un crash test.

  1. Ajoutez du code à votre application que vous pouvez utiliser pour forcer un crash de test.

    Vous pouvez utiliser le code suivant dans votre application MainActivity pour ajouter un bouton à votre application qui, lorsqu'il est pressé, provoque un accident. Le bouton est étiqueté "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))
    
  2. Créez et exécutez votre application.

  3. Forcez le test de plantage afin d'envoyer le premier rapport de plantage de votre application :

    1. Ouvrez votre application à partir de votre appareil de test ou de votre émulateur.

    2. Dans votre application, appuyez sur le bouton "Test Crash" que vous avez ajouté à l'aide du code ci-dessus.

    3. Après le plantage de votre application, redémarrez-la pour que votre application puisse envoyer le rapport de plantage à Firebase.

  4. Accédez au tableau de bord Crashlytics de la console Firebase pour voir votre crash test.

    Si vous avez rafraîchi la console et vous n'êtes toujours pas vu le crash test au bout de cinq minutes, activer la journalisation de débogage pour voir si votre application envoie des rapports d'erreur.


Et c'est tout! Crashlytics surveille désormais les plantages de votre application, et vous pouvez afficher et examiner les rapports de plantage et les statistiques dans le tableau de bord Crashlytics.



Options alternatives pour télécharger des symboles

Le flux de travail principal sur cette page ci-dessus s'applique aux versions standard de Gradle. Cependant, certaines applications utilisent une configuration ou un outillage différent (par exemple, un processus de génération autre que Gradle). Dans ces situations, les options suivantes peuvent être utiles pour télécharger avec succès des symboles.

Option: Télécharger des symboles pour les modules bibliothèque et dépendances externes

Cette option peut être utile dans les situations suivantes :

  • Si vous utilisez un processus de construction NDK personnalisé dans Gradle
  • Si vos bibliothèques natives sont construites dans un module de bibliothèque/fonctionnalité ou fournies par un tiers
  • Si la tâche de téléchargement de symbole automatique échoue ou que vous voyez des accidents unsymbolicated dans le tableau de bord

Option: Télécharger des symboles pour non-construit Gradle ou bibliothèques natives inaccessibles non dénudés

Cette option peut être utile dans les situations suivantes :

  • Si vous utilisez un processus de génération autre que Gradle

  • Si vos bibliothèques natives non supprimées vous sont fournies d'une manière qui ne sont pas accessibles pendant les builds Gradle



Dépannage

Si vous voyez les différentes traces de pile dans la console Firebase et dans le logcat, consultez le Guide de dépannage .

Prochaines étapes