Désobscurcir ou décoder les traces de la pile de plantage

Les plantages et les erreurs ANR sur Android génèrent une trace de la pile, c'est-à-dire un instantané de la séquence des fonctions imbriquées appelées dans votre programme jusqu'au moment du plantage. Ces instantanés peuvent vous aider à identifier et à résoudre les problèmes dans la source.

Si votre application ou votre jeu ont été développés en Java et que vous utilisez ProGuard pour optimiser et obscurcir votre application, vous pouvez importer dans la Play Console un fichier de mappage ProGuard pour chaque version de votre application. Si votre jeu ou votre application ont été développés en code natif (en C++, par exemple), vous pouvez importer dans la Play Console un fichier de décodage pour chaque version de votre application. Cette opération facilite l'analyse ainsi que la résolution des plantages et des erreurs ANR.

Important : Pour désobscurcir des applications compilées en Java, vous ne pouvez utiliser que des fichiers de mappage compatibles avec ReTrace. Il s'agit du même format que celui utilisé par ProGuard ou R8.

Étape 1 : Générez un fichier pour désobscurcir ou décoder les plantages et les erreurs ANR

Pour désobscurcir ou décoder les plantages et les erreurs ANR d'une version de votre application, générez d'abord les fichiers requis pour cette même version. Vous devez créer et importer un fichier pour chaque nouvelle version de votre application afin que le désobscurcissement ou le décodage fonctionne.

Java : générer un fichier de mappage ProGuard

Pour désobscurcir les traces de la pile Java, vous devez d'abord générer un fichier de mappage ProGuard. Pour savoir comment procéder, accédez au site Google Developers.

Code natif : générer un fichier de symboles de débogage

Plug-in Android Gradle 4.1 ou version ultérieure

Si votre projet compile un Android App Bundle, vous pouvez y inclure automatiquement le fichier de décodage. Pour inclure ce fichier, ajoutez les éléments suivants au fichier build.gradle de votre application :

  • android.defaultConfig.ndk.debugSymbolLevel = 'FULL'

Remarque : Le fichier de décodage ne doit pas dépasser 800 Mo. Si l'empreinte de vos symboles de débogage est trop importante, utilisez SYMBOL_TABLE au lieu de FULL pour réduire la taille du fichier.

Si votre projet crée un fichier APK, utilisez le paramètre de compilation build.gradle ci-dessus pour générer le fichier de symboles de débogage séparément. Importez manuellement le fichier de symboles de débogage dans la Google Play Console, comme décrit ci-dessous à l'Étape 2 : Importez un fichier de désobscurcissement ou de décodage. Dans le cadre du processus de compilation, le plug-in Android Gradle génère ce fichier à l'emplacement de projet suivant :

  • app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip

Plug-in Android Gradle 4.0 ou version antérieure (et autres systèmes de compilation)

Dans le cadre du processus de création d'un app bundle ou d'un APK, le plug-in Android Gradle conserve une copie des bibliothèques intactes dans un répertoire de projet. La structure de ce répertoire est semblable à celle-ci :

app/build/intermediates/cmake/universal/release/obj

├── armeabi-v7a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── arm64-v8a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── x86/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

└── x86_64/

    ├── libgameengine.so

    ├── libothercode.so

    └── libvideocodec.so

Remarque : Si vous utilisez un autre système de compilation, vous pouvez le modifier pour stocker les bibliothèques non nues dans un répertoire avec la structure requise ci-dessus.

  1. Compressez le contenu de ce répertoire :
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. Importez manuellement le fichier symbols.zip dans la Play Console, comme décrit ci-dessous à l'Étape 2 : Importez un fichier de désobscurcissement ou de décodage.

Le fichier de décodage ne doit pas dépasser 800 Mo. Si votre fichier est trop volumineux, cela signifie probablement que vos fichiers .so contiennent une table de symboles (noms de fonction), ainsi que des informations de débogage DWARF (noms de fichiers et lignes de code). Ces données ne sont pas nécessaires pour décoder votre code et peuvent être supprimées en exécutant la commande suivante :

  • $OBJCOPY --strip-debug lib.so lib.so.sym

Remarque : $OBJCOPY pointe vers la version spécifique de l'ABI que vous supprimez, par exemple : ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy.

Étape 2 : Importez un fichier de désobscurcissement ou de décodage

