Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Prüfen Sie nach der Aktivierung der App-Optimierung, ob Ihre App wie vorgesehen funktioniert und die R8-Konfiguration die gewünschte Leistung erzielt. Die allgemeinen Schritte sind:
Testen Sie die kritischen Nutzerpfade (CUJs) Ihrer App: Achten Sie beispielsweise darauf, dass sich Nutzer anmelden und andere wichtige Aufgaben ausführen können.
Wenn Probleme auftreten, bietet R8 Tools zur Fehlerbehebung. Wenn Sie ein Problem mit R8 nicht beheben können, melden Sie es als Fehler.
Allgemeine Tipps
Probleme mit R8 sind oft spezifisch für Ihre App. Hier sind einige allgemeine Tipps, die das Debuggen erleichtern:
Deaktivierung der Verschleierung: R8 verschleiert Code im Rahmen des Optimierungsprozesses. Obfuscierung ist in der Regel nicht die Ursache für Fehler, aber sie erschwert das Debugging. Fügen Sie der Datei mit den Regeln zum Beibehalten die Flags ‑dontobfuscate und ‑dontoptimize hinzu, um problematischen Code zu finden.
Reflexion prüfen:Wenn Sie auf die Ausnahme Kein Element dieses Typs stoßen, z. B.
Caused by: java.util.NoSuchElementException: Collection contains no element
matching the predicate in the stack trace ,
Eine Ausnahme bedeutet in der Regel, dass das betreffende Feld über Reflection verwendet wird und Sie eine Beibehaltungsregel hinzufügen müssen.
Bytecode prüfen:Für die meisten R8-Probleme ist eine Bytecode-Prüfung erforderlich. Sie können dazu Tools wie den APK-Analysator verwenden.
Prüfen, welche Regeln angewendet werden
Wenn Sie einen vollständigen Bericht zu allen Regeln ausgeben möchten, die R8 beim Erstellen Ihres Projekts anwendet, fügen Sie Folgendes in die Modulproguard‑rules.pro-Datei Ihrer App ein:
Sie können einen beliebigen Pfad und Dateinamen angeben. Wenn Sie keinen Pfad oder Dateinamen angeben, gibt R8 den Richtlinienbericht unter <module-name>/build/outputs/mapping/<build-type>/configuration.txt aus.
Verstehen, warum Code beibehalten wurde
Wenn Sie Code sehen, der nicht entfernt wurde, obwohl Sie das erwartet hatten, können Sie mithilfe der Konfigurationsoption ‑whyareyoukeeping herausfinden, warum der Code beibehalten wurde. R8 gibt einen Pfad vom beibehaltenen Code zu einem der Einstiegspunkte Ihrer App aus. Weitere Informationen finden Sie in der ‑whyareyoukeeping-Dokumentation im Proguard-Handbuch.
Ursprünglichen Stack-Trace wiederherstellen
Der von R8 verarbeitete Code wird auf verschiedene Arten geändert, sodass sich der Stack-Trace nicht mehr auf den ursprünglichen Code bezieht. So können sich beispielsweise Zeilennummern und die Namen von Klassen und Methoden ändern. Zum Wiederherstellen des ursprünglichen Stack-Traces bietet R8 das Befehlszeilentool „retrace“ an, das im Paket mit den Befehlszeilentools enthalten ist.
Wenn Sie ReTrace verwenden möchten, geben Sie eine Zuordnungsdatei und eine Stack-Trace-Datei an. Die Zuordnungsdatei mit dem Namen mapping.txt wird automatisch mit Ihrem Android App Bundle (AAB) gebündelt. Weitere Informationen finden Sie in der Retrace-Dokumentation und im Play Console-Hilfeartikel zum Entfernen von Obfuscierung aus Stack-Traces bei Abstürzen.
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-07-27 (UTC)."],[],[],null,["# Test and troubleshoot the optimization\n\nAfter you enable app optimization, check that your app is working as intended\nand that the R8 configuration is doing what you expect. The general steps are as\nfollows:\n\n1. **Test your app's critical user journeys (CUJs):** For example, make sure that users can sign in and do other important tasks.\n2. **Measure performance gains using benchmarks:** [Benchmark your app](/topic/performance/benchmarking/benchmarking-overview) before and after enabling app optimization.\n\nIf you find issues, R8 provides tools to help you troubleshoot. If you're unable\nto solve an issue with R8, [file a bug](https://b.corp.google.com/issues/new?component=326788&template=1025938&pli=1).\n\nGeneral tips\n------------\n\nIssues with R8 are often unique to your app, but here are some general tips to\nmake debugging easier:\n\n- **Temporarily turn off obfuscation:** R8 obfuscates code as part of its optimization process. Obfuscation usually isn't the cause of errors, but obfuscation makes errors more difficult to debug. Add the `‑dontobfuscate` and `‑dontoptimize` flags to the keep rules file to help you pinpoint problematic code.\n- **Check for reflection:** If you run into a *no such element* exception such\n as\n\n `Caused by: java.util.NoSuchElementException: Collection contains no element\n matching the predicate in the stack trace` ,\n\n the exception usually means the field in question is being used through\n reflection and you have to add a keep rule.\n- **Inspect bytecode:** Most R8 issues require bytecode inspection, which you\n can do with tools such as the [APK Analyzer](/studio/debug/apk-analyzer).\n\nCheck which rules are applied\n-----------------------------\n\nTo output a full report of all the rules that R8 applies when building your\nproject, include the following in your app's module\n`proguard‑rules.pro` file: \n\n -printconfiguration \u003coutput-dir\u003e/\u003creport-name\u003e.txt\n\nYou can specify any path and filename. If you don't specify a path or filename,\nR8 outputs the rules report at `\u003cmodule-name\u003e/build/outputs/mapping/\u003cbuild-type\u003e/configuration.txt`.\n\nUnderstand why code was kept\n----------------------------\n\nIf you see kept code that you expected to be removed, use the configuration\noption `‑whyareyoukeeping` to help understand why the code was\nkept. R8 outputs a path from the kept code to one of your app's [entry\npoints](/topic/performance/app-optimization/add-keep-rules#how-write). For more information, see the\n[`‑whyareyoukeeping`](https://www.guardsquare.com/manual/configuration/usage)\ndocumentation in the Proguard manual.\n\nRecover the original stack trace\n--------------------------------\n\nCode processed by R8 is changed in various ways so that the stack trace no\nlonger refers to the original code. For example, line numbers and the names of\nclasses and methods can change. To recover the original stack trace, R8 provides\nthe retrace command-line tool, which is bundled with the command-line tools\npackage.\n\nTo use retrace, give it a *mapping file* and a stack trace file. The mapping\nfile, called `mapping.txt`, is automatically bundled with your Android App\nBundle (AAB). For more details, see the [retrace](/studio/command-line/retrace) documentation and the Play\nConsole Help Center article about how to [de‑obfuscate crash stack\ntraces](https://support.google.com/googleplay/android-developer/answer/9848633).\n| **Warning:** If you're shipping APKs, the `mapping.txt` file isn't automatically bundled with your APK. Android Studio saves the mapping file in the `/build/outputs/mapping/` directory. The mapping file is overwritten every time you build your project, so you must save a copy each time you publish a new release."]]