Événements et programmes

Utiliser R8 pour réduire, optimiser et accélérer votre application

Temps de lecture : 5 min
Ben Weiss
Ingénieur chargé des relations avec les développeurs

Utiliser R8 pour réduire, optimiser et accélérer votre application

Bienvenue dans la semaine spéciale sur les performances Android !

Pour commencer, nous allons vous présenter le changement le plus efficace et le plus simple à mettre en œuvre pour améliorer les performances de votre application : activer l'optimiseur R8 en mode complet.

Vous connaissez probablement déjà R8 comme outil permettant de réduire la taille de votre application. Il est très efficace pour supprimer le code et les ressources inutilisés, ce qui réduit la taille de votre application. Mais sa véritable force, celle pour laquelle il est vraiment g-R8, est son rôle d'optimiseur.

Lorsque vous activez le mode complet et autorisez les optimisations, R8 effectue des optimisations approfondies de l'ensemble du programme, en réécrivant votre code pour le rendre fondamentalement plus efficace. Il ne s'agit pas d'un simple ajustement.

Après avoir lu cet article, regardez la présentation de la semaine consacrée aux performances sur l'optimiseur R8 sur YouTube.

Comment R8 améliore les performances de votre application

image.png

Examinons les principales étapes suivies par l'optimiseur R8 pour améliorer les performances de l'application.

Le tree shaking est l'étape la plus importante pour réduire la taille de l'application. Au cours de cette phase, l'optimiseur R8 supprime le code inutilisé des bibliothèques dont votre application dépend, ainsi que le code mort de votre propre codebase.

L'intégration de méthodes remplace un appel de méthode par le code réel, ce qui améliore les performances d'exécution.

La fusion des classes et d'autres stratégies sont appliquées pour rendre le code plus compact. Toutes vos belles abstractions, telles que les interfaces et les hiérarchies de classes, n'ont pas d'importance à ce stade et sont susceptibles d'être supprimées.

La minification du code permet de remplacer les noms des classes, des champs et des méthodes par des noms plus courts et sans signification. Ainsi, au lieu de MyDataModel, vous pouvez obtenir une classe appelée a. C'est ce qui cause le plus de confusion lors de la lecture des traces de pile d'une application optimisée par R8. (Notez que nous avons amélioré cela dans AGP 9.0.)

La réduction des ressources permet de réduire davantage la taille d'une application en supprimant les ressources inutilisées telles que les fichiers XML et les éléments graphiques.

En appliquant ces étapes, l'optimiseur R8 améliore les temps de démarrage des applications, permet un rendu de l'UI plus fluide, avec moins de frames lents et figés, et améliore l'utilisation globale des ressources sur l'appareil.

Étude de cas : amélioration des performances de Reddit avec R8

Pour illustrer les améliorations de performances que R8 peut apporter, prenons un exemple tiré de Reddit. Après avoir activé R8 en mode complet, l'application Reddit pour Android a enregistré des améliorations significatives des performances dans différents domaines.

image.png

Légende : Comment R8 a amélioré les performances de l'application Reddit

L'équipe a observé un démarrage à froid 40 % plus rapide, une réduction de 30 % des erreurs "L'application ne répond pas" (ANR), une amélioration de 25 % du rendu des frames et une réduction de 14 % de la taille de l'application.

Ces améliorations sont essentielles pour la satisfaction des utilisateurs. Un démarrage plus rapide signifie moins d'attente et un accès plus rapide au contenu. Moins d'erreurs ANR signifie une application plus stable et plus fiable, ce qui réduit la frustration des utilisateurs. Le rendu d'images plus fluide élimine les saccades de l'interface utilisateur, ce qui rend le défilement et les animations fluides et réactifs. Cet impact technique positif était également clairement visible dans le sentiment des utilisateurs.

Pour en savoir plus sur ces améliorations, consultez notre blog.

Effets secondaires non techniques de l'utilisation de R8

Au cours de notre collaboration avec nos partenaires, nous avons constaté que ces améliorations techniques ont un impact direct sur la satisfaction des utilisateurs et peuvent se refléter dans la fidélisation, l'engagement et la durée des sessions. La fidélité des utilisateurs, qui peut être mesurée à l'aide des utilisateurs actifs par jour, par semaine ou par mois, a également été positivement affectée par les améliorations des performances techniques. Nous avons également constaté une augmentation des notes des applications sur le Play Store en corrélation avec l'adoption de R8. Partagez ces informations avec vos responsables produit, vos CTO et vos décideurs pour améliorer les performances de votre application.

image.png

Appelons un chat un chat : l'optimisation délibérée des performances est une vertu.

Vous aider à créer une application plus performante

Nous avons constaté que nos conseils pour les développeurs concernant R8 devaient être améliorés. Nous nous sommes donc mis au travail. Les conseils aux développeurs pour l'optimiseur R8 sont désormais beaucoup plus pratiques et fournissent des instructions complètes pour activer et déboguer R8.

La documentation vous guide sur la stratégie d'adoption de haut niveau, en soulignant l'importance de choisir des bibliothèques adaptées à l'optimisation et, surtout, d'adopter les fonctionnalités de R8 de manière incrémentielle pour assurer la stabilité. Cette approche par étapes vous permet de profiter des avantages de R8 en toute sécurité, tout en vous fournissant des conseils sur les problèmes difficiles à déboguer.

