Optimiser les packages spécifiés avec packageScope (expérimental)

Vous pouvez optimiser des packages spécifiques à l'aide de R8 avec packageScope. Il s'agit d'une première étape facultative pour les applications qui n'utilisent pas encore R8. Elle n'est pas recommandée pour les applications qui utilisent déjà R8.

Déterminez si vous devez utiliser packageScope.

Si votre application utilise déjà R8, n'utilisez pas packageScope, car il s'agit d'une configuration sous-optimale en termes de performances et de taille de l'application. Améliorez plutôt la configuration R8 de votre application avec des règles de conservation améliorées ou, si vous utilisez le mode compatibilité, en migrant vers le mode complet de R8.

Pour les applications qui n'utilisent pas encore R8, mais qui l'adoptent, utilisez packageScope pour gérer la transition de manière incrémentielle. Étant donné que R8 applique des optimisations puissantes qui peuvent modifier le comportement de l'application, limiter ces optimisations à des packages spécifiques qui peuvent être optimisés de manière sécurisée (tels qu'AndroidX et Kotlin) vous permet d'améliorer les performances avec un risque minimal. Une fois votre application stable, vous pouvez étendre progressivement ces optimisations au reste de votre codebase et de vos dépendances, en testant la stabilité à chaque étape.

Prérequis

L'utilisation de R8 avec packageScope nécessite le plug-in Android Gradle 9.0 ou version ultérieure.

Configurer l'optimisation

Pour activer l'optimisation avec packageScope, procédez comme suit.

Choisir les bibliothèques à optimiser

Identifiez les bibliothèques à optimiser. Nous vous recommandons de commencer par les bibliothèques AndroidX et Kotlin androidx.**, kotlin.** et kotlinx.**, car il s'agit de bibliothèques stables qui ont été configurées pour être compatibles avec R8.

Activer la prise en charge de l'utilisation de R8 avec packageScope

Ajoutez le code suivant au fichier gradle.properties de votre projet :

android.r8.gradual.support=true

Configurer le bloc d'optimisation

Dans votre fichier build.gradle.kts (ou build.gradle) au niveau du module, ajoutez un bloc optimization à votre configuration de compilation de version. Dans ce bloc, utilisez packageScope pour lister les packages spécifiques que vous souhaitez optimiser. Dans votre fichier build.gradle.kts, enveloppez votre liste de packages dans 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.**"]
      }
    }
  }
}

Tester l'optimisation

Après avoir appliqué ou mis à jour la déclaration packageScope, testez minutieusement votre application pour vérifier qu'aucun plantage ou changement de comportement inattendu ne s'est produit.

Passer de l'optimisation de packages spécifiques à l'optimisation de l'ensemble de votre application

Pour maximiser les avantages de l'optimisation, vous devez essayer de passer progressivement de l'utilisation de packageScope à celle de R8 dans l'ensemble de votre application. Ce processus implique d'étendre progressivement votre couverture d'optimisation :

  1. Commencez par les bibliothèques stables. Commencez par n'inclure que les bibliothèques stables et largement utilisées qui sont compatibles avec les optimisations de R8 dans la liste packageScope. Commencez par les bibliothèques AndroidX et Kotlin androidx.**, kotlin.** et kotlinx.**.
  2. Ajoutez des packages de manière incrémentielle. Ajoutez progressivement de nouveaux préfixes de package à packageScope :
    1. Évaluez les dépendances. Examinez les bibliothèques de votre application. Les bibliothèques Google officielles (par exemple, com.google.**) et d'autres bibliothèques robustes comme OkHttp (par exemple, okhttp3.** et okio.**) sont de bons candidats à ajouter à la liste packageScope. Privilégiez les bibliothèques qui n'impliquent pas de réflexion, de sérialisation ou d'appels de code natif (JNI) importants.
    2. Priorisez en fonction de la taille du colis. Utilisez l'analyseur d'APK d'Android Studio pour identifier les principaux facteurs contribuant à la taille de votre application. 1. Créez un AAB ou un APK de version avec R8 désactivé. 1. Ouvrez-le dans l'analyseur et inspectez les fichiers dex. 1. Triez les packages par taille. Les plus grands packages offrent le meilleur retour sur investissement (ROI) pour l'optimisation. Cibler ces bibliothèques en premier vous permet de réduire la taille de votre application de manière significative dès le début du processus, à condition que ces bibliothèques ne comportent pas de règles de conservation trop larges. Pour en savoir plus, consultez Choisir judicieusement les bibliothèques.
  3. Vérifiez les changements de comportement. Après avoir ajouté chaque nouveau préfixe de package, effectuez des tests complets pour détecter et résoudre toute régression ou tout comportement inattendu.
  4. Ajoutez les packages d'applis en dernier. Si vos packages d'application n'utilisent pas beaucoup de réflexion, incluez-les dans packageScope et ajoutez des règles de conservation de manière incrémentielle, selon les besoins. Si vos packages d'application utilisent beaucoup de réflexion, incluez les packages dans packageScope et ajoutez des règles de conservation à l'échelle du package pour les packages requis. Itérez sur les règles de conservation pour les affiner.
  5. Passez à l'utilisation de R8 dans l'ensemble de votre application. Une fois que la majorité des dépendances de votre application sont incluses dans la déclaration packageScope et que votre application est stable, supprimez packageScope pour optimiser l'ensemble de votre application en mode complet.