Optymalizacja kodu DEX

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 narzędzi alternatywnych (takich jak optymalizatory zgodne z ProGuard lub procesory końcowe DEX) zmniejsza rozmiar DEX aplikacji, poprawia wydajność środowiska wykonawczego i minimalizuje wykorzystanie pamięci.

Pliki DEX (Dalvik Executable) zawierają skompilowany kod używany do uruchamiania aplikacji. Zwykle obejmuje to kod Java i Kotlin, a nie skompilowany kod C++ ani pliki .so.

Android Vitals raportuje dane o optymalizacji kodu DEX we wszystkich aplikacjach i grach, ale egzekwuje progi tylko w przypadku aplikacji i gier, które spełniają określone wymagania dotyczące rozmiaru.

Wykrywanie problemu

Android Vitals może Cię powiadomić, gdy poziom optymalizacji kodu DEX aplikacji jest niski. Obejmuje to zaciemnianie, zmniejszanie i optymalizację w przypadku aplikacji i gier, które używają R8. W przypadku aplikacji, które nie używają R8, Android Vitals próbuje sprawdzić optymalizację, zmniejszanie i zaciemnianie, ale w razie potrzeby stosuje heurystyki zaciemniania jako proxy.

Monitorowanie stanu optymalizacji

Android Vitals może pomóc Ci poprawić działanie aplikacji, wysyłając alert w Konsoli Play za każdym razem, gdy aplikacja nie spełnia minimalnych określonych wartości procentowych optymalizacji kodu. Szczegółowe definicje zmniejszania, optymalizacji i zaciemniania znajdziesz w artykule Korzystanie z analizatora konfiguracji R8.

W przypadku aplikacji utworzonych za pomocą najnowszej poprawki AGP w wersji 8.10 lub nowszej te wartości procentowe są pobierane z dołączonego pliku r8.json.

W przypadku starszych wersji AGP lub gdy plik r8.json nie jest dołączony, wartości procentowe są obliczane na podstawie pliku mapping.txt (jeśli jest dołączony) lub za pomocą heurystyk DEX (jeśli plik mapowania jest niedostępny).

W przypadku aplikacji zoptymalizowanych za pomocą alternatywnego optymalizatora kodu Android Vitals przeprowadza analizę, aby oszacować odsetek klas, metod i pól, które są zaciemnione w pakiecie aplikacji.

Minimalne rozmiary całkowite DEX

Android Vitals oblicza dane o optymalizacji kodu we wszystkich aplikacjach, ale alerty otrzymasz tylko wtedy, gdy pakiet aplikacji spełnia te wymagania dotyczące całkowitego rozmiaru DEX:

  • Aplikacje: pakiet zawiera co najmniej 10 MB kodu DEX mierzonego jako rozmiar nieskompresowany.
  • Gry: pakiet zawiera co najmniej 50 MB kodu DEX mierzonego jako rozmiar nieskompresowany.

Android Vitals wyświetla rozmiar DEX aplikacji, ale możesz też zmierzyć go lokalnie za pomocą wiersza poleceń:

  unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

Lokalne pomiary optymalizacji kodu R8

Jeśli aplikacja jest optymalizowana za pomocą R8, możesz zmierzyć optymalizację pakietu aplikacji, zaciemnianie i zmniejszanie za pomocą analizatora konfiguracji R8. Raport analizatora konfiguracji R8 jest też dostępny w umiejętności analizy R8 Analyzer. Raport może pomóc Ci zrozumieć, jak reguły zachowywania wpływają na wyniki optymalizacji, zmniejszania i zaciemniania, ale wartości procentowe w raporcie nie będą zgodne z wartościami w Android Vitals, ponieważ są one obliczane przed optymalizacją.

Aby sprawdzić dokładne metadane, których Android Vitals używa do obliczania wyników, wyodrębnij plik r8.json z pakietu aplikacji:

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

Rozwiązanie problemu

Aby rozwiązać problem z niskimi wynikami optymalizacji kodu DEX, zapoznaj się z rekomendacjami opartymi na systemie kompilacji i optymalizatorze:

Wtyczka Androida do obsługi Gradle i R8

Aby poprawić wyniki optymalizacji kodu DEX za pomocą R8, zapoznaj się ze wskazówkami w artykule Poprawianie optymalizacji R8. Możesz też użyć umiejętności analizy R8, aby uzyskać dodatkowe wskazówki dotyczące optymalizacji reguł zachowywania aplikacji.

Systemy kompilacji inne niż R8 i procesory końcowe DEX

Jeśli potok kompilacji używa niestandardowych narzędzi do kompilacji lub procesorów końcowych DEX, wykonaj te czynności, aby poprawić optymalizację aplikacji:

  • Otwórz pakiet aplikacji w Android Studio i wyświetl go w APK Analyzer.
  • Wybierz wszystkie pliki .dex.
  • Zwróć szczególną uwagę na pliki o największym rozmiarze, gdy przełączasz przycisk „Odszyfruj nazwy” (uwaga: wymaga to przesłania pliku mapping.txt). Jeśli zauważysz, że niektóre z tych plików pozostają duże po zaciemnieniu, prawdopodobnie mają na nie wpływ reguły zachowywania dotyczące całego pakietu.
  • Jeśli nie używasz R8, poszukaj w pliku proguard-rules.pro, configuration.txt lub odpowiedniku dla optymalizatora reguł zachowywania, które pasują do pakietów, które nie są zaciemniane. Jeśli na przykład com.foo. jest dużym pakietem w DEX, poszukaj reguł zachowywania w formacie -keep com.foo.** lub -keep com.foo.bar.**.
  • Pamiętaj, że reguły zachowywania konsumenta biblioteki mogą być trudniejsze do zidentyfikowania. Jeśli podejrzewasz, że reguła konsumenta biblioteki wpływa na optymalizację, możesz sprawdzić to lokalnie, dodając ją do samodzielnej przykładowej aplikacji za pomocą najnowszej wersji AGP i sprawdzając ją za pomocą analizatora konfiguracji R8.