Optymalizacja kodu DEX to wynik Android Vitals, który pomaga monitorować i poprawiać jakość kompilacji, rozmiar i wydajność aplikacji. Optymalizacja i zaciemnianie kodu za pomocą R8 lub alternatywnych narzędzi (takich jak optymalizatory zgodne z ProGuard lub dodatkowe procesory DEX) zmniejsza rozmiar plików DEX aplikacji, zwiększa wydajność środowiska wykonawczego i minimalizuje wykorzystanie pamięci.
Pliki DEX, czyli Dalvik Executable, zawierają skompilowany kod używany do uruchamiania aplikacji. Zazwyczaj obejmuje to kod Java i Kotlin, w odróżnieniu od skompilowanego kodu C++ lub plików .so.
Android Vitals raportuje dane dotyczące optymalizacji kodu DEX w przypadku wszystkich aplikacji i gier, ale progi są egzekwowane tylko w przypadku aplikacji i gier, które spełniają określone wymagania dotyczące rozmiaru.
Wykrywanie problemu
Android Vitals może wysyłać alerty w Konsoli Play, gdy poziom optymalizacji, zmniejszania lub zaciemniania kodu DEX aplikacji nie spełnia minimalnych zdefiniowanych wartości procentowych.
Jak obliczamy wyniki optymalizacji
W przypadku aplikacji utworzonych za pomocą najnowszej wersji poprawki AGP 8.10 lub nowszej (np. 8.10.1 zamiast 8.10.0) te wartości procentowe są pobierane z dołączonego pliku r8.json. Upewnij się, że używasz najnowszej wersji poprawki AGP i R8 dla wersji podrzędnej, aby generowane były dokładne metadane.
W przypadku aplikacji utworzonych za pomocą wcześniejszych wersji AGP lub zoptymalizowanych za pomocą alternatywnego optymalizatora kodu, który nie zawiera pliku r8.json, Android Vitals szacuje odsetek zaciemnienia kodu, używając pliku mapping.txt (jeśli jest dołączony) lub heurystyki DEX.
Minimalne łączne rozmiary plików DEX
Android Vitals oblicza dane dotyczące optymalizacji kodu dla wszystkich aplikacji, ale alerty będziesz otrzymywać tylko wtedy, gdy pakiet aplikacji spełnia te wymagania dotyczące łącznego rozmiaru plików DEX:
- Aplikacje: pakiet zawiera co najmniej 10 MB kodu DEX (rozmiar nieskompresowany).
- Gry: pakiet zawiera co najmniej 50 MB kodu DEX (rozmiar nieskompresowany).
Lokalny pomiar optymalizacji kodu
Aby zmierzyć nieskompresowany rozmiar plików DEX pakietu aplikacji i uzyskać procentowe wskaźniki optymalizacji, zmniejszania i zaciemniania kodu, które odpowiadają wynikom w Android Vitals, uruchom android analyze:
android analyze <yourapp>.aab
Rozwiązanie problemu
Aby rozwiązać problem z niskim wynikiem optymalizacji kodu DEX, zapoznaj się z rekomendacjami dotyczącymi Twojego systemu kompilacji i optymalizatora:
R8
Aby poprawić wyniki optymalizacji kodu DEX przez R8, zapoznaj się ze wskazówkami w sekcji Ulepszanie optymalizacji R8 i użyj analizatora konfiguracji R8, aby dowiedzieć się, jak reguły zachowywania wpływają na wyniki optymalizacji, zmniejszania i zaciemniania (szczegółowe definicje tych danych znajdziesz w sekcji Informacje o raporcie).
Jeśli używasz wtyczki Androida do obsługi Gradle (AGP), możesz też skorzystać z umiejętności analizatora R8, aby uzyskać dodatkowe wskazówki dotyczące optymalizacji reguł zachowywania aplikacji. Jeśli używasz Bazela, masz też dostęp do analizatora konfiguracji R8. Więcej informacji znajdziesz w dokumentacji optymalizacji R8 w rules_android.
Optymalizatory inne niż R8 i procesory DEX
Jeśli Twój potok kompilacji używa niestandardowych narzędzi do kompilacji lub dodatkowych procesorów DEX, wykonaj te czynności, aby ulepszyć optymalizację aplikacji:
- Otwórz pakiet aplikacji w Android Studio i wyświetl go w APK Analyzer.
- Zaznacz wszystkie pliki
.dex. - Zwróć szczególną uwagę na pliki o największym rozmiarze, przełączając przycisk „Usuń zaciemnienie nazw” (uwaga: wymaga to wczytania pliku
mapping.txt). Jeśli niektóre z tych plików pozostają duże po zaciemnieniu, prawdopodobnie mają na nie wpływ reguły przechowywania obowiązujące w całym pakiecie. - Sprawdź plik
proguard-rules.pro,configuration.txtlub odpowiednik dla optymalizatora, jeśli nie używasz R8, i poszukaj reguł zachowywania, które pasują do pakietów, które nie są zaciemniane. Jeśli na przykładcom.foo.to duży pakiet w plikach DEX, poszukaj reguł zachowywania w formacie-keep com.foo.**lub-keep com.foo.bar.**. - Pamiętaj, że reguły przechowywania dla konsumentów biblioteki mogą nie być tak łatwe do zidentyfikowania. Jeśli podejrzewasz, że reguła konsumenta biblioteki wpływa na optymalizację, możesz sprawdzić bibliotekę bezpośrednio za pomocą
android analyze <library>.aarlub zweryfikować ją, dodając bibliotekę do samodzielnej przykładowej aplikacji korzystającej z najnowszej wersji AGP i sprawdzając ją za pomocą analizatora konfiguracji R8.