Możesz optymalizować konkretne pakiety za pomocą R8 z packageScope. Jest to opcjonalny pierwszy krok w przypadku aplikacji, które jeszcze nie korzystają z R8. Nie jest on zalecany w przypadku aplikacji, które już używają R8.
Zastanów się, czy użyć packageScope
Jeśli Twoja aplikacja już korzysta z R8, nie używaj packageScope, ponieważ jest to nieoptymalna konfiguracja pod względem wydajności i rozmiaru aplikacji. Zamiast tego ulepsz
konfigurację R8 w aplikacji, stosując ulepszone reguły zachowania lub, jeśli używasz
trybu zgodności, przejdź na tryb pełny R8.
Aplikacje, które jeszcze nie korzystają z R8, ale są w trakcie wdrażania R8, mogą używać packageScope, aby stopniowo zarządzać przejściem. R8 stosuje zaawansowane optymalizacje, które mogą zmieniać zachowanie aplikacji. Ograniczenie tych optymalizacji do konkretnych pakietów, które można bezpiecznie zoptymalizować, takich jak AndroidX i Kotlin, pozwala uzyskać wzrost wydajności przy minimalnym ryzyku. Gdy aplikacja będzie stabilna, możesz stopniowo rozszerzać te optymalizacje na pozostałą część bazy kodu i zależności, testując stabilność na każdym etapie.
Wymagania wstępne
Aby używać R8 z packageScope, musisz mieć:
- wtyczkę Androida do obsługi Gradle w wersji 9.0 lub nowszej,
- R8 w trybie pełnym, a nie w trybie zgodności.
Konfigurowanie optymalizacji
Aby włączyć optymalizację za pomocą packageScope, wykonaj te czynności.
Wybieranie bibliotek do optymalizacji
Określ biblioteki, które chcesz zoptymalizować. Zalecamy rozpoczęcie od bibliotek AndroidX i Kotlin androidx.**, kotlin.** i kotlinx.**, ponieważ są to stabilne biblioteki, które zostały skonfigurowane pod kątem zgodności z R8.
Włączanie obsługi R8 z packageScope
Dodaj te informacje do pliku gradle.properties projektu:
android.r8.gradual.support=true
Konfigurowanie bloku optymalizacji
W pliku build.gradle.kts (lub build.gradle) na poziomie modułu dodaj blok optimization do konfiguracji kompilacji do publikacji. W tym bloku użyj packageScope, aby utworzyć listę konkretnych pakietów, które chcesz zoptymalizować. W pliku build.gradle.kts umieść listę pakietów w setOf().
Kotlin
android {
buildTypes {
release {
optimization {
enable = true
packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
}
}
}
}
Dynamiczny
android {
buildTypes {
release {
optimization {
enable = true
packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
}
}
}
}
Testowanie optymalizacji
Po zastosowaniu lub zaktualizowaniu deklaracji packageScope dokładnie przetestuj
aplikację, aby sprawdzić, czy nie występują nieoczekiwane awarie lub zmiany zachowania.
Przechodzenie od optymalizacji określonych pakietów do optymalizacji całej aplikacji
Aby zmaksymalizować korzyści z optymalizacji, stopniowo przechodź od używania packageScope do używania R8 w całej aplikacji. Ten proces obejmuje stopniowe rozszerzanie zakresu optymalizacji:
- Zacznij od stabilnych bibliotek. Zacznij od uwzględnienia na liście
packageScopetylko powszechnie używanych, stabilnych bibliotek, które są zgodne z optymalizacjami R8. Zacznij od bibliotek AndroidX i Kotlinandroidx.**,kotlin.**ikotlinx.**. - Stopniowo dodawaj pakiety. Stopniowo dodawaj nowe prefiksy pakietów do
packageScope:- Ocena zależności. Sprawdź biblioteki aplikacji. Dobrymi kandydatami do dodania do listy
packageScopesą oficjalne biblioteki Google (np.com.google.**) i inne niezawodne biblioteki, takie jakOkHttp(np.okhttp3.**iokio.**). Nadaj priorytet bibliotekom, które nie wymagają intensywnego odbicia, serializacji ani wywołań kodu natywnego (JNI). - Ustalanie priorytetów na podstawie rozmiaru pakietu. Użyj Analizatora APK w Android Studio , aby określić, które elementy najbardziej wpływają na rozmiar aplikacji.
- Skompiluj wersję AAB lub APK z wyłączonym R8.
- Otwórz ją w Analizatorze i sprawdź pliki
dex. - Posortuj pakiety według rozmiaru. Największe pakiety zapewniają najwyższy zwrot z inwestycji (ROI) w optymalizację. Jeśli te biblioteki nie mają zbyt szerokich reguł zachowania, ich optymalizacja na początku procesu pozwoli Ci uzyskać największą redukcję rozmiaru. Więcej informacji znajdziesz w artykule Wybieranie bibliotek.
- Ocena zależności. Sprawdź biblioteki aplikacji. Dobrymi kandydatami do dodania do listy
- Sprawdzanie zmian zachowania. Po dodaniu każdego nowego prefiksu pakietu przeprowadź kompleksowe testy w celu wykrycia i rozwiązania wszelkich regresji lub nieoczekiwanych zachowań.
- Na końcu dodaj pakiety aplikacji. Jeśli pakiety aplikacji nie używają zbyt wielu odbić, uwzględnij je w
packageScopei stopniowo dodawaj reguły zachowania w razie potrzeby. Jeśli pakiety aplikacji używają wielu odbić, uwzględnij je wpackageScopei dodaj reguły zachowania dla wymaganych pakietów. Iteracyjnie dopracowuj reguły zachowania. - Przejdź na używanie R8 w całej aplikacji. Gdy większość zależności aplikacji zostanie uwzględniona w deklaracji
packageScopei aplikacja będzie stabilna, usuńpackageScope, aby zoptymalizować całą aplikację w trybie pełnym.