Premiers pas avec Firebase Crashlytics


Si votre application Android contient des bibliothèques natives, vous pouvez activer les traces de pile complètes et les rapports d'erreur détaillés pour votre code natif à partir de Firebase Crashlytics en apportant quelques petites modifications à la configuration de compilation de votre application.

Ce guide explique comment configurer les rapports d'erreur avec le SDK Firebase Crashlytics pour NDK.

Si vous souhaitez savoir comment commencer à utiliser Crashlytics dans vos projets Unity, consultez le guide de démarrage Unity.

Avant de commencer

  1. Si ce n'est pas déjà fait, ajoutez Firebase à votre projet Android. Si vous ne possédez pas d'application Android, vous pouvez télécharger un exemple d'application.

  2. Recommandé : pour obtenir automatiquement des journaux de navigation qui vous aident à comprendre les actions des utilisateurs ayant conduit à un plantage, une erreur non fatale ou un événement ANR, vous devez activer Google Analytics dans votre projet Firebase.

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

    • S'il s'agit d'un nouveau projet Firebase, activez Google Analytics pendant que vous le créez.

  3. Assurez-vous que votre application dispose des versions minimales requises suivantes :

    • Gradle 8.0
    • Plug-in Android Gradle 8.1.0
    • Plug-in Gradle des services Google 4.4.1

Étape 1 : Ajoutez le SDK Crashlytics pour NDK à votre application

Dans le fichier Gradle de votre module (au niveau de l'application) (généralement <project>/<app-module>/build.gradle.kts ou <project>/<app-module>/build.gradle), ajoutez la dépendance pour la bibliothèque NDK Crashlytics pour Android. Nous vous recommandons d'utiliser Firebase Android BoM pour contrôler le versionnage de la bibliothèque.

Pour une expérience optimale avec Crashlytics, nous vous recommandons d'activer Google Analytics dans votre projet Firebase et d'ajouter le SDK Firebase pour Google Analytics à votre application.

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:34.2.0"))

    // Add 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 la Firebase Android BoM, votre application utilisera toujours des versions compatibles des bibliothèques Firebase Android.

(Alternative)  Ajoutez les dépendances de la bibliothèque Firebase sans utiliser BoM.

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

Notez que si vous utilisez plusieurs bibliothèques Firebase dans votre application, nous vous recommandons vivement d'utiliser BoM pour gérer les versions des bibliothèques, ce qui garantit que toutes les versions sont compatibles.

dependencies {
    // Add 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:20.0.1")
    implementation("com.google.firebase:firebase-analytics:23.0.0")
}

Étape 2 : Ajoutez le plug-in Gradle Crashlytics à votre application

  1. Dans votre fichier Gradle au niveau de la racine (au niveau du projet) (<project>/build.gradle.kts ou <project>/build.gradle), ajoutez le plug-in Gradle Crashlytics au bloc plugins :

    Kotlin

    plugins {
        // Make sure that you have the AGP plugin 8.1+ dependency
        id("com.android.application") version "8.1.4" apply false
        // ...
    
        // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency
        id("com.google.gms.google-services") version "4.4.3" apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id("com.google.firebase.crashlytics") version "3.0.6" apply false
    }

    Groovy

    plugins {
        // Make sure that you have the AGP plugin 8.1+ dependency
        id 'com.android.application' version '8.1.4' apply false
        // ...
    
        // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency
        id 'com.google.gms.google-services' version '4.4.3' apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id 'com.google.firebase.crashlytics' version '3.0.6' apply false
    }
  2. Dans le fichier Gradle de votre module (au niveau de l'application) (généralement <project>/<app-module>/build.gradle.kts ou <project>/<app-module>/build.gradle), ajoutez le plug-in Gradle Crashlytics :

    Kotlin

    plugins {
      id("com.android.application")
      // ...
    
      // Make sure that you have the Google services Gradle plugin
      id("com.google.gms.google-services")
    
      // Add the Crashlytics Gradle plugin
      id("com.google.firebase.crashlytics")
    }

    Groovy

    plugins {
      id 'com.android.application'
      // ...
    
      // Make sure that you have the Google services Gradle plugin
      id 'com.google.gms.google-services'
    
      // Add the Crashlytics Gradle plugin
      id 'com.google.firebase.crashlytics'
    }

Étape 3 : Ajoutez l'extension Crashlytics à votre build

Dans le fichier Gradle de votre module (au niveau de l'application) (généralement <project>/<app-module>/build.gradle.kts ou <project>/<app-module>/build.gradle), configurez l'extension Crashlytics.

Kotlin

import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension

// ...

android {
  // ...
  buildTypes {
      getByName("release") {
          // Add this extension
          configure<CrashlyticsExtension> {
              // 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
          }
      }
  }
}

Groovy

// ...

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

Étape 4 : Configurez l'importation automatique des symboles natifs

Pour générer des traces de pile lisibles à partir des plantages NDK, Crashlytics doit connaître les symboles de vos binaires natifs. Le plug-in Gradle Crashlytics inclut la tâche uploadCrashlyticsSymbolFileBUILD_VARIANT pour automatiser ce processus.

  1. Pour accéder à la tâche d'importation automatique des symboles, assurez-vous que nativeSymbolUploadEnabled est défini sur true dans le fichier Gradle de votre module (au niveau de l'application).

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

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
  3. Le SDK Crashlytics pour NDK et le plug-in Gradle Crashlytics dépendent de la présence de l'ID de compilation 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 build est absent, ajoutez -Wl,--build-id aux indicateurs de votre système de compilation pour résoudre le problème.

Étape 5 : Forcez un plantage du test pour terminer la configuration

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

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

    Vous pouvez utiliser le code suivant dans le fichier MainActivity de votre application pour ajouter un bouton qui, lorsqu'il est enfoncé, provoque un plantage. Le bouton est intitulé "Test Crash".

    Kotlin

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

    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));
  2. Compilez et exécutez votre application.

  3. Forcez le plantage de test pour envoyer le premier rapport de plantage de votre application :

    1. Ouvrez votre application depuis votre appareil de test ou 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 qu'elle puisse envoyer le rapport d'erreur à Firebase.

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

    Si vous avez actualisé la console et que le plantage du test ne s'affiche toujours pas au bout de cinq minutes, activez la journalisation du débogage pour voir si votre application envoie des rapports de plantage.


