É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 en relations avec les développeurs

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

Bienvenue au premier jour de la semaine spéciale performances Android !

Nous commençons par le changement le plus efficace et le plus simple que vous pouvez apporter 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 supprime efficacement 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'une simple modification.

Après avoir lu cet article, regardez l'introduction de la semaine spéciale 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 base de code.

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 de 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 plus 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 vous retrouver avec 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 réduit davantage la taille d'une application en supprimant les ressources inutilisées, telles que les fichiers XML et les éléments dessinables.

En appliquant ces étapes, l'optimiseur R8 améliore les temps de démarrage de l'application, permet un affichage plus fluide de l'interface utilisateur, avec moins d'images lentes et figées, 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 l'exemple 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 images 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 permettent d'obtenir une application plus stable et plus fiable, ce qui réduit la frustration des utilisateurs. Un rendu plus fluide des images élimine les à-coups de l'interface utilisateur, ce qui rend le défilement et les animations plus 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

Lors de notre collaboration avec des partenaires, nous avons constaté que ces améliorations techniques ont un impact direct sur la satisfaction des utilisateurs et peuvent se traduire par une meilleure rétention des utilisateurs, un meilleur engagement et une durée de session plus longue. La fidélité des utilisateurs, qui peut être mesurée avec les utilisateurs actifs quotidiens, hebdomadaires ou mensuels, a également été affectée positivement 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. Partager ces informations avec vos responsables produit, vos CTO et vos décideurs peut vous aider à accélérer les performances de votre application.

image.png

Alors, 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 entendu dire que nos conseils aux développeurs pour 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 exploitables et fournissent des conseils complets 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 compatibles avec l'optimisation et, surtout, d'adopter les fonctionnalités de R8 de manière progressive pour garantir la stabilité. Cette approche progressive vous permet de profiter en toute sécurité des avantages de R8 tout en vous fournissant des conseils sur les problèmes difficiles à déboguer.

Nous avons considérablement développé nos conseils sur les règles de conservation, qui constituent le principal mécanisme de contrôle de l'optimiseur R8. Nous fournissons désormais une section sur les règles de conservation, sur la manière de les appliquer et sur les bonnes pratiques à suivre pour les écrire et les gérer. Nous fournissons également des cas d'utilisation et des exemples pratiques et exploitables, qui vous aident à comprendre comment empêcher correctement R8 de supprimer le code nécessaire au moment de l'exécution, tel que le code auquel vous accédez par réflexion ou par 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 la résolution des problèmes, afin que vous puissiez vérifier les gains de performances et déboguer les problèmes potentiels. La section sur les 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

L'optimiseur R8 utilise par défaut le "mode complet" depuis la version 8.0 du plug-in Android Gradle. Si votre projet a été développé sur plusieurs années, il peut encore 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 publication. 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élioration 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. Lors de l'inspection de 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é des améliorations significatives 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% moins d'erreurs ANR perçues par les utilisateurs. 

Aujourd'hui, de nombreuses applications utilisent encore le fichier proguard-android.txt qui contient l'indicateur -dontoptimize. C'est là que nos améliorations d'outils entrent en jeu.

Assistance pour les outils

À partir de la mise à jour groupée Android Studio Narwhal 3, vous verrez un avertissement lint lorsque vous utiliserez proguard-android.txt 

image.png

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

Nous avons également investi dans de nouvelles fonctionnalités d'Android Studio pour faciliter le débogage du code optimisé par R8. À partir d'AGP 9.0, vous pouvez désormais désobscurcir automatiquement les traces de pile dans logcat d'Android Studio pour les builds traités par R8, ce qui vous permet d'identifier la ligne de code exacte à l'origine d'un problème, même dans une application entièrement optimisée. Ce sujet sera abordé plus en détail dans l'article de blog de demain sur cette semaine spéciale performances Android.

Étapes suivantes

Regardez l'introduction de la semaine spéciale performances sur l'optimiseur R8 sur YouTube.

📣 Relevez le défi des performances !

Il est temps de constater les avantages par vous-même.

Nous vous mettons au défi d'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 toujours proguard-android.txt et remplacez-le par proguard-android-optimize.txt.
  3. Ensuite, mesurez l'impact. Ne vous contentez pas de ressentir la différence, vérifiez-la. Mesurez vos gains de performances en adaptant le code de notre application exemple Macrobenchmark sur GitHub pour mesurer vos temps de démarrage avant et après.

Nous sommes convaincus 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 social #AskAndroid pour poser vos 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 Ask Android sur les performances le vendredi 21 novembre. Restez à l'écoute pour demain, où nous aborderons plus en détail le débogage et le dépannage. Mais pour l'instant, commencez à utiliser R8 et accélérez le développement de votre application.

Écrit par :

Lire la suite