Testowanie i rozwiązywanie problemów z optymalizacją
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Po włączeniu optymalizacji aplikacji sprawdź, czy działa ona zgodnie z oczekiwaniami i czy konfiguracja R8 działa zgodnie z Twoimi oczekiwaniami. Ogólne kroki to:
Testuj kluczowe ścieżki użytkownika w aplikacji: sprawdź na przykład, czy użytkownicy mogą się zalogować i wykonywać inne ważne czynności.
Pomiar wzrostu skuteczności za pomocą punktów odniesienia:porównaj swoją aplikację przed i po włączeniu optymalizacji aplikacji.
Jeśli znajdziesz problemy, R8 udostępnia narzędzia do ich rozwiązywania. Jeśli nie możesz rozwiązać problemu z R8, zgłoś błąd.
Wskazówki ogólne
Problemy z R8 są często unikalne dla danej aplikacji, ale poniżej znajdziesz kilka ogólnych wskazówek, które ułatwią debugowanie:
Tymczasowe wyłączenie zaciemnienia: R8 zaciemnia kod w ramach procesu optymalizacji. Obfuscation zwykle nie jest przyczyną błędów, ale utrudnia ich debugowanie. Dodaj do pliku reguł keep flagi ‑dontobfuscate i ‑dontoptimize, aby ułatwić znalezienie problematycznego kodu.
Sprawdzanie odbicia: jeśli napotkasz wyjątek no such element, taki jak
Caused by: java.util.NoSuchElementException: Collection contains no element
matching the predicate in the stack trace ,
Wyjątek zwykle oznacza, że dane pole jest używane przez odbicie lustrzane i musisz dodać regułę zachowania.
Sprawdzanie kodu bajtowego: większość problemów z R8 wymaga sprawdzenia kodu bajtowego. Możesz to zrobić za pomocą narzędzi takich jak APK Analyzer.
Sprawdzanie, które reguły zostały zastosowane
Aby wygenerować pełny raport ze wszystkimi regułami stosowanymi przez R8 podczas kompilowania projektu, dodaj do pliku modułu aplikacjiproguard‑rules.pro:
Możesz podać dowolną ścieżkę i nazwę pliku. Jeśli nie określisz ścieżki ani nazwy pliku, R8 wygeneruje raport z regułami w pliku <module-name>/build/outputs/mapping/<build-type>/configuration.txt.
Dlaczego kod został zachowany
Jeśli widzisz kod, który powinien zostać usunięty, użyj opcji konfiguracji ‑whyareyoukeeping, aby dowiedzieć się, dlaczego tak się nie stało. R8 generuje ścieżkę z kodu przechowywanego w Keep do jednego z punktów wejścia aplikacji. Więcej informacji znajdziesz w dokumentacji ‑whyareyoukeeping w podręczniku Proguard.
Odzyskiwanie pierwotnego zrzutu stosu
Kod przetwarzany przez R8 jest zmieniany na różne sposoby, aby ścieżka wywołań nie wskazywała już na pierwotny kod. Mogą się na przykład zmieniać numery wierszy oraz nazwy klas i metod. Aby odzyskać oryginalny ślad stosu, R8 udostępnia narzędzie wiersza poleceń retrace, które jest częścią pakietu narzędzi wiersza poleceń.
Aby użyć funkcji retrace, prześlij do niej plik mapowania i plik zrzutu stosu. Plik mapowania o nazwie mapping.txt jest automatycznie dołączany do pakietu aplikacji na Androida (AAB). Więcej informacji znajdziesz w dokumentacji retrace oraz w artykule w Centrum pomocy Konsoli Play dotyczącym odszyfrowania ścieżek wyjątków.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-27 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 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."]]