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

Możesz zoptymalizować konkretne pakiety, używając R8 z packageScope. Jest to opcjonalny pierwszy krok dla aplikacji, które nie używają jeszcze R8. Nie jest on zalecany w przypadku aplikacji, które już korzystają z R8.

Zastanów się, czy użyć packageScope.

Jeśli Twoja aplikacja korzysta już z R8, nie używaj packageScope, ponieważ jest to nieoptymalna konfiguracja pod względem wydajności i rozmiaru aplikacji. Zamiast tego ulepsz konfigurację R8 aplikacji, dodając lepsze reguły zachowywania, lub jeśli używasz trybu zgodności, przejdź na pełny tryb R8.

W przypadku aplikacji, które nie używają jeszcze R8, ale wdrażają tę technologię, użyj packageScope, aby stopniowo zarządzać procesem przejścia. R8 stosuje zaawansowane optymalizacje, które mogą zmieniać zachowanie aplikacji. Ograniczenie tych optymalizacji do konkretnych pakietów, które można bezpiecznie optymalizować, np. AndroidX i Kotlin, pozwala zwiększyć wydajność przy minimalnym ryzyku. Gdy aplikacja będzie stabilna, możesz stopniowo rozszerzać te optymalizacje na pozostałą część kodu i zależności, testując stabilność na każdym etapie.

Wymagania wstępne

Korzystanie z R8 z packageScope wymaga wtyczki Androida do obsługi Gradle w wersji 9.0 lub nowszej.

Konfigurowanie optymalizacji

Aby włączyć optymalizację za pomocą packageScope, wykonaj te czynności.

Wybieranie bibliotek do optymalizacji

Wybierz biblioteki do zoptymalizowania. Zalecamy rozpoczęcie od bibliotek AndroidX i Kotlin androidx.**, kotlin.**kotlinx.**, ponieważ są to stabilne biblioteki skonfigurowane pod kątem zgodności z R8.

Włączanie obsługi R8 z zakresem pakietu

Dodaj do pliku gradle.properties projektu te informacje:

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 wersji. W tym bloku użyj elementu packageScope, aby utworzyć listę konkretnych pakietów, które chcesz zoptymalizować. W pliku build.gradle.kts umieść listę pakietów w tagu setOf().

Kotlin

android {
  buildTypes {
    release {
      proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")
      optimization {
        enable = true
        packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
      }
    }
  }
}

Groovy

android {
  buildTypes {
    release {
      proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
      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ą w niej nieoczekiwane awarie ani zmiany w działaniu.

Przejście z optymalizacji określonych pakietów na optymalizację całej aplikacji

Aby zmaksymalizować korzyści z optymalizacji, stopniowo przechodź z używania packageScope na R8 w całej aplikacji. Ten proces obejmuje stopniowe zwiększanie zakresu optymalizacji:

  1. Zacznij od stabilnych bibliotek. Zacznij od uwzględnienia na packageScopeliście tylko powszechnie używanych, stabilnych bibliotek, które są zgodne z optymalizacjami R8. Zacznij od bibliotek AndroidX i Kotlin androidx.**, kotlin.**kotlinx.**.
  2. Stopniowe dodawanie pakietów Stopniowo dodawaj nowe prefiksy pakietów do pliku packageScope:
    1. Określ 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.**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ć, co najbardziej wpływa na rozmiar aplikacji. 1. Utwórz wersję w formacie AAB lub APK z wyłączonym narzędziem R8. 1. Otwórz go w Analizatorze i sprawdź pliki dex. 1. Sortuj paczki według rozmiaru. Największe pakiety zapewniają najwyższy zwrot z inwestycji (ROI) w przypadku optymalizacji. Skupienie się na nich w pierwszej kolejności pozwala uzyskać największą redukcję rozmiaru na wczesnym etapie procesu, o ile biblioteki te nie mają zbyt szerokich reguł zachowywania. Więcej informacji znajdziesz w sekcji Rozważnie wybieraj biblioteki.
  3. Sprawdź zmiany w zachowaniu. Po dodaniu każdego nowego prefiksu pakietu przeprowadź kompleksowe testy, aby wykryć i rozwiązać wszelkie regresje lub nieoczekiwane zachowania.
  4. Pakiety aplikacji dodaj na końcu. Jeśli pakiety aplikacji nie korzystają w dużym stopniu z odbicia, umieść je w packageScope i dodawaj reguły zachowywania w miarę potrzeb. Jeśli pakiety aplikacji używają dużo odbicia, uwzględnij je w packageScope i dodaj reguły zachowywania dla wymaganych pakietów. Przejrzyj reguły przechowywania, aby je dopracować.
  5. Przejdź na R8 w całej aplikacji. Gdy większość zależności aplikacji zostanie uwzględniona w deklaracji packageScope, a aplikacja będzie stabilna, usuń packageScope, aby zoptymalizować całą aplikację w trybie pełnym.