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
:
-printconfiguration <output-dir>/<report-name>.txt
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.