Abstürze und ANRs unter Android generieren einen Stacktrace. Das ist ein Snapshot der Reihenfolge der verschachtelten Funktionen, die in Ihrem Programm bis zum Absturz aufgerufen wurden. Mit diesen Snapshots können Sie Probleme in der Quelle identifizieren und beheben.
Wenn Ihre App oder Ihr Spiel mit Java entwickelt wurde und Sie Ihre App mit ProGuard optimieren und verschleiern, können Sie für jede Version Ihrer App in der Play Console eine ProGuard-Zuordnungsdatei hochladen. Wenn Ihre App oder Ihr Spiel mit nativem Code wie C++ entwickelt wurde, können Sie in der Play Console für jede App-Version eine Debugging-Symboldatei hochladen. Dadurch lassen sich Abstürze und ANRs leichter analysieren und beheben.
Wichtig: Zur Offenlegung von in Java kompilierten Apps werden nur mit ReTrace kompatible Zuordnungsdateien unterstützt. Das ist dasselbe Format, das auch von ProGuard oder R8 verwendet wird.
Schritt 1: Offenlegungs- oder Symbolication-Datei generieren
Zur Offenlegung oder Symbolication der Abstürze und ANRs für eine Version Ihrer App müssen Sie zuerst die erforderlichen Dateien für diese Version der App generieren. Damit die Offenlegung oder Symbolication funktioniert, ist für jede neue Version Ihrer App eine eigene Datei zu generieren und hochzuladen.
Java: ProGuard-Zuordnungsdatei generierenZur Offenlegung von Java-Stacktraces müssen Sie zuerst eine ProGuard-Zuordnungsdatei generieren. Weitere Informationen finden Sie auf der Google Developers-Website.
Android-Gradle-Plug-in ab Version 4.1
Wenn Sie Ihr Projekt als Android App Bundle erstellen, können Sie die Debugging-Symboldatei automatisch darin aufnehmen lassen. Dazu fügen Sie der Datei build.gradle
Ihrer App Folgendes hinzu:
android.defaultConfig.ndk.debugSymbolLevel = 'FULL'
Hinweis: Die Größe der Debugging-Symboldatei darf maximal 800 MB betragen. Wenn die Symbole zum Debuggen zu groß sind, verwenden Sie SYMBOL_TABLE
anstelle von FULL
, um die Dateigröße zu verringern.
Wenn Sie Ihr Projekt als Android App Bundle erstellen, verwenden Sie die obige Build-Einstellung „build.gradle“, um die Debugging-Symboldatei separat zu generieren. Laden Sie die Debugging-Symboldatei manuell in die Google Play Console hoch, wie in Schritt 2: Offenlegungs- oder Symbolication-Datei hochladen beschrieben. Im Rahmen des Build-Prozesses gibt das Android-Gradle-Plug-in diese Datei am folgenden Projektspeicherort aus:
app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip
Android-Gradle-Plug-in in der Version 4.0 und niedriger (und andere Build-Systeme)
Im Rahmen des Build-Prozesses für ein App Bundle oder APK speichert das Android-Gradle-Plug-in eine Kopie der Bibliotheken mit Debugging-Symbolen in einem Projektverzeichnis. Die Struktur dieses Verzeichnisses sieht ungefähr so aus:
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
Hinweis: Wenn Sie ein anderes Build-System verwenden, können Sie es so ändern, dass Bibliotheken mit Debugging-Symbolen zwingend in einem Verzeichnis mit der oben genannten Struktur gespeichert werden.
- Komprimieren Sie den Inhalt dieses Verzeichnisses:
$ cd app/build/intermediates/cmake/universal/release/obj
$ zip -r symbols.zip .
- Laden Sie die Datei „symbols.zip“ manuell in die Play Console hoch, wie in Schritt 2: Offenlegungs- oder Symbolication-Datei hochladen beschrieben.
Die Debugging-Symboldatei darf nicht größer als 800 MB sein. Wenn Ihre Datei zu groß ist, liegt das wahrscheinlich daran, dass Ihre .so-Dateien eine Symboltabelle (Funktionsnamen) und zusätzlich DWARF-Informationen zur Fehlerbehebung (Dateinamen und Codezeilen) enthalten. Diese sind für die Symbolication des Codes nicht erforderlich und können mit dem folgenden Befehl entfernt werden:
$OBJCOPY --strip-debug lib.so lib.so.sym
Hinweis: $OBJCOPY
verweist auf die spezifische Version für das ABI, das Sie entfernen, z. B. ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy
Schritt 2: Offenlegungs- oder Symbolication-Datei hochladen
Für die Offenlegung oder Symbolication der Abstürze und ANRs für eine Version Ihrer App müssen Sie zuerst die Offenlegungs- oder Symbolication-Dateien für die einzelnen Versionen der App hochladen.
Wichtig: Dieser Schritt ist nur erforderlich, wenn Sie APKs verwenden. Wenn Sie ein App-Bundle und ein Android-Gradle-Plug-in in der Version 4.1 oder höher verwenden, müssen Sie nichts weiter tun. Die Offenlegungsdatei wird automatisch aus dem Bundle abgerufen und Sie können mit Schritt 3: Offengelegte Absturz-Stacktraces ansehen fortfahren. Weitere Informationen zu App Bundles finden Sie auf der Website für Android-Entwickler.
Dateien über die Play Console hochladenSo laden Sie eine Offenlegungs- oder Symbolication-Datei hoch:
- Öffnen Sie die Play Console.
- Wählen Sie eine App aus.
- Wählen Sie im Menü auf der linken Seite
Testen und veröffentlichen
> App Bundle Explorer aus. - Wählen Sie oben rechts das entsprechende Artefakt aus.
- Wählen Sie den Tab Downloads aus und scrollen Sie nach unten zum Abschnitt „Inhalte“.
- Klicken Sie auf den Hochladen-Pfeil für die Zuordnungsdatei oder die Debugging-Symbole, um die Offenlegungs- oder Symbolication-Datei für die Version Ihrer App hochzuladen.
Wenn Sie Dateien mithilfe der Google Play Developer API hochladen möchten, rufen Sie die Google Developers-Website auf.
Schritt 3: Offengelegte Absturz-Stacktraces ansehen
Nachdem Sie für eine Version Ihrer App eine ProGuard-Zuordnungsdatei oder eine Debugging-Symboldatei hochgeladen haben, werden alle künftigen Abstürze und ANRs offengelegt. Sie können offengelegte Stacktraces für einzelne Abstürze und ANRs auf der Seite Abstürze und ANRs Ihrer App einsehen.
- Öffnen Sie die Play Console.
- Wählen Sie eine App aus.
- Wählen Sie im Menü auf der linken Seite Beobachten und verbessern > Android Vitals > Abstürze & ANRs aus.
- Wählen Sie einen Absturz aus.
- Im Abschnitt „Stacktraces“ sehen Sie Ihre offengelegten und ersetzten Stacktraces.
Wichtig: Nachdem Sie eine Zuordnungsdatei für eine Version Ihrer App hochgeladen haben, werden nur künftige Abstürze und ANRs für diese Version Ihrer App offengelegt. Abstürze und ANRs für eine Version Ihrer App, die vor dem Hochladen der entsprechenden Zuordnungsdatei aufgetreten sind, werden nicht offengelegt.
Häufig gestellte Fragen
Ich möchte die Offenlegung/Symbolication der Play Console nicht verwenden. Kann ich das auch offline tun?Die Play Console verwendet zur Symbolication von Stacktraces für native Apps ndk-stack und für Java-Abstürze ReTrace. Wenn Sie Ihre Offenlegungsdateien nicht freigeben möchten, können Sie die verschleierten Absturz-Stacks aus der Play Console kopieren und die Symbolication mit dem entsprechenden Tool offline durchführen. Dieser Vorgang muss jedoch für jeden Absturz-Stack manuell durchgeführt werden, wodurch er langsam und zeitaufwendig wird. Wenn Sie die Offenlegungsdateien hochladen, übernimmt die Play Console diese Aufgabe für Sie.
Nachdem Sie für eine Version Ihrer App eine ProGuard-Zuordnungsdatei oder eine Debugging-Symboldatei hochgeladen haben, werden nur Abstürze und ANRs offengelegt, die danach auftreten. Es kann einige Zeit dauern, bis die Geräte der Nutzer neue Abstürze und ANRs melden und offengelegte Abstürze und ANRs in der Play Console angezeigt werden.
Das wird durch das Hochladen einer unvollständigen Offenlegungs-/Symbolication-Datei verursacht. Sorgen Sie dafür, dass die Symbolication-Dateien für Ihre gesamte App eingeschlossen werden. Das ist besonders dann wichtig, wenn Sie einen komplexen oder mehrstufigen Build-Prozess verwenden. Einer der häufigsten Gründe für die unvollständige Offenlegung ist die Verwendung einer Bibliothek eines Drittanbieters. Wenn dies bei Ihnen der Fall ist, wenden Sie sich an diesen Anbieter und fragen Sie nach dem vollständigen Satz von Offenlegungsdateien.
Ohne Offenlegungsdateien wird ein und derselbe Absturz oder ANR auf einem 32-Bit- und einem 64-Bit-Gerät oder einem ARM- und einem Intel-Gerät als separate Ereignisse angezeigt. Wenn Sie die Offenlegungsdateien hochgeladen haben, können wir diese Abstürze zusammenfassen und Ihnen so einen besseren Überblick über die wichtigsten Abstürze und ANRs für Ihre App geben.
Wenn Sie vergessen, die Datei für eine neue Version Ihrer App hochzuladen, werden Abstürze und ANRs wieder verschleiert. Folgen Sie der Anleitung oben, um die Datei jetzt hochzuladen. Nachdem Sie für eine Version Ihrer App eine ProGuard-Zuordnungsdatei oder eine Debugging-Symboldatei hochgeladen haben, werden nur Abstürze und ANRs offengelegt, die danach auftreten. Es kann einige Zeit dauern, bis die Geräte der Nutzer neue Abstürze und ANRs melden und offengelegte Abstürze und ANRs in der Play Console angezeigt werden.
Damit Sie nicht vergessen, die Datei hochzuladen, sollten Sie in Ihrem Build-Prozess App Bundles mit dem Android-Gradle-Plug-in in der Version 4.1 oder höher verwenden. Sie können die Debugging-Symboldatei dann automatisch in das App Bundle aufnehmen lassen. Eine Anleitung dazu finden Sie auf der Website für Android-Entwickler.
Wenn Sie die falsche Datei für eine bestimmte Version Ihrer App hochladen, werden Abstürze und ANRs wieder verschleiert. So laden Sie eine korrigierte Version hoch:
- Öffnen Sie die Play Console.
- Wählen Sie eine App aus.
- Wählen Sie im Menü auf der linken Seite
Testen und veröffentlichen
> App Bundle Explorer aus. - Wählen Sie oben rechts das entsprechende Artefakt aus.
- Wählen Sie den Tab Downloads aus und scrollen Sie nach unten zum Abschnitt „Inhalte“.
- Klicken Sie neben der falschen Offenlegungs- oder Symbolication-Datei auf das Symbol zum Löschen.
- Sobald die falsche Version gelöscht wurde, klicken Sie auf das Upload-Symbol und laden die richtige Datei für die Version Ihrer App hoch.
Nachdem Sie die korrekte ProGuard-Zuordnungsdatei oder Debugging-Symboldatei für die jeweilige Version Ihrer App hochgeladen haben, werden nur die Abstürze und ANRs offengelegt, die nach dem Hochladen auftreten. Es kann einige Zeit dauern, bis die Geräte der Nutzer neue Abstürze und ANRs melden und offengelegte Abstürze und ANRs in der Play Console angezeigt werden.
Tipp: Damit keine falsche Version der Datei hochgeladen wird, sollten Sie in Ihrem Build-Prozess App Bundles mit dem Android-Gradle-Plug-in in der Version 4.1 oder höher verwenden. Sie können die Debugging-Symboldatei dann automatisch in das App Bundle aufnehmen lassen. Eine Anleitung dazu finden Sie auf der Website für Android-Entwickler.
Grundlegende Informationen dazu finden Sie auf der Website für Android-Entwickler.
Ja.
Manchmal erkennt das System einen ANR-Fehler, kann aber den Stacktrace nicht ermitteln. In diesem Fall wird der ANR angezeigt, damit Sie eine umfassendere Übersicht über die Stabilität Ihrer App erhalten, der Stacktrace jedoch nicht. ANRs ohne Stacktraces werden nach Typ und Aktivität gruppiert. Unter Umständen kann es helfen, sich ähnliche ANRs anzusehen und diese zu beheben, um die Anzahl der ANR-Fehler ohne Stacktraces zu reduzieren.