Angegebene Pakete mit „packageScope“ optimieren (experimentell)

Mit R8 und packageScope können Sie bestimmte Pakete optimieren. Dies ist als optionaler erster Schritt für Apps gedacht, die R8 noch nicht verwenden. Für Apps, die R8 bereits verwenden, wird es nicht empfohlen.

Überlegungen zur Verwendung von packageScope

Wenn Ihre App bereits R8 verwendet, sollten Sie packageScope nicht verwenden, da es sich in Bezug auf Leistung und App-Größe um eine suboptimale Konfiguration handelt. Verbessern Sie stattdessen die R8-Konfiguration Ihrer App mit verbesserten Keep-Regeln oder migrieren Sie zum vollständigen Modus von R8, wenn Sie den Kompatibilitätsmodus verwenden.

Apps, die R8 noch nicht verwenden, aber R8 einführen, können packageScope verwenden, um die Umstellung schrittweise zu verwalten. Da R8 leistungsstarke Optimierungen anwendet, die das App-Verhalten ändern können, können Sie die Optimierungen auf bestimmte Pakete beschränken, die sicher optimiert werden können, z. B. AndroidX und Kotlin, um die Leistung mit minimalem Risiko zu steigern. Sobald Ihre App stabil ist, können Sie diese Optimierungen schrittweise auf den Rest Ihrer Codebasis und die Abhängigkeiten ausweiten und die Stabilität in jeder Phase testen.

Vorbereitung

Für die Verwendung von R8 mit packageScope ist Folgendes erforderlich:

  • Android-Gradle-Plug-in 9.0 oder höher.
  • R8 im vollständigen Modus und nicht im Kompatibilitätsmodus.

Optimierung konfigurieren

Führen Sie die folgenden Schritte aus, um die Optimierung mit packageScope zu aktivieren.

Zu optimierende Bibliotheken auswählen

Ermitteln Sie die zu optimierenden Bibliotheken. Wir empfehlen, mit den AndroidX- und Kotlin-Bibliotheken androidx.**, kotlin.** und kotlinx.** zu beginnen, da diese stabil sind und für die R8-Kompatibilität konfiguriert wurden.

Unterstützung für die Verwendung von R8 mit packageScope aktivieren

Fügen Sie der Datei gradle.properties Ihres Projekts Folgendes hinzu:

android.r8.gradual.support=true

Optimierungsblock einrichten

Fügen Sie in der Datei build.gradle.kts (oder build.gradle) auf Modulebene einen optimization Block zur Release-Build-Konfiguration hinzu. Listen Sie in diesem Block mit packageScope die zu optimierenden Pakete auf. Setzen Sie in der Datei build.gradle.kts die Paketliste in setOf().

Kotlin

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
            }
        }
    }
}

Groovy

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
            }
        }
    }
}

Optimierung testen

Nachdem Sie die packageScope-Deklaration angewendet oder aktualisiert haben, testen Sie Ihre App gründlich, um zu prüfen, ob unerwartete Abstürze oder Verhaltensänderungen aufgetreten sind.

Von der Optimierung bestimmter Pakete zur Optimierung der gesamten App übergehen

Um die Vorteile der Optimierung zu maximieren, sollten Sie schrittweise von der Verwendung von packageScope zur Verwendung von R8 für die gesamte App übergehen. Dabei wird die Optimierungsabdeckung schrittweise erweitert:

  1. Mit stabilen Bibliotheken beginnen. Nehmen Sie in die packageScope-Liste nur weit verbreitete, stabile Bibliotheken auf, die mit den Optimierungen von R8 kompatibel sind. Beginnen Sie mit den AndroidX- und Kotlin-Bibliotheken androidx.**, kotlin.** und kotlinx.**.
  2. Pakete schrittweise hinzufügen. Fügen Sie packageScope schrittweise neue Paketpräfixe hinzu:
    1. Abhängigkeiten bewerten. Überprüfen Sie die Bibliotheken Ihrer App. Gute Kandidaten für die packageScope-Liste sind offizielle Google-Bibliotheken (z. B. com.google.**) und andere robuste Bibliotheken wie OkHttp (z. B. okhttp3.** und okio.**). Priorisieren Sie Bibliotheken, die keine umfangreichen Reflexions-, Serialisierungs- oder nativen Codeaufrufe (JNI) enthalten.
    2. Nach Paketgröße priorisieren. Verwenden Sie den APK Analyzer von Android Studio , um die größten Faktoren für die App-Größe zu ermitteln.
      1. Erstellen Sie ein Release-AAB oder APK, bei dem R8 deaktiviert ist.
      2. Öffnen Sie es im Analyzer und prüfen Sie die dex-Dateien.
      3. Sortieren Sie Pakete nach Größe. Die größten Pakete bieten den höchsten ROI (Return on Investment) für die Optimierung. Wenn Sie diese zuerst optimieren, erzielen Sie zu Beginn des Prozesses die größte Größenreduzierung, sofern diese Bibliotheken keine zu weit gefassten Keep-Regeln haben. Weitere Informationen finden Sie unter Bibliotheken sorgfältig auswählen.
  3. Verhaltensänderungen überprüfen. Führen Sie nach dem Hinzufügen jedes neuen Paketpräfixes umfassende Tests durch, um Regressionen oder unerwartetes Verhalten zu erkennen und zu beheben.
  4. App-Pakete zuletzt hinzufügen. Wenn Ihre App-Pakete nicht viel Reflexion verwenden, nehmen Sie sie in packageScope auf und fügen Sie nach Bedarf schrittweise Keep-Regeln hinzu. Wenn Ihre App-Pakete viel Reflexion verwenden, nehmen Sie sie in packageScope auf und fügen Sie paketweite Keep-Regeln für die erforderlichen Pakete hinzu. Wiederholen Sie die Keep-Regeln, um sie zu verfeinern.
  5. Zur Verwendung von R8 in der gesamten App übergehen. Nachdem die meisten Abhängigkeiten Ihrer App in der packageScope-Deklaration enthalten sind und Ihre App stabil ist, entfernen Sie packageScope, um die gesamte App im vollständigen Modus zu optimieren.