Pour désobscurcir ou décoder les plantages et les erreurs ANR d'une version de votre application, vous devez importer les fichiers de désobscurcissement ou de décodage pour chaque version de votre application.

Important : Seuls les développeurs qui se servent de fichiers APK doivent effectuer cette étape. Si vous utilisez un Android App Bundle et le plug-in Android Gradle 4.1 ou version ultérieure, vous n'avez rien à faire. Nous récupérons automatiquement le fichier de désobscurcissement du bundle et vous pouvez passer à l'Étape 3 : Affichez les traces de la pile de plantage désobscurcies. Pour en savoir plus sur les app bundles, consultez le site pour les développeurs Android.

Importer des fichiers à l'aide de la Play Console

Pour importer un fichier de désobscurcissement ou de décodage, procédez comme suit :

  1. Ouvrez la Play Console.
  2. Sélectionnez une application.
  3. Dans le menu de gauche, sélectionnez Version > Explorateur d'app bundle.
  4. À l'aide de l'outil de sélection situé dans l'angle supérieur droit, choisissez l'artefact approprié.
  5. Sélectionnez l'onglet Téléchargements, puis faites défiler la page jusqu'à la section "Éléments".
  6. Cliquez sur la flèche d'importation du fichier de mappage ou sur les symboles de débogage pour importer le fichier de désobscurcissement ou de décodage correspondant à la version de votre application.
Importer des fichiers via l'API Google Play Developer

Pour importer des fichiers via l'API Google Play Developer, accédez au site Google Developers.

Étape 3 : Affichez les traces de la pile de plantage désobscurcies

Une fois que vous avez importé un fichier de mappage ProGuard ou un fichier de symboles de débogage pour une version de votre application, les plantages et les erreurs ANR qui se produisent seront désobscurcis. Vous pouvez examiner les traces de la pile désobscurcies pour les différents plantages et erreurs ANR sur la page Plantages et ANR de votre application.

  1. Ouvrez la Play Console.
  2. Sélectionnez une application.
  3. Dans le menu de gauche, sélectionnez Qualité > Android Vitals > Plantages et ANR.
  4. Sélectionnez un plantage.
  5. Dans la section "Traces de la pile", vous pouvez voir les traces de la pile désobscurcies et décodées.

Important : Une fois que vous avez importé un fichier de mappage pour une version de votre application, seuls les plantages et les erreurs ANR ultérieurs de cette version seront désobscurcis. Les plantages et les erreurs ANR d'une version de votre application qui se produisent avant l'importation du fichier de mappage correspondant ne seront pas désobscurcis.

Questions fréquentes

Je ne souhaite pas utiliser le désobscurcissement ni le décodage de la Play Console. Puis-je effectuer cette opération hors connexion ?

La Play Console utilise ndk-stack pour décoder les traces de la pile pour les applications natives et ReTrace pour les plantages Java. Si vous choisissez de ne pas partager vos fichiers de désobscurcissement, vous pouvez copier les piles de plantage obscurcies depuis la Play Console et utiliser hors connexion l'outil approprié pour les décoder. Toutefois, vous devez effectuer ce processus manuellement pour chaque pile de plantage, ce qui demande beaucoup de temps. Si vous fournissez vos fichiers de désobscurcissement, la Play Console se charge de cette opération.

J'ai importé le fichier de désobscurcissement/décodage. Pourquoi mes plantages et mes erreurs ANR sont-ils toujours obscurcis ?

Une fois que vous avez importé un fichier de mappage ProGuard ou un fichier de décodage pour une version de votre application, seuls les plantages et les erreurs ANR qui se produisent après seront désobscurcis. Vous devrez patienter le temps que les nouveaux plantages et erreurs ANR soient signalés par les appareils des utilisateurs avant de voir les plantages et les erreurs ANR désobscurcis dans la Play Console.

J'ai importé le fichier de désobscurcissement/décodage. Pourquoi mes plantages et mes erreurs ANR ne sont-ils pas entièrement désobscurcis ?

Ce problème résulte de l'importation d'un fichier de désobscurcissement/décodage incomplet. Veillez à inclure les fichiers de décodage pour l'ensemble de votre application, en particulier si vous utilisez un processus de compilation complexe ou en plusieurs étapes. L'utilisation d'une bibliothèque tierce est l'une des raisons les plus courantes du désobscurcissement partiel. Dans ce cas, vous pouvez obtenir les fichiers de désobscurcissement auprès du fournisseur de la bibliothèque.

