Optymalizacja i zaciemnianie kodu za pomocą R8 lub innych narzędzi (np. optymalizatorów zgodnych z ProGuard lub procesorów DEX) zmniejsza rozmiar pliku DEX aplikacji, poprawia wydajność środowiska wykonawczego i minimalizuje wykorzystanie pamięci.
Pliki DEX, czyli Dalvik Executable, zawierają skompilowany kod używany do uruchamiania aplikacji. Zazwyczaj obejmuje on kod Java i Kotlin, a nie skompilowany kod C++ ani pliki .so.
Lokalny pomiar optymalizacji kodu R8
Aby zmierzyć lokalnie rozmiar nieskompresowanych plików DEX w pakiecie aplikacji za pomocą wiersza poleceń, uruchom:
unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'
Jeśli Twoja aplikacja jest optymalizowana za pomocą R8, możesz zmierzyć optymalizację, zaciemnianie i zmniejszanie rozmiaru pakietu aplikacji za pomocą analizatora konfiguracji R8. Szczegółowe definicje zmniejszania rozmiaru, optymalizacji i zaciemniania kodu znajdziesz w artykule Korzystanie z analizatora konfiguracji R8. Raport analizatora konfiguracji R8 jest też dostępny w ramach umiejętności analizy R8.
Aby sprawdzić metadane po optymalizacji osadzone w pakiecie aplikacji (w przypadku wtyczki Androida do obsługi Gradle w wersji 8.10 lub nowszej), wyodrębnij plik r8.json:
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 dotyczącymi systemu kompilacji i optymalizatora:
Wtyczka Androida do obsługi Gradle i R8
Aby poprawić wyniki optymalizacji kodu DEX w R8, zapoznaj się z wskazówkami w artykule Poprawianie optymalizacji R8. Możesz też skorzystać z umiejętności analizy R8, aby uzyskać dodatkowe wskazówki dotyczące optymalizacji reguł zachowywania w aplikacji.
Systemy kompilacji inne niż R8 i procesory końcowe DEX
Jeśli Twój potok kompilacji korzysta z niestandardowych narzędzi do kompilacji lub dodatkowych procesorów DEX, wykonaj te czynności, aby zwiększyć optymalizację aplikacji:
- Otwórz pakiet aplikacji w Android Studio i wyświetl go w analizatorze APK.
- Wybierz wszystkie
.dexpliki. - Zwróć szczególną uwagę na pliki o największym rozmiarze, gdy będziesz przełączać przycisk „Deobfuscate names” (Uwaga: wymaga to przesłania pliku
mapping.txt). Jeśli po zaciemnieniu niektóre z tych plików pozostają duże, prawdopodobnie są objęte regułami przechowywania dotyczącymi całego pakietu. - Sprawdź plik
proguard-rules.pro,configuration.txtlub odpowiednik w przypadku optymalizatora, jeśli nie używasz R8, i wyszukaj reguły keep, które pasują do pakietów, które nie są zaciemniane. Jeśli na przykładcom.foo.jest dużym pakietem w pliku DEX, poszukaj reguł zachowywania w formacie-keep com.foo.**lub-keep com.foo.bar.**. - Pamiętaj, że reguły przechowywania danych użytkowników biblioteki mogą nie być tak łatwe do zidentyfikowania. Jeśli podejrzewasz, że reguła konsumenta biblioteki wpływa na optymalizację, możesz sprawdzić to lokalnie, dodając ją do samodzielnej aplikacji przykładowej, która korzysta z najnowszej wersji AGP, i sprawdzając ją za pomocą analizatora konfiguracji R8.