Études de cas

Tinder réduit de 47% les démarrages à froid de son application grâce au nouvel outil d'analyse de la configuration R8

Temps de lecture : 4 min

Tinder s'est donné pour mission de favoriser et d'inspirer de vraies rencontres en les rendant faciles et amusantes pour chaque nouvelle génération de célibataires. Cependant, à mesure que le codebase de son application Android s'est développé, sa complexité a augmenté. Avant ses derniers efforts d'optimisation, environ 70% de l'application n'était pas optimisée, avec 17 fichiers dex,dont trois dédiés uniquement au démarrage. Bien qu'elle ait activé R8, une grande partie de son potentiel d'optimisation était bloquée par des règles de conservation, et l'équipe n'arrivait pas à identifier les règles spécifiques qui empêchaient l'optimisation. Pour réduire le temps de démarrage et les erreurs L'application ne répond pas (ANR) perçues par l'utilisateur, Tinder s'est tourné vers le nouvel outil d'analyse de configuration R8.

En utilisant l'analyseur de configuration R8, Tinder a réussi à identifier et à supprimer les éléments qui bloquaient involontairement l'optimisation. Les résultats ont été immédiats et significatifs : Tinder a réduit de 47% les démarrages à froid de l'application, de 28,98 % la taille de téléchargement de l'application (jusqu'à 61,5 Mo) et de 28 % les erreurs ANR perçues par l'utilisateur.

Analyseur de configuration 

L'analyseur de configuration R8 affiche l'optimisation R8 en suivant les scores de minification, d'optimisation et d'obscurcissement pour indiquer les domaines d'amélioration disponibles. Il affiche les règles de conservation larges, redondantes ou obsolètes, y compris celles des bibliothèques externes, afin que vous puissiez analyser l'impact des règles de conservation et les affiner.

Les métriques clés affichées dans l'Analyseur de configuration incluent :

  • Score de réduction : pourcentage de code disponible pour la réduction R8.
  • Score d'optimisation : pourcentage de code ouvert à l'optimisation (par exemple, intégration de méthodes, fusion de classes horizontales).
  • Score d'obscurcissement : pourcentage de classes, de méthodes et de champs pouvant être renommés par R8 pour réduire la taille.

Utilisez l'analyseur pour auditer les règles de conservation et leurs impacts :

  • Rechercher des règles générales : limitez le champ d'application des règles à l'échelle du package qui restreignent l'optimisation R8, et identifiez les classes, méthodes et champs spécifiques exclus de la minification, de l'optimisation et de l'obscurcissement.
  • Affiner les règles : ciblez uniquement les classes/méthodes spécifiques nécessitant une réflexion pour débloquer l'optimisation.
  • Supprimer les règles redondantes : supprimez les règles qui ne correspondent à aucune classe, méthode ou champ de votre build actuel.
  • Règles identiques : les règles de conservation identiques sont des règles qui ciblent les mêmes classes, champs et méthodes, ou des déclarations en double de règles de conservation dans un même fichier ou dans plusieurs fichiers de règles de conservation.
  • Rechercher les règles subsumées : nettoyez les règles spécifiques déjà couvertes par des configurations plus larges.
  • Identifier les bibliothèques problématiques : vérifiez l'impact combiné sur l'optimisation des règles de conservation des consommateurs fusionnées de toutes les bibliothèques.
R8-Configuration-Analyzer-Screenshot.png
Rapport de l'outil d'analyse de la configuration R8 d'un exemple d'application

Pour vous aider à utiliser l'analyseur de configuration R8 avec des outils d'agent, nous avons publié une compétence d'analyse R8. Cette compétence optimise les workflows de développement automatisés en résumant le rapport de l'analyseur de configuration R8 pour afficher les métriques clés : les scores d'optimisation, d'obscurcissement et de minification. Il met également en évidence les cinq règles de conservation les plus importantes, ce qui vous permet de comprendre clairement ce qui bloque l'optimisation du code.

Identifier les obstacles cachés à l'optimisation

image.png

Avant d'intégrer l'outil d'analyse de la configuration R8, l'application Android de Tinder souffrait d'une dette technique importante en raison d'un codebase très peu optimisé. Ce manque d'optimisation a directement dégradé l'expérience utilisateur, entraînant des démarrages à froid lents. 

Pour résoudre ces problèmes, l'équipe Tinder a utilisé l'analyseur de configuration R8 afin d'auditer de manière exhaustive sa configuration R8. L'analyseur a montré que l'optimisation R8 de la codebase était d'environ 28 %, même avec le mode complet de R8. Grâce à l'analyseur de configuration R8, Tinder a identifié qu'une bibliothèque interne introduisait une règle de conservation large et sans portée. 

# Prevents optimization in all public classes along with all of their public and protected members

-keep public class * {
    public protected *;
}

Cette règle "large" couvrait involontairement diverses dépendances dans l'ensemble de l'application, ce qui empêchait l'optimisation d'un grand nombre de classes. Comme la règle trop inclusive empêchait les plantages au moment de l'exécution, les développeurs oubliaient souvent d'ajouter de nouvelles règles pour les nouvelles fonctionnalités qui utilisaient la réflexion, ce qui permettait aux problèmes cachés de s'accumuler au fil du temps.

En exploitant les insights fournis par l'analyseur de configuration R8, l'équipe a pu identifier et analyser les classes spécifiques concernées par la règle de conservation générale de la bibliothèque. L'équipe a immédiatement découvert que l'optimisation était bloquée dans les classes plus volumineuses, non appelées de manière dynamique, où R8 pouvait effectuer l'optimisation. En affinant cette règle de conservation spécifique, Tinder a pu débloquer d'importantes capacités d'optimisation, démêler ses anciennes configurations et améliorer considérablement ses chiffres d'optimisation globaux, avec des scores R8 passant de 28% à 50%, ce qui a permis d'améliorer immédiatement les performances de l'application. L'équipe Tinder travaille activement à l'amélioration de ce chiffre.

  • Chargement plus rapide : l'équipe a réduit de 47% le nombre d'utilisateurs subissant des démarrages à froid lents de l'application.
  • Empreinte réduite : la taille de téléchargement de l'application est passée de 86,6 Mo à 61,5 Mo (soit une diminution de 28,98 %).
  • Stabilité améliorée : les erreurs ANR (L'application ne répond pas) perçues par l'utilisateur ont diminué de 0,35% à 0,28%, ce qui les rapproche considérablement des chiffres médians des applications similaires.
  • Complexité réduite : le nombre total de fichiers DEX est passé de 17 à 11, dont seulement deux fichiers de démarrage.

Au-delà de ces améliorations techniques, l'optimisation de l'application s'est directement traduite par une croissance commerciale tangible et un engagement utilisateur accru, en particulier sur les marchés aux ressources limitées.

  • Engagement régional : les pays où les appareils à faible RAM représentent une part importante du marché ont enregistré la plus forte augmentation de l'engagement. La réduction des taux d'erreurs ANR a été essentielle pour améliorer l'engagement sur ce vaste marché.
  • Croissance de l'engagement : l'engagement a augmenté de 3% depuis l'amélioration de l'optimisation de l'application.
image.png

Garantir les performances futures grâce à l'intégration continue

La minimisation du code n'est pas une solution ponctuelle. Elle nécessite une vigilance continue. Inspirée par les gains considérables obtenus grâce à l'analyseur de configuration R8, l'équipe Android de Tinder a intégré de manière proactive la surveillance de l'optimisation dans son workflow quotidien afin d'éviter les régressions.

L'équipe de Tinder a ajouté une nouvelle tâche à son pipeline CI/CD pour signaler les modifications apportées aux statistiques d'optimisation. Ainsi, chacun peut voir l'impact de sa contribution sur l'optimisation. Lorsqu'elle conseille d'autres développeurs qui envisagent d'intégrer la configuration R8, l'équipe souligne l'importance d'auditer les dépendances internes. Bien que la plupart des bibliothèques tierces populaires soient fournies avec des règles bien définies, les projets d'entreprise internes considérés comme "stables" peuvent en réalité introduire des règles larges qui ont un impact négatif sur l'optimisation globale.

Points clés à retenir

Confronté à un codebase très peu optimisé et à un volume élevé de fichiers DEX, Tinder avait besoin d'un moyen d'auditer proprement les règles de minimisation de son application. L'analyseur de configuration R8 a fourni les outils idéaux pour identifier les règles de bibliothèque interne trop larges et les classes concernées par la règle de conservation, ce qui a permis à l'équipe d'optimiser sa codebase en toute confiance. Tinder a ainsi réussi à réduire de près de moitié les démarrages à froid, à réduire la taille de son APK de plus de 28 % et à établir une base plus saine et plus performante pour ses utilisateurs. L'équipe s'efforce d'améliorer encore ces chiffres.

Utiliser l'outil d'analyse de la configuration R8

L'outil d'analyse de la configuration R8 et ses fonctionnalités autonomes peuvent être utilisés en fonction de votre version actuelle du plug-in Android Gradle (AGP) :

1. Version AGP 9.3 : l'outil d'analyse de la configuration R8 est entièrement intégré et publié avec AGP 9.3. Lors de l'exécution d'un build de release R8, le rapport est généré dans le dossier `build/outputs/mapping/release/configanalyzer.html`.

2. Tâche Gradle autonome : AGP 9.3 introduit une tâche Gradle autonome qui vous permet de générer le rapport de l'analyseur sans exécuter de build de version complet. Vous bénéficiez ainsi d'une boucle de rétroaction beaucoup plus rapide lorsque vous affinez les règles de conservation localement :

./gradlew :app:analyzeReleaseR8Config

Le rapport est généré à build/reports/r8/r8-config-analyzer-release.html..

3. Utilisation sur les anciennes versions d'AGP : si vous utilisez une version antérieure à AGP 9.3, vous n'avez pas besoin de migrer l'intégralité de votre version d'AGP pour analyser votre configuration. Vous pouvez mettre à jour la version de R8 indépendamment vers la version 9.3.7-dev ou une version ultérieure en suivant les instructions pour remplacer R8 dans AGP. Pour générer le rapport localement, exécutez votre compilation avec la propriété spécifiée :

./gradlew assembleRelease  -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>

Pour en savoir plus, consultez la documentation sur l'analyseur de configuration R8.

Written by:
Continuer la lecture