J'ai importé le fichier de désobscurcissement/décodage. Pourquoi les plantages et les erreurs ANR semblent-ils moins nombreux, mais plus graves ?

Sans fichiers de désobscurcissement, le même plantage ou la même erreur ANR sur un appareil 32 bits et 64 bits, ou un ARM et un appareil Intel seront affichés séparément. Si vous fournissez des fichiers de désobscurcissement, nous pouvons regrouper ces plantages, ce qui vous donne une meilleure idée des plantages et des erreurs ANR ayant le plus de conséquences pour votre application.

Que se passe-t-il si j'oublie d'importer le fichier ?

Si vous oubliez d'importer le fichier pour une nouvelle version de votre application, les plantages et les erreurs ANR seront à nouveau obscurcis. Suivez les instructions ci-dessus pour l'importer dès maintenant. Une fois que vous avez importé un fichier de mappage ProGuard ou un fichier de symboles de débogage pour une version de votre application, seuls les plantages et les erreurs ANR qui se produisent après seront désobscurcis. Vous devrez patienter le temps que les nouveaux plantages et erreurs ANR soient signalés par les appareils des utilisateurs avant de voir les plantages et les erreurs ANR désobscurcis dans la Play Console.

Pour éviter d'oublier d'importer le fichier, envisagez de modifier votre processus de compilation afin d'utiliser des app bundles avec le plug-in Android Gradle 4.1 ou version ultérieure. Dans ce cas, vous pouvez inclure automatiquement le fichier de symboles de débogage dans l'app bundle en suivant les instructions du site pour les développeurs Android.

Que se passe-t-il si j'importe le mauvais fichier ?

Si vous importez le mauvais fichier pour une nouvelle version de votre application, les plantages et les erreurs ANR seront à nouveau obscurcis. Pour importer une version corrigée, procédez comme suit :

  1. Ouvrez la Play Console.
  2. Sélectionnez une application.
  3. Dans le menu de gauche, sélectionnez Version > Explorateur d'app bundle.
  4. À l'aide de l'outil de sélection situé dans l'angle supérieur droit, choisissez l'artefact approprié.
  5. Sélectionnez l'onglet Téléchargements, puis faites défiler la page jusqu'à la section "Éléments".
  6. Cliquez sur l'icône Supprimer à côté du mauvais fichier de désobscurcissement ou de décodage.
  7. Une fois la version incorrecte supprimée, cliquez sur l'icône d'importation, puis importez le fichier correspondant à la version de votre application.

Une fois que vous avez importé le bon fichier de mappage ProGuard ou de symboles de débogage pour une version de votre application, seuls les plantages et les erreurs ANR qui se produisent après seront désobscurcis. Vous devrez patienter le temps que les nouveaux plantages et erreurs ANR soient signalés par les appareils des utilisateurs avant de voir les plantages et les erreurs ANR désobscurcis dans la Play Console.

Astuce : Pour éviter d'importer le mauvais fichier, envisagez de modifier votre processus de compilation afin d'utiliser des app bundles avec le plug-in Android Gradle 4.1 ou version ultérieure. Dans ce cas, vous pouvez inclure automatiquement le fichier de symboles de débogage dans l'app bundle en suivant les instructions du site pour les développeurs Android.

J'utilise actuellement des fichiers APK. Comment passer aux app bundles ?

Pour commencer, consultez le site pour les développeurs Android.

Mon application contient à la fois du code natif et du code Java. Puis-je importer un fichier de décodage natif et un fichier de désobscurcissement Java ?

Oui.

Pourquoi certaines erreurs ANR ne sont-elles pas associées à une trace de la pile ?

Il arrive que le système rencontre une erreur ANR, mais ne parvienne pas à recueillir la trace de la pile. Dans ce cas, l'erreur ANR s'affiche pour vous donner plus d'informations sur la stabilité de votre application, mais vous ne pouvez pas consulter la trace de la pile. Les erreurs ANR sans trace de pile étant regroupées par type et activité, examiner et corriger les ANR similaires peut contribuer à réduire le nombre d'ANR sans trace de pile.

Ces informations vous-ont elles été utiles ?

Comment pouvons-nous l'améliorer ?

Vous avez encore besoin d'aide ?

Essayez les solutions ci-dessous :

Recherche
Effacer la recherche
Fermer le champ de recherche
Applications Google
Menu principal