Et voilà ! Crashlytics surveille désormais les plantages de votre application. Vous pouvez consulter et examiner les rapports et statistiques sur les plantages dans le tableau de bord Crashlytics.

Étapes suivantes

  • (Recommandé) Obtenez de l'aide pour déboguer les plantages causés par des erreurs de mémoire native en collectant des rapports GWP-ASan. Ces erreurs liées à la mémoire peuvent être associées à une corruption de la mémoire dans votre application, qui est la principale cause des failles de sécurité des applications. Pour profiter de cette fonctionnalité de débogage, assurez-vous que GWP-ASan est explicitement activé dans votre application et que celle-ci utilise la dernière version du SDK Crashlytics pour NDK (v18.3.6 ou Firebase BoM v31.3.0).

  • Personnalisez la configuration de vos rapports d'erreur en ajoutant des rapports d'activation, des journaux, des clés et le suivi des erreurs non fatales.

  • Intégrez Google Play pour pouvoir filtrer les rapports d'erreur de votre application Android par canal Google Play directement dans le tableau de bord Crashlytics. Cela vous permet de mieux cibler votre tableau de bord sur des versions spécifiques.

Dépannage

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



Autres options pour importer des symboles

Le workflow principal de cette page s'applique aux builds Gradle standards. Toutefois, certaines applications utilisent une configuration ou des outils différents (par exemple, un processus de compilation autre que Gradle). Dans ces situations, les options suivantes peuvent vous aider à importer des symboles.

Option : importer des symboles pour les modules de bibliothèque et les dépendances externes

Cette option peut être utile dans les situations suivantes :

  • Si vous utilisez un processus de compilation NDK personnalisé dans Gradle
  • Si vos bibliothèques natives sont intégrées à un module de bibliothèque/fonctionnalité ou fournies par un tiers
  • Si la tâche d'importation automatique des symboles échoue ou si vous constatez des plantages non symbolisés dans le tableau de bord

Option : Importez des symboles pour les builds non Gradle ou les bibliothèques natives non dépouillées inaccessibles.

Cette option peut être utile dans les situations suivantes :

  • Si vous utilisez un processus de compilation autre que Gradle

  • Si vos bibliothèques natives non supprimées vous sont fournies d'une manière qui les rend inaccessibles lors des compilations Gradle