Nous avons considérablement étoffé nos conseils sur les règles Keep, qui constituent le principal mécanisme de contrôle de l'optimiseur R8. Nous avons ajouté une section sur les règles Keep, qui explique ce qu'elles sont, comment les appliquer et vous donne des conseils pour les rédiger et les gérer. Nous fournissons également des exemples et des cas d'utilisation pratiques et concrets pour vous aider à comprendre comment empêcher correctement R8 de supprimer le code nécessaire au moment de l'exécution, comme le code auquel vous accédez via la réflexion ou l'utilisation de l'interface native JNI.

La documentation couvre désormais également les étapes de suivi essentielles et les scénarios avancés. Nous avons ajouté une section sur les tests et le dépannage pour vous permettre de vérifier les gains de performances et de résoudre les éventuels problèmes qui se présentent. La section Configurations avancées explique comment cibler des variantes de compilation spécifiques, personnaliser les ressources conservées ou supprimées, et propose des instructions d'optimisation spéciales pour les auteurs de bibliothèques. Vous pouvez ainsi fournir un package optimisé et compatible avec R8 que d'autres développeurs pourront utiliser.

Exploiter tout le potentiel de l'optimiseur R8

Depuis la version 8.0 du plug-in Android Gradle, l'optimiseur R8 utilise par défaut le "mode complet". Si votre projet a été développé au fil de nombreuses années, il peut toujours inclure un ancien indicateur permettant de le désactiver. Recherchez cette ligne dans votre fichier gradle.properties et supprimez-la.

android.enableR8.fullMode=false // delete this line to enable R8's full potential

Vérifiez maintenant si vous avez activé R8 dans le fichier build.gradle.kts de votre application pour la variante de version. Pour l'activer, définissez isMinifyEnabled et isShrinkResources sur "true". Vous pouvez également transmettre des fichiers de configuration par défaut et personnalisés à cette étape.

  release {

   isMinifyEnabled = true

   isShrinkResources = true

   proguardFiles(

       getDefaultProguardFile("proguard-android-optimize.txt"),

       "keep-rules.pro"

   )

}

Étude de cas : Améliorations des performances de Disney+

Les ingénieurs de Disney+ investissent dans les performances de l'application et optimisent l'expérience utilisateur. Parfois, même des changements apparemment minimes peuvent avoir un impact énorme. En inspectant leur configuration R8, l'équipe a constaté que l'indicateur -dontoptimize était utilisé. Il a été introduit par un fichier de configuration par défaut, qui est encore utilisé dans de nombreuses applications aujourd'hui.

Après avoir remplacé proguard-android.txt par proguard-android-optimize.txt, l'équipe Disney+ a constaté une amélioration significative des performances de son application.

image.png

Après le déploiement d'une nouvelle version de l'application contenant cette modification auprès des utilisateurs, Disney+ a constaté un démarrage de l'application 30 % plus rapide et 25 % d'erreurs ANR perçues par les utilisateurs en moins. 

Aujourd'hui, de nombreuses applications utilisent encore le fichier proguard-android.txt qui contient l'indicateur -dontoptimize. C'est là qu'interviennent nos améliorations des outils.

Outils compatibles

À partir de la mise à jour groupée Android Studio Narwhal 3, un avertissement Lint s'affiche lorsque vous utilisez proguard-android.txt.

image.png

À partir d'AGP 9.0, nous cesserons complètement de prendre en charge ce fichier. Vous devrez donc migrer vers proguard-android-optimize.txt.

Nous avons également investi dans de nouvelles fonctionnalités Android Studio pour faciliter le débogage du code optimisé par R8. À partir d'AGP 9.0, vous pouvez désormais dés-obfusquer automatiquement les traces de pile dans Logcat d'Android Studio pour les builds traités par R8. Cela vous aide à identifier la ligne de code exacte à l'origine d'un problème, même dans une application entièrement optimisée. Nous aborderons ce point plus en détail dans l'article de blog de demain sur cette semaine Android Performance Spotlight.

Étapes suivantes

Découvrez l'introduction à la semaine consacrée aux performances et à l'optimiseur R8 sur YouTube.

📣 Relevez le défi des performances !

Il est temps de découvrir les avantages par vous-même.

Nous vous invitons à activer le mode complet R8 pour votre application dès aujourd'hui.

  1. Pour commencer, suivez nos guides du développeur :  Activer l'optimisation des applications.
  2. Vérifiez si vous utilisez encore proguard-android.txt et remplacez-le par proguard-android-optimize.txt.
  3. Ensuite, mesurez l'impact. Ne vous contentez pas de sentir la différence, vérifiez-la. Mesurez vos gains de performances en adaptant le code de notre  exemple d'application Macrobenchmark sur GitHub pour mesurer vos temps de démarrage avant et après.

Nous sommes certains que vous constaterez une amélioration significative des performances de votre application. Utilisez #optimizationEnabled pour toute question sur l'activation ou le dépannage de R8. Nous sommes là pour vous aider.

Posez vos questions lors de la session "Ask Android" de vendredi

Utilisez le tag #AskAndroid pour poser des questions sur les performances. Tout au long de la semaine, nous surveillons vos questions et répondrons à plusieurs d'entre elles lors de la session "Demandez à Android" sur les performances, le vendredi 21 novembre. Rendez-vous demain pour en savoir plus sur le débogage et la résolution des problèmes. Pour l'instant, commencez par R8 et accélérez le développement de votre application.

Écrit par :

Lire la suite