Aby zapewnić użytkownikom jak najlepsze wrażenia, zoptymalizuj aplikację, aby była jak najmniejsza i jak najszybsza. Nasz optymalizator aplikacji, R8, usprawnia aplikację, usuwając nieużywany kod i zasoby, przepisując kod w celu optymalizacji wydajności w czasie działania i wykonując inne działania. Dla użytkowników oznacza to:
- szybciej uruchamiać aplikację,
- Lepsze renderowanie i wydajność w czasie działania
- Mniej błędów ANR
Aby włączyć optymalizację aplikacji, ustaw w skrypcie kompilacji na poziomie aplikacji wersji isMinifyEnabled = true (optymalizacja kodu) i isShrinkResources = true (optymalizacja zasobów), jak pokazano w tym kodzie. Zalecamy, aby zawsze włączać oba ustawienia. Zalecamy też włączanie optymalizacji aplikacji tylko w ostatecznej wersji aplikacji, którą testujesz przed opublikowaniem – zwykle w wersji do publikacji. Optymalizacje wydłużają czas kompilacji projektu i mogą utrudniać debugowanie ze względu na sposób modyfikowania kodu.
Kotlin
android { buildTypes { release { // Enables code-related app optimization. isMinifyEnabled = true // Enables resource shrinking. isShrinkResources = true proguardFiles( // Default file with automatically generated optimization rules. getDefaultProguardFile("proguard-android-optimize.txt"), ... ) ... } } ... }
Groovy
android { buildTypes { release { // Enables code-related app optimization. minifyEnabled true // Enables resource shrinking. shrinkResources true // Default file with automatically generated optimization rules. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') ... } } }
Optymalizacja zmniejszania zasobów w celu uzyskania jeszcze mniejszych aplikacji
Wtyczka Androida do obsługi Gradle (AGP) w wersji 8.12.0 wprowadza zoptymalizowane zmniejszanie zasobów, które ma na celu integrację optymalizacji zasobów i kodu, aby tworzyć jeszcze mniejsze i szybsze aplikacje.
Przed optymalizacją zmniejszania zasobów narzędzie Android Asset Packaging Tool (AAPT2) generowało reguły zachowywania, które traktowały zmniejszanie zasobów oddzielnie od kodu, często zachowując niedostępny kod lub zasoby, które się wzajemnie odwoływały.
W przypadku zoptymalizowanego zmniejszania zasobów są one traktowane jako część kodu programu, tworząc wykres odniesień. Jeśli zbiór kodu lub zasobów nie jest używany, nie jest chroniony przez regułę zachowywania i może zostać usunięty.
Włączanie optymalnego zmniejszania zasobów
Aby włączyć nowy zoptymalizowany potok zmniejszania zasobów w wersji AGP starszej niż 9.0.0, dodaj do pliku gradle.properties projektu ten kod:
android.r8.optimizedResourceShrinking=true
Jeśli używasz AGP w wersji 9.0.0 lub nowszej, nie musisz ustawiać
android.r8.optimizedResourceShrinking=true. Zoptymalizowane zmniejszanie zasobów jest stosowane automatycznie, gdy w konfiguracji kompilacji włączona jest opcja isShrinkResources = true.
Sprawdzanie i konfigurowanie ustawień optymalizacji R8
Aby włączyć w R8 pełne możliwości optymalizacji, usuń z pliku gradle.properties projektu ten wiersz (jeśli istnieje):
android.enableR8.fullMode=false # Remove this line from your codebase.
Pamiętaj, że włączenie optymalizacji aplikacji utrudnia zrozumienie śladów stosu, zwłaszcza jeśli R8 zmienia nazwy klas lub metod. Aby uzyskać ślady stosu, które prawidłowo odpowiadają Twojemu kodowi źródłowemu, przeczytaj artykuł Przywracanie oryginalnego śladu stosu.
Jeśli R8 jest włączony, warto też utworzyć profile uruchamiania, aby jeszcze bardziej zwiększyć wydajność uruchamiania.
Jeśli włączenie optymalizacji aplikacji spowoduje błędy, możesz je naprawić, stosując te strategie:
- Dodaj reguły zachowywania, aby niektóre fragmenty kodu pozostały niezmienione.
- Wprowadzaj optymalizacje stopniowo
- Zaktualizuj kod, aby używać bibliotek lepiej dostosowanych do optymalizacji.
Jeśli chcesz zoptymalizować szybkość kompilacji, przeczytaj artykuł Skonfiguruj sposób działania R8, aby dowiedzieć się, jak skonfigurować R8 w zależności od środowiska.
Zmiany w działaniu wtyczki Androida do obsługi Gradle i kompilatora R8
W tabeli poniżej znajdziesz najważniejsze funkcje wprowadzone w różnych wersjach wtyczki Androida do obsługi Gradle (AGP) i kompilatora R8.
| Wersja AGP | Wprowadzone funkcje |
|---|---|
| 9.0 |
Zoptymalizowane zmniejszanie zasobów: domyślnie włączone (sterowane za pomocą android.r8.optimizedResourceShrinking). Zoptymalizowane zmniejszanie zasobów pomaga zintegrować zmniejszanie zasobów z potokiem optymalizacji kodu, co prowadzi do tworzenia mniejszych i szybszych aplikacji. Optymalizując jednocześnie kod i odwołania do zasobów, identyfikuje i usuwa zasoby, do których odwołuje się wyłącznie nieużywany kod. To znaczne ulepszenie w porównaniu z poprzednimi oddzielnymi procesami optymalizacji.Jest to szczególnie przydatne w przypadku aplikacji, które udostępniają znaczne zasoby i kod w różnych pionach związanych z rodzajem urządzenia. Zmierzyliśmy poprawę rozmiaru aplikacji o ponad 50%. Wynikające z tego zmniejszenie rozmiaru prowadzi do mniejszych plików do pobrania, szybszej instalacji i lepszych wrażeń użytkowników dzięki szybszemu uruchamianiu, lepszemu renderowaniu i mniejszej liczbie błędów ANR. Filtrowanie reguł biblioteki: obsługa opcji globalnych (np. -dontobfuscate) w regułach konsumenta biblioteki została wycofana, a aplikacje będą je odfiltrowywać. Więcej informacji znajdziesz w artykule Dodawanie opcji globalnych.Sprawdzanie wartości null w Kotlinie: domyślnie zoptymalizowane (kontrolowane za pomocą -processkotlinnullchecks). W tej wersji wprowadzono też znaczące ulepszenia szybkości kompilacji. Więcej informacji znajdziesz w artykule Opcje globalne dodatkowej optymalizacji.Optymalizuj konkretne pakiety: możesz użyć packageScope, aby optymalizować konkretne pakiety. Jest to funkcja eksperymentalna. Więcej informacji znajdziesz w artykule Optymalizowanie określonych pakietów za pomocą packageScope.Domyślnie zoptymalizowany: obsługa getDefaultProguardFile("proguard-android.txt") została wycofana, ponieważ zawiera -dontoptimize, którego należy unikać. Zamiast tego użyj zasady "proguard-android-optimize.txt". Jeśli chcesz globalnie wyłączyć optymalizację w aplikacji, ręcznie dodaj flagę do pliku ProGuard.
|
| 8.12 |
Zmniejszanie zasobów: dodano wstępną obsługę (domyślnie wyłączone). Włącz używanie isShrinkResources). Zmniejszanie zasobów działa w połączeniu z R8, aby skutecznie identyfikować i usuwać nieużywane zasoby.Śledzenie wsteczne w Logcat: obsługa automatycznego śledzenia wstecznego w oknie Logcat w Android Studio. |
| 8.6 |
Ulepszone śledzenie wsteczne: domyślnie obejmuje śledzenie wsteczne nazwy pliku i numeru wiersza na wszystkich poziomach minSdk (wcześniej wymagało to poziomu minSdk 26+ w wersji 8.2).Aktualizacja R8 pomaga zapewnić, że ślady stosu z zaciemnionych kompilacji są łatwo i czytelnie dostępne. Ta wersja ulepsza mapowanie numerów wierszy i plików źródłowych, co ułatwia narzędziom takim jak Logcat w Android Studio automatyczne śledzenie awarii do oryginalnego kodu źródłowego. |
| z Androidem 8.0 |
Domyślnie tryb pełny: tryb pełny R8 zapewnia znacznie skuteczniejszą optymalizację. Jest ona domyślnie włączona. Możesz zrezygnować z tej funkcji na stronie android.enableR8.fullMode=false.
|
| 7,0 |
Dostępny tryb pełny: wprowadzony jako funkcja, którą można włączyć za pomocą android.enableR8.fullMode=true. Tryb pełny stosuje bardziej zaawansowane optymalizacje, ponieważ zakłada, że kod używa odbicia i innych funkcji dynamicznych. Zmniejsza rozmiar aplikacji i zwiększa jej wydajność, ale może wymagać dodatkowych reguł zachowywania, aby zapobiec usunięciu niezbędnego kodu.
|