Optymalizowanie określonych pakietów za pomocą parametru packageScope (eksperymentalnie)

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:

  1. Zacznij od stabilnych bibliotek. Zacznij od uwzględnienia na liście packageScope tylko powszechnie używanych, stabilnych bibliotek, które są zgodne z optymalizacjami R8. Zacznij od bibliotek AndroidX i Kotlin androidx.**, kotlin.** i kotlinx.**.
  2. Stopniowo dodawaj pakiety. Stopniowo dodawaj nowe prefiksy pakietów do packageScope:
    1. Ocena zależności. Sprawdź biblioteki aplikacji. Dobrymi kandydatami do dodania do listy packageScope są oficjalne biblioteki Google (np. com.google.**) i inne niezawodne biblioteki, takie jak OkHttp (np. okhttp3.** i okio.**). Nadaj priorytet bibliotekom, które nie wymagają intensywnego odbicia, serializacji ani wywołań kodu natywnego (JNI).
    2. 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.
      1. Skompiluj wersję AAB lub APK z wyłączonym R8.
      2. Otwórz ją w Analizatorze i sprawdź pliki dex.
      3. 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.
  3. Sprawdzanie zmian zachowania. Po dodaniu każdego nowego prefiksu pakietu przeprowadź kompleksowe testy w celu wykrycia i rozwiązania wszelkich regresji lub nieoczekiwanych zachowań.
  4. Na końcu dodaj pakiety aplikacji. Jeśli pakiety aplikacji nie używają zbyt wielu odbić, uwzględnij je w packageScope i stopniowo dodawaj reguły zachowania w razie potrzeby. Jeśli pakiety aplikacji używają wielu odbić, uwzględnij je w packageScope i dodaj reguły zachowania dla wymaganych pakietów. Iteracyjnie dopracowuj reguły zachowania.
  5. Przejdź na używanie R8 w całej aplikacji. Gdy większość zależności aplikacji zostanie uwzględniona w deklaracji packageScope i aplikacja będzie stabilna, usuń packageScope, aby zoptymalizować całą aplikację w trybie pełnym.