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. Durch das Entfernen von nativen Codebibliotheken lässt sich die Größe erheblich reduzieren. Allerdings ist es dann nicht möglich, Abstürze in der Google Play Console zu diagnostizieren, da die Informationen (z. B. Klassen- und Funktionsnamen) fehlen. Um Abstürze zu debuggen, müssen Sie eine Debugging-Symboldatei in die Play Console hochladen.
Symboldatei hochladen
In der Google Play Console werden native Abstürze unter Android Leistung gemeldet. Mit wenigen Schritten können Sie eine native Debugging-Symboldatei für Ihre App generieren und hochladen. Diese Datei ermöglicht symbolische native Absturz-Stacktraces (mit Klassen- und Funktionsnamen) unter „Android-Leistung“, damit Sie Ihre App in der Produktion debuggen können. Die Schritte variieren je nach Version des Android-Gradle-Plug-ins, das in Ihrem Projekt verwendet wird, und je nachdem, ob Sie ein Android App Bundle (empfohlen) oder ein APK verwenden.
Android-Gradle-Plug-in ab Version 4.1
Wenn Ihr Projekt ein Android App Bundle (AAB) erstellt, können Sie Ihren Build so konfigurieren, dass die native Debugging-Symboldatei automatisch in das AAB aufgenommen wird. Sie wird dann in die Play Console hochgeladen, wenn Sie Ihre App veröffentlichen. Wenn Sie diese Datei in Release-Builds einbeziehen möchten, fügen Sie der Datei build.gradle.kts Ihrer App Folgendes hinzu:
android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }
Wählen Sie die Debugging-Symbolebene aus den folgenden Optionen aus:
- Verwenden Sie
SYMBOL_TABLE, um Funktionsnamen in den symbolischen Stacktraces der Play Console zu erhalten. Diese Ebene unterstützt Tombstones. - Verwenden Sie
FULL, um Funktionsnamen, Dateien und Zeilennummern in den symbolischen Stacktraces der Play Console zu erhalten.
Wenn Ihr Projekt ein APK erstellt, verwenden Sie die zuvor gezeigte Einstellung android.buildTypes.release.ndk.debugSymbolLevel, um die native Debugging-Symboldatei separat zu generieren. Laden Sie die native Debugging-Symboldatei manuell in die Google Play Console hoch. Der Vorgang ähnelt dem Hochladen einer Zuordnungsdatei zum Entfernen der Verschleierung 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 Log-Ebene 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 und 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. Die 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
Komprimieren Sie den Inhalt dieses Verzeichnisses:
cd app/build/intermediates/cmake/universal/release/obj zip -r symbols.zip .Laden Sie die Datei
symbols.zipmanuell in die Google Play Console hoch.