Inclure des symboles natifs dans votre build de version

Par défaut, les bibliothèques de code natif sont supprimées dans les versions Release de votre application. Cette suppression consiste à supprimer la table des symboles et les informations de débogage contenues dans les bibliothèques natives utilisées par votre application. La suppression des bibliothèques de code natif permet de réduire considérablement la taille de l'application. Toutefois, il est impossible de diagnostiquer les plantages dans la Google Play Console en raison des informations manquantes (telles que les noms de classes et de fonctions). Pour déboguer les plantages, vous devez inclure un fichier de symboles de débogage avec votre application dans la Play Console.

Importer un fichier de symboles

La Google Play Console signale les plantages natifs sous Android Vitals. Il suffit de quelques étapes pour générer et importer un fichier de symboles de débogage natifs pour votre application. Ce fichier active des traces de pile de plantage natif décodées (contenant les noms des classes et des fonctions) dans Android Vitals pour vous aider à déboguer votre application en production. Ces étapes varient en fonction de la version du plug-in Android Gradle utilisée dans votre projet et selon que vous utilisez un Android App Bundle (recommandé) ou un APK.

Plug-in Android Gradle 4.1 ou version ultérieure

Si votre projet compile un Android App Bundle (AAB), vous pouvez configurer votre compilation pour inclure automatiquement le fichier de symboles de débogage natif dans l'AAB. Il sera ainsi importé dans la Play Console lorsque vous publierez votre application. Pour inclure ce fichier dans les versions de publication, ajoutez les éléments suivants au fichier build.gradle.kts de votre application :

android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }

Sélectionnez l'un des niveaux de décodage suivants :

  • Utilisez SYMBOL_TABLE pour obtenir les noms des fonctions dans les traces de pile décodées de la Play Console. Ce niveau prend en charge les Tombstones.
  • Utilisez FULL pour obtenir les noms des fonctions, les fichiers et les numéros de ligne dans les traces de pile décodées de la Play Console.

Si votre projet compile un APK, utilisez le paramètre android.buildTypes.release.ndk.debugSymbolLevel présenté précédemment pour générer séparément le fichier de symboles de débogage natif. Importez manuellement le fichier de symboles de débogage natif dans la Google Play Console (la procédure est semblable à l'importation d'un fichier de mappage pour désobscurcir les traces de la pile). 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/<var>variant-name</var>/native-debug-symbols.zip

Si vos dépendances contiennent des bibliothèques natives, les informations de débogage sont probablement supprimées pour réduire la taille. Vous pouvez le vérifier en exécutant une compilation avec le niveau de journalisation info et en définissant debugSymbolLevel = { SYMBOL_TABLE | FULL }. Recherchez ensuite la ligne suivante dans le résultat de la compilation :

Unable to extract native debug metadata from ... because the native debug metadata has already been stripped.

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

Dans le cadre du processus de compilation, le plug-in Android Gradle conserve une copie des bibliothèques intactes dans un répertoire de projet. Cette structure de répertoire est semblable à ceci :

app/build/intermediates/cmake/universal/release/obj/
├── armeabi-v7a/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
├── arm64-v8a/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
├── x86/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
└── x86_64/
    ├── libgameengine.so
    ├── libothercode.so
    └── libvideocodec.so
  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 Google Play Console.