Cette page fournit une aide au dépannage et des réponses aux questions fréquentes sur l'utilisation de Crashlytics. Si vous ne trouvez pas ce que vous cherchez ou si vous avez besoin d'aide supplémentaire, contactez l'assistance Firebase.
Dépannage général/Questions fréquentes
Différents formats (et parfois "variantes") pour certains problèmes dans le tableau Problèmes
Vous remarquerez peut-être deux formats différents pour les problèmes listés dans le tableau Problèmes de la console Firebase. Vous remarquerez peut-être également une fonctionnalité appelée "variantes" dans certains de vos problèmes. Voici pourquoi !
Début 2023, nous avons déployé un moteur d'analyse amélioré pour regrouper les événements, ainsi qu'une interface mise à jour et des fonctionnalités avancées pour les nouveaux problèmes (comme les variantes). Pour en savoir plus, consultez notre récent article de blog. Vous trouverez ci-dessous les points clés.
Crashlytics analyse tous les événements de votre application (comme les plantages, les erreurs non fatales et les ANR) et crée des groupes d'événements appelés problèmes. Tous les événements d'un problème ont un point de défaillance commun.
Pour regrouper les événements dans ces problèmes, le moteur d'analyse amélioré examine désormais de nombreux aspects de l'événement, y compris les frames de la trace de pile, le message d'exception, le code d'erreur et d'autres caractéristiques de plate-forme ou de type d'erreur.
Toutefois, au sein de ce groupe d'événements, les traces de pile menant à l'échec peuvent être différentes. Une autre trace de pile peut indiquer une autre cause première. Pour représenter cette différence potentielle au sein d'un problème, nous créons désormais des variantes au sein des problèmes. Chaque variante est un sous-groupe d'événements d'un problème ayant le même point de défaillance et une trace de pile similaire. Les variantes vous permettent de déboguer les traces de pile les plus courantes d'un problème et de déterminer si différentes causes sont à l'origine de l'échec.
Voici ce que vous constaterez avec ces améliorations :
Métadonnées repensées affichées dans la ligne du problème
Il est désormais plus facile de comprendre et de trier les problèmes dans votre application.Moins de problèmes en double
Un changement de numéro de ligne n'entraîne pas la création d'un nouveau problème.Débogage plus facile des problèmes complexes avec différentes causes
Utilisez des variantes pour déboguer les traces de pile les plus courantes d'un problème.Des alertes et des signaux plus utiles
Un nouveau problème correspond en fait à un nouveau bug.Recherche plus performante
Chaque problème contient davantage de métadonnées pouvant faire l'objet d'une recherche, comme le type d'exception et le nom du package.
Voici comment ces améliorations sont déployées :
Lorsque nous recevons de nouveaux événements de votre application, nous vérifions s'ils correspondent à un problème existant.
En l'absence de correspondance, nous appliquerons automatiquement notre algorithme de regroupement d'événements plus intelligent à l'événement et créerons un problème avec la nouvelle conception des métadonnées.
Il s'agit de la première mise à jour majeure que nous apportons au regroupement des événements. Si vous avez des commentaires ou si vous rencontrez des problèmes, n'hésitez pas à nous en faire part en envoyant un rapport .
Journaux de fil d'Ariane non visibles
Si vous ne voyez pas de journaux de fil d'Ariane, nous vous recommandons de vérifier la configuration de votre application pour Google Analytics. Assurez-vous de remplir les conditions suivantes :
Vous avez activé Google Analytics dans votre projet Firebase.
Vous avez activé le partage de données pour Google Analytics. En savoir plus sur ce paramètre dans Gérer vos paramètres de partage des données Analytics
Vous avez ajouté le SDK Firebase pour Google Analytics à votre application. Ce SDK doit être ajouté en plus du SDK Crashlytics.
Vous utilisez les dernières versions du SDK Firebase pour tous les produits que vous utilisez dans votre application.
Vérifiez en particulier que vous utilisez au minimum la version suivante du SDK Firebase pour Google Analytics :
Android : v17.2.3+ (BoM v24.7.1+) .
Je ne vois pas d'alertes de vitesse
Si vous ne voyez pas d'alertes de vélocité, assurez-vous d'utiliser les versions suivantes du SDK Crashlytics : SDK Crashlytics v18.6.0 ou version ultérieure (ou Firebase BoM v32.6.0 ou version ultérieure).
Vous ne voyez pas les métriques d'utilisation sans plantage (ou elles ne sont pas fiables)
Si vous ne voyez pas de métriques sans plantage (comme les utilisateurs et les sessions sans plantage) ou si les métriques ne sont pas fiables, vérifiez les points suivants :
Assurez-vous d'utiliser les versions suivantes du SDK Crashlytics : SDK Crashlytics v18.6.0+ (ou Firebase BoM v32.6.0+).
Assurez-vous que vos paramètres de collecte de données n'ont pas d'incidence sur la qualité de vos métriques sans plantage :
Si vous activez les rapports avec consentement en désactivant les rapports d'erreur automatiques, les informations sur les plantages ne peuvent être envoyées à Crashlytics que par les utilisateurs qui ont explicitement accepté la collecte de données. Par conséquent, la précision des métriques sans plantage sera affectée, car Crashlytics ne dispose que des informations sur les plantages de ces utilisateurs ayant activé le partage (et non de tous vos utilisateurs). Cela signifie que vos métriques d'utilisation sans plantage peuvent être moins fiables et moins représentatives de la stabilité globale de votre application.
Si vous avez désactivé la collecte automatique des données, vous pouvez utiliser
sendUnsentReportspour envoyer les rapports mis en cache sur l'appareil à Crashlytics. Cette méthode envoie les données crash à Crashlytics, mais pas les données sessions. Les graphiques de la console affichent donc des valeurs faibles ou nulles pour les métriques sans plantage.
Comment le nombre d'utilisateurs n'ayant pas subi de plantage est-il calculé ?
Consultez Comprendre les métriques d'utilisation sans plantage.
Pourquoi les erreurs ANR ne sont-elles signalées que pour Android 11 et versions ultérieures ?
Crashlytics est compatible avec le signalement des erreurs ANR pour les applications Android sur les appareils équipés d'Android 11 ou version ultérieure. L'API sous-jacente que nous utilisons pour collecter les ANR (getHistoricalProcessExitReasons) est plus fiable que les approches basées sur SIGQUIT ou le watchdog. Cette API n'est disponible que sur les appareils Android 11 et versions ultérieures.
Pourquoi certaines erreurs ANR ne sont-elles pas associées à des BuildId ?
Si certains de vos ANR ne comportent pas de BuildId, procédez comme suit :
Assurez-vous d'utiliser une version à jour du SDK Android Crashlytics et du plug-in Gradle Crashlytics.
Si vous ne voyez pas les
BuildIdpour Android 11 et certaines erreurs ANR Android 12, il est probable que vous utilisiez un SDK ou un plug-in Gradle obsolètes, ou les deux. Pour collecter correctement lesBuildIdpour ces ANR, vous devez utiliser les versions suivantes :- Crashlytics SDK Android v18.3.5+ (Firebase BoM v31.2.2+)
- Plug-in Gradle 2.9.4 ou version ultérieureCrashlytics
Vérifiez si vous utilisez un emplacement non standard pour vos bibliothèques partagées.
Si vous ne trouvez pas les
BuildIdpour les bibliothèques partagées de votre application, il est probable que vous n'utilisiez pas l'emplacement standard par défaut pour les bibliothèques partagées. Dans ce cas, il est possible que Crashlytics ne puisse pas localiser lesBuildIdassociés. Nous vous recommandons d'utiliser l'emplacement standard pour les bibliothèques partagées.Assurez-vous de ne pas supprimer les
BuildIdpendant le processus de compilation.Notez que les conseils de dépannage suivants s'appliquent à la fois aux ANR et aux plantages natifs.
Vérifiez si les
BuildIdexistent en exécutantreadelf -nsur vos binaires. Si lesBuildIdsont absents, ajoutez-Wl,--build-idaux indicateurs de votre système de compilation.Vérifiez que vous ne supprimez pas involontairement les
BuildIdafin de réduire la taille de votre fichier APK.Si vous conservez des versions dépouillées et non dépouillées d'une bibliothèque, veillez à pointer vers la bonne version dans votre code.
Différences entre les rapports ANR dans le tableau de bord Crashlytics et la Google Play Console
Il peut y avoir une différence entre le nombre d'ANR sur Google Play et sur Crashlytics. Cela est normal en raison de la différence dans le mécanisme de collecte et de création de rapports sur les données ANR. Crashlytics signale les ANR au prochain démarrage de l'application, tandis qu'Android Vitals envoie les données ANR après l'ANR.
De plus, Crashlytics n'affiche que les ANR qui se produisent sur les appareils exécutant Android 11 ou version ultérieure, contrairement à Google Play qui affiche les ANR des appareils pour lesquels les services Google Play et le consentement à la collecte de données sont acceptés.
Différences entre les traces de pile NDK dans le tableau de bord Crashlytics et logcat
Les chaînes d'outils LLVM et GNU ont des valeurs par défaut et des traitements distincts pour le segment en lecture seule des binaires de votre application, ce qui peut générer des traces de pile incohérentes dans la console Firebase. Pour atténuer ce problème, ajoutez les indicateurs d'éditeur de liens suivants à votre processus de compilation :
Si vous utilisez l'éditeur de liens
lldde la chaîne d'outils LLVM, ajoutez :-Wl,--no-rosegmentSi vous utilisez l'éditeur de liens
ld.goldde la chaîne d'outils GNU, ajoutez :-Wl,--rosegment
Si vous constatez toujours des incohérences dans la trace de pile (ou si aucun des indicateurs n'est pertinent pour votre chaîne d'outils), essayez plutôt d'ajouter les éléments suivants à votre processus de compilation :
-fno-omit-frame-pointerComment utiliser mon propre fichier binaire de générateur de fichiers de symboles Breakpad pour le NDK ?
Le plug-in Crashlytics regroupe un générateur de fichiers de symboles Breakpad personnalisés.
Si vous préférez utiliser votre propre binaire pour générer des fichiers de symboles Breakpad (par exemple, si vous préférez compiler tous les exécutables natifs de votre chaîne de compilation à partir de la source), utilisez la propriété d'extension symbolGeneratorBinary facultative pour spécifier le chemin d'accès à l'exécutable.
Vous pouvez spécifier le chemin d'accès au fichier binaire du générateur de fichiers de symboles Breakpad de deux manières :
Option 1 : Spécifier le chemin d'accès via l'extension
firebaseCrashlyticsdans votre fichierbuild.gradleAjoutez le code suivant à votre fichier
build.gradle.ktsau niveau de l'application :Plug-in Gradle v3.0.0 ou version ultérieure
android { buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true // Add these optional fields to specify the path to the executable symbolGeneratorType = "breakpad" breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } }
Versions antérieures du plug-in
android { // ... buildTypes { // ... release { // ... firebaseCrashlytics { // existing; required for either symbol file generator nativeSymbolUploadEnabled true // Add this optional new block to specify the path to the executable symbolGenerator { breakpad { binary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } } }
Option 2 : Spécifiez le chemin d'accès via une ligne de propriété dans votre fichier de propriétés Gradle.
Vous pouvez utiliser la propriété
com.google.firebase.crashlytics.breakpadBinarypour spécifier le chemin d'accès à l'exécutable.Vous pouvez mettre à jour manuellement votre fichier de propriétés Gradle ou le mettre à jour via la ligne de commande. Par exemple, pour spécifier le chemin d'accès via la ligne de commande, utilisez une commande comme celle-ci :
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.breakpadBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
Aucun plantage avec Dexguard
Si l'exception suivante s'affiche, cela signifie probablement que vous utilisez une version de DexGuard incompatible avec le SDK Firebase Crashlytics :
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
Cette exception ne plante pas votre application, mais l'empêche d'envoyer des rapports d'erreur. Pour résoudre ce problème, procédez comme suit :
Assurez-vous d'utiliser la dernière version 8.x de DexGuard. La dernière version contient les règles requises par le SDK Firebase Crashlytics.
Si vous ne souhaitez pas modifier votre version de DexGuard, essayez d'ajouter la ligne suivante à vos règles d'obscurcissement (dans votre fichier de configuration DexGuard) :
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
Pourquoi des plantages de fichiers .kt sont-ils signalés comme des problèmes .java ?
Lorsqu'une application utilise un obfuscateur qui n'expose pas l'extension de fichier, Crashlytics génère chaque problème avec une extension de fichier .java par défaut.
Pour que Crashlytics puisse générer des problèmes avec la bonne extension de fichier, assurez-vous que votre application utilise la configuration suivante :
- Utilise Android Gradle 4.2.0 ou version ultérieure
- Utilise R8 avec l'obscurcissement activé. Pour mettre à jour votre application vers R8, consultez cette documentation.
Notez qu'après la mise à jour vers la configuration décrite ci-dessus, vous verrez peut-être de nouveaux problèmes .kt qui sont des doublons de problèmes .java existants. Pour en savoir plus sur cette situation, consultez les questions fréquentes.
Pourquoi des problèmes .kt s'affichent-ils alors qu'il s'agit de doublons de problèmes .java existants ?
À partir de mi-décembre 2021, Crashlytics la compatibilité avec les applications utilisant Kotlin sera améliorée.
Jusqu'à récemment, les obfuscateurs disponibles n'exposaient pas l'extension de fichier. Par conséquent, Crashlytics générait chaque problème avec une extension de fichier .java par défaut.
Toutefois, à partir d'Android Gradle 4.2.0, R8 est compatible avec les extensions de fichier.
Grâce à cette mise à jour, Crashlytics peut désormais déterminer si chaque classe utilisée dans l'application est écrite en Kotlin et inclure le nom de fichier correct dans la signature du problème. Les plantages sont désormais correctement attribués aux fichiers .kt (le cas échéant) si votre application est configurée comme suit :
- Votre application utilise Android Gradle 4.2.0 ou version ultérieure.
- Votre application utilise R8 avec l'obscurcissement activé.
Étant donné que les nouveaux plantages incluent désormais la bonne extension de fichier dans la signature du problème, il est possible que de nouveaux problèmes .kt soient en fait des doublons de problèmes existants portant le libellé .java. Dans la console Firebase, nous essayons d'identifier les nouveaux problèmes .kt qui pourraient être des doublons de problèmes existants portant le libellé .java et de vous en informer.
Qui peut afficher, rédiger et supprimer des notes sur un problème ?
Les notes permettent aux membres du projet de commenter des problèmes spécifiques en posant des questions, en fournissant des informations sur l'état, etc.
Lorsqu'un membre du projet publie une note, l'adresse e-mail de son compte Google est indiquée. Cette adresse e-mail est visible, ainsi que la note, par tous les membres du projet ayant accès à la note.
Vous trouverez ci-dessous une description de l'accès requis pour afficher, écrire et supprimer des notes :
Les membres du projet disposant de l'un des rôles suivants peuvent afficher et supprimer les notes existantes, et en rédiger de nouvelles sur un problème.
Les membres du projet disposant de l'un des rôles suivants peuvent consulter les notes publiées sur un problème, mais ne peuvent pas en supprimer ni en rédiger.
- Lecteur de projet, Lecteur Firebase, Lecteur Quality, ou Lecteur Crashlytics
Intégrations
L'application utilise également le SDK Google Mobile Ads, mais ne rencontre aucun plantage.
Si votre projet utilise Crashlytics avec le SDK Google Mobile Ads, il est probable que les outils de signalement des plantages interfèrent lors de l'enregistrement des gestionnaires d'exceptions. Pour résoudre le problème, désactivez les rapports d'erreur dans le SDK Mobile Ads en appelant disableSDKCrashReporting.
Où se trouve mon ensemble de données BigQuery ?
Une fois que vous avez associé Crashlytics à BigQuery, les nouveaux ensembles de données que vous créez sont automatiquement situés aux États-Unis, quel que soit l'emplacement de votre projet Firebase.
Compatibilité avec les plates-formes
Crashlytics est-il compatible avec armeabi ?
Le NDK Firebase Crashlytics n'est pas compatible avec ARMv5 (armeabi). La compatibilité avec cette ABI a été supprimée dans NDK r17.
Problèmes régressifs
Qu'est-ce qu'un problème régressé ?
Un problème a régressé lorsque vous l'avez déjà fermé, mais qu'un nouveau rapport indique qu'il s'est reproduit.Crashlytics Crashlytics rouvre automatiquement ces problèmes de régression afin que vous puissiez les résoudre de manière appropriée pour votre application.
Voici un exemple de scénario qui explique comment Crashlytics catégorise un problème comme une régression :
- Pour la première fois, Crashlytics reçoit un rapport d'erreur concernant l'erreur "A". Crashlytics ouvre un problème correspondant à ce plantage (problème A).
- Vous corrigez rapidement ce bug, fermez le problème A, puis publiez une nouvelle version de votre application.
- Crashlytics reçoit un autre signalement concernant le problème A après que vous l'avez clôturé.
- Si le rapport provient d'une version de l'application que Crashlytics connaissait lorsque vous avez clôturé le problème (c'est-à-dire que la version avait envoyé un rapport d'erreur pour n'importe quelle erreur), Crashlytics ne considérera pas le problème comme une régression. Le problème restera clos.
- Si le rapport provient d'une version de l'application qui Crashlytics n'était pas au courant lorsque vous avez clôturé le problème (c'est-à-dire que la version n'avait jamais envoyé aucun rapport d'erreur pour aucun plantage), Crashlytics considère que le problème est en régression et le rouvrira.
Lorsqu'un problème régresse, nous envoyons une alerte de détection de régression et ajoutons un signal de régression au problème pour vous informer que Crashlytics l'a rouvert. Si vous ne souhaitez pas qu'un problème soit rouvert en raison de notre algorithme de régression, mettez-le en sourdine au lieu de le fermer.
Pourquoi vois-je des problèmes de régression pour les anciennes versions de l'application ?
Si un rapport provient d'une ancienne version de l'application qui n'a jamais envoyé de rapports d'erreur lorsque vous avez clôturé le problème, Crashlytics considère que le problème a régressé et le rouvre.
Cela peut se produire dans les cas suivants : vous avez corrigé un bug et publié une nouvelle version de votre application, mais certains utilisateurs utilisent encore des versions antérieures qui ne contiennent pas la correction du bug. Si, par hasard, l'une de ces versions antérieures n'a jamais envoyé de rapports d'erreur lorsque vous avez fermé le problème, et que ces utilisateurs commencent à rencontrer le bug, ces rapports d'erreur déclencheraient un problème de régression.
Si vous ne souhaitez pas qu'un problème soit rouvert en raison de notre algorithme de régression, "désactivez" le problème au lieu de le fermer.