Résoudre les problèmes de performances de compilation avec Build Analyzer

Build Analyzer permet d'inspecter les performances de compilation de votre projet. Pour chaque build que vous exécutez, Build Analyzer tente de présenter les informations les plus importantes afin que vous puissiez rapidement identifier et résoudre les régressions dans vos performances de compilation.

Pour découvrir d'autres stratégies permettant d'améliorer les performances de compilation, consultez Optimiser la vitesse de compilation.

Premiers pas

Chaque fois que vous compilez l'application, Build Analyzer crée un rapport et affiche les données du dernier rapport dans la fenêtre Build (Compiler).

Pour commencer, procédez comme suit :

  1. Si vous ne l'avez pas déjà fait, créez votre application de l'une des manières suivantes :
    • Dans la barre de menu, cliquez sur Build > Make project (Compilation > Créer un projet).
    • Pour créer un Android App Bundle (AAB) ou un Android Application Package (APK), cliquez sur Build > Build Bundle(s) / APK(s) > Build Bundle(s) (Compilation > Compiler des bundle(s)/APK > Compiler des bundles) ou sur Build > Build Bundle(s) / APK(s) > Build APK(s) (Compilation > Compiler des bundle(s)/APK > Compiler des APK) dans la barre de menu.
  2. Pour ouvrir la fenêtre Build (Compilation), sélectionnez View > Tool Windows > Build (Vue > Fenêtres d'outils > Compilation) dans la barre de menu.
  3. Pour afficher le rapport de compilation dans Build Analyzer, cliquez sur l'onglet Build Analyzer dans la fenêtre Build (Compilation).

Les données présentées par Build Analyzer peuvent changer d'une compilation à l'autre. Il est donc utile de compiler votre projet plusieurs fois et de les comparer pour identifier des modèles.

Afficher les plug-ins avec les tâches qui déterminent la durée de compilation

Lorsque vous ouvrez Build Analyzer pour la première fois après une compilation, la fenêtre affiche un aperçu de l'analyse de la compilation, comme illustré à la figure 1.

Figure 1 : La page d'aperçu de Build Analyzer résume les résultats de la compilation

Pour afficher la répartition des plug-ins dont les tâches déterminent la durée de compilation, cliquez sur Plugins with tasks impacting build duration (Plug-ins avec des tâches ayant une incidence sur la durée de compilation) sur la page d'aperçu. Vous pouvez également sélectionner Tasks (Tâches) dans le menu déroulant et confirmer le regroupement par plug-in. Le graphique classe les plug-ins et leurs tâches associées en fonction du temps total d'exécution.

Figure 2 : Build Analyzer fournit une liste des plug-ins qui affectent la durée de votre compilation.

Afficher les tâches qui déterminent la durée de compilation

Pour afficher la répartition des tâches qui contribuent à la durée de votre compilation, cliquez sur Tasks impacting build duration (Tâches ayant une incidence sur la durée de la compilation) sur la page d'aperçu ou sélectionnez Tasks (Tâches) dans le menu déroulant. Si votre projet utilise AGP 8.0 ou une version ultérieure, les tâches sont regroupées par catégorie par défaut. Il est donc plus facile d'identifier les domaines qui ont une incidence sur la durée de compilation. Cliquez sur chaque tâche enfant pour en savoir plus sur son exécution.

Figure 3. Build Analyzer fournit une liste des tâches impactant le plus la durée de la compilation

Inspecter les avertissements

Si Build Analyzer détecte que certaines tâches peuvent être configurées pour s'exécuter plus efficacement, il émet un avertissement. Pour afficher tous les avertissements identifiés par Build Analyzer pour votre build, cliquez sur Allwarnings (Tous les avertissements) sur la page d'aperçu ou sur Warnings (Avertissements) dans le menu déroulant.

Certains avertissements comportent un lien Générer un rapport, comme illustré dans la figure 4. Lorsque vous cliquez sur le lien Generate report (Générer un rapport), une boîte de dialogue contenant des informations supplémentaires s'affiche. Elle peut aider le développeur du plug-in à résoudre le problème dans une nouvelle version du plug-in. Cliquez sur Copy (Copier) pour enregistrer le texte dans le presse-papiers, puis collez plus facilement les informations dans un rapport de bug pour le développeur du plug-in.

Figure 4 : Informations détaillées sur les avertissements de Build Analyzer.

Types d'avertissements

Build Analyzer signale les types d'avertissement suivants :

  • Always run tasks(Toujours exécuter des tâches) : une tâche en cours d'exécution exécute d'autres tâches à chaque compilation, ce qui n'est pas nécessaire. Cet avertissement peut s'afficher pour deux raisons principales :

    • (Scénario le plus courant) Vous n'avez pas déclaré correctement les entrées et les sorties des tâches. Dans ce cas, vous devez déclarer correctement les entrées et les sorties de vos tâches. Cela signifie que vous devez déclarer vous-même les entrées et les sorties là où vous le pouvez, ou modifier les versions des plug-ins si les tâches qui déclenchent l'avertissement proviennent de plug-ins tiers.

    • (Scénario le moins courant) La valeur upToDateWhen d'une tâche est définie sur "false", ce qui doit être évité. Il se peut qu'une logique renvoie la valeur "false" ou que upToDateWhen soit codé en dur pour être définie sur "false". Si une logique renvoie la valeur "false", ce résultat peut être intentionnel et vous pouvez choisir d'ignorer l'avertissement. Si la valeur upToDateWhen est codée en dur pour être définie sur "false", supprimez le codage en dur de votre code.

  • Task setup issues (Problèmes de configuration des tâches) : cet avertissement est généré pour les tâches qui déclarent le même répertoire que les sorties. Cela signifie que les sorties de ces tâches ne seront probablement pas conservés entre les builds. Ces tâches seront toujours exécutées, même en l'absence de modifications. Pour résoudre cet avertissement, déclarez des répertoires de sortie différents pour vos tâches. Cela signifie que vous devez déclarer vous-même des répertoires de sortie différents ou modifier les versions des plug-ins si les tâches qui déclenchent l'avertissement proviennent de plug-ins tiers.

  • Non-incremental annotation processor (Processeur d'annotations non incrémentiels) : cet avertissement est généré dans les situations où un processeur d'annotations n'est pas incrémentiel et entraîne l'exécution systématique non-incrémentielle de la tâche JavaCompile. Pour résoudre cet avertissement, passez à un processeur d'annotations incrémentielles.

  • Configuration cache (Cache de configuration) : cet avertissement s'affiche si la mise en cache de la configuration n'est pas activée pour votre projet. Build Analyzer parcourt une séquence de builds pour vérifier si votre projet est compatible avec la mise en cache de la configuration. Si les vérifications de compatibilité aboutissent, vous pouvez activer la mise en cache de la configuration dans Build Analyzer.

  • Check Jetifier (Vérifier Jetifier) : cet avertissement s'affiche si l'indicateur enableJetifier est présent et activé dans votre projet, c'est-à-dire si android.enableJetifier=true se trouve dans le fichier gradle.properties. L'outil Build Analyzer peut vérifier si l'indicateur peut être supprimé en toute sécurité pour améliorer les performances de compilation de votre projet et migrer le système pour ne plus avoir recours à des bibliothèques Android Support qui ne font plus l'objet d'une maintenance.

Vérifier l'impact des téléchargements

Build Analyzer fournit un résumé de la durée de téléchargement des dépendances et une vue détaillée des téléchargements par dépôt. Pour vérifier l'impact des téléchargements, sélectionnez Downloads (Téléchargements) dans le menu déroulant. Ces informations sont également disponibles dans la fenêtre Sync (Synchronisation).

Vous pouvez utiliser ces informations pour déterminer si des téléchargements de dépendances inattendus ont un impact négatif sur vos performances de compilation. C'est particulièrement important lors de compilations incrémentielles où des artefacts ne devraient pas être systématiquement téléchargés.

Plus précisément, vous pouvez utiliser ces informations pour identifier les problèmes de configuration (par exemple, l'utilisation de versions dynamiques de dépendances entraînant des téléchargements inattendus). De plus, si vous constatez que beaucoup de requêtes ont échoué pour un dépôt spécifique, cela peut signifier que celui-ci doit être supprimé ou déplacé plus bas dans la configuration.

Figure 5 : Build Analyzer montre l'impact des téléchargements sur la durée de compilation.

[Windows uniquement] Vérifier l'impact des logiciels antivirus

Build Analyzer vous indique si un logiciel antivirus est susceptible d'affecter vos performances de compilation. Cela peut se produire si un logiciel antivirus, tel que Windows Defender, effectue une analyse en temps réel des répertoires utilisés par Gradle. Build Analyzer recommande une liste de répertoires à exclure de l'analyse active et, si possible, propose un lien pour les ajouter à la liste d'exclusion de dossiers Windows Defender.