Native Symbole in den Release-Build einbinden

Standardmäßig werden native Codebibliotheken in Release-Builds Ihrer App entfernt. Dabei werden die Symboltabelle und die Debugging-Informationen aus allen nativen Bibliotheken entfernt, die von Ihrer App verwendet werden. Das Entfernen nativer Codebibliotheken führt zu einer erheblichen Verkleinerung der App. Allerdings ist es aufgrund der fehlenden Informationen (z. B. Klassen- und Funktionsnamen) nicht möglich, Abstürze in der Google Play Console zu diagnostizieren. Wenn Sie Abstürze debuggen möchten, müssen Sie eine Datei mit Debugging-Symbolen für Ihre App in der Play Console hochladen.

Symboldatei hochladen

In den Android Vitals-Berichten in der Google Play Console werden native Abstürze aufgeführt. Mit wenigen Schritten können Sie eine Datei mit nativen Debug-Symbolen für Ihre App generieren und hochladen. Diese Datei ermöglicht symbolisierte native Crash-Stacktraces (mit Klassen- und Funktionsnamen) in Android Vitals, damit Sie Ihre App in der Produktion debuggen können. Diese Schritte variieren je nach der Version des Android Gradle-Plug-ins, die in Ihrem Projekt verwendet wird, und danach, ob Sie ein Android App Bundle (empfohlen) oder ein APK verwenden.

Android-Gradle-Plug-in ab Version 4.1

Wenn Sie Ihr Projekt als Android App Bundle (AAB) erstellen, können Sie Ihren Build so konfigurieren, dass die Datei mit nativen Debugging-Symbolen automatisch in das AAB aufgenommen wird. Sie wird dann beim Veröffentlichen Ihrer App in die Play Console hochgeladen. Wenn Sie diese Datei in Release-Builds einfügen möchten, fügen Sie der build.gradle.kts-Datei Ihrer App Folgendes hinzu:

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

Wählen Sie die Debug-Symbol-Ebene aus:

  • Verwenden Sie SYMBOL_TABLE, um Funktionsnamen in den symbolisierten Stacktraces der Play Console abzurufen. Diese Ebene unterstützt Tombstones.
  • Verwenden Sie FULL, um Funktionsnamen, Dateien und Zeilennummern in den symbolisierten Stacktraces der Play Console abzurufen.

Wenn Sie Ihr Projekt als APK erstellen, verwenden Sie die oben gezeigte Einstellung android.buildTypes.release.ndk.debugSymbolLevel, um die Datei mit nativen Debugging-Symbolen separat zu generieren. Laden Sie die Datei mit Symbolen zum Debuggen von nativem Code manuell in die Google Play Console hoch. Das Verfahren ähnelt dem Hochladen einer Zuordnungsdatei zum Offenlegen von Stacktraces. Im Rahmen des Build-Prozesses gibt das Android-Gradle-Plug-in diese Datei am folgenden Projektspeicherort aus:

app/build/outputs/native-debug-symbols/<var>variant-name</var>/native-debug-symbols.zip

Wenn Ihre Abhängigkeiten native Bibliotheken enthalten, werden die Debugging-Informationen wahrscheinlich entfernt, um die Größe zu reduzieren. Sie können dies überprüfen, indem Sie einen Build mit der Protokollierungsebene info ausführen und debugSymbolLevel = { SYMBOL_TABLE | FULL } festlegen. Suchen Sie dann in der Build-Ausgabe nach der folgenden Zeile:

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

Android-Gradle-Plug-in in der Version 4.0 oder niedriger (und andere Build-Systeme)

Im Rahmen des Build-Prozesses speichert das Android-Gradle-Plug-in eine Kopie der Bibliotheken mit Debugging-Symbolen in einem Projektverzeichnis. Diese Verzeichnisstruktur sieht in etwa so aus:

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. Komprimieren Sie den Inhalt dieses Verzeichnisses:

    cd app/build/intermediates/cmake/universal/release/obj
    zip -r symbols.zip .
    
  2. Laden Sie die symbols.zip-Datei manuell in die Google Play Console hoch.