Le plug-in Dependency Analysis Gradle (DAGP, née Dependency Analysis Android Gradle Plugin) détecte les éléments suivants :
Dépendances inutilisées.
Dépendances transitives utilisées (que vous souhaiterez peut-être déclarer directement).
Dépendances déclarées sur une mauvaise configuration ( api
vs implementation
vs compileOnly
, etc.).
Comme effet secondaire, le plugin peut également vous indiquer l'ABI de votre projet et produit, entre autres, des fichiers graphviz représentant diverses vues de votre graphe de dépendances. Ces effets secondaires sont actuellement pour la plupart des comportements internes non documentés, mais ils peuvent être intéressants pour certains utilisateurs avancés.
En plus des conseils liés à la dépendance (voir ci-dessus), DAGP fournit d'autres conseils pour vous aider à maintenir votre « santé bâtie ». Cela inclut la détection de :
Plugins inutiles (actuellement uniquement kapt
).
Sous-projets ("modules") qui utilisent inutilement le plugin Android, et pourraient plutôt utiliser des bibliothèques JVM "normales".
Veuillez consulter le wiki pour plus d'informations sur les versions de Gradle, du plugin Android Gradle, etc., avec lesquelles ce plugin est compatible.
Pour des instructions détaillées, consultez le wiki.
L'approche la plus simple consiste à ajouter ce qui suit :
plugins {
id( " com.autonomousapps.build-health " ) version " <<latest_version>> "
}
Important | Si votre projet utilise Kotlin ou Android (ou les deux), alors ces plugins doivent également être chargés dans le chargeur de classe de script de paramètres (ou un parent). Voir le wiki pour plus d'informations |
Pour un démarrage rapide, exécutez simplement ce qui suit :
./gradlew buildHealth
Vous verrez probablement un résultat semblable à celui-ci :
> Tâche : buildHealth ÉCHEC ÉCHEC : la construction a échoué avec une exception. * Qu'est-ce qui n'a pas fonctionné : L'exécution a échoué pour la tâche ':buildHealth'. > Il y a eu des violations de dépendance. Voir le rapport à l'adresse file:///path/to/project/build/reports/dependency-analysis/build-health-report.txt
Si vous souhaitez imprimer ce rapport (potentiellement très long) sur la console, ajoutez ceci à votre fichier gradle.properties
:
dependency.analysis.print.build.health=true
Vous n'êtes pas obligé d'appliquer ce plugin à tous les projets via le script de paramètres. Il peut également être appliqué uniquement à des sous-projets spécifiques. Dans ce cas, il doit également être appliqué au script de build racine.
plugins {
id( " com.autonomousapps.dependency-analysis " ) version " <<latest_version>> "
}
plugins {
id( " com.autonomousapps.dependency-analysis " )
}
Important | Si votre projet utilise Kotlin ou Android (ou les deux), alors ces plugins doivent également être chargés dans le chargeur de classe de script de build racine (ou un parent). Voir le wiki pour plus d'informations |
L'analyse peut être exécutée sur des modules individuels avec la tâche projectHealth
. Par exemple:
./application gradlew :projectHealth
Il est courant que le plugin signale de nombreux problèmes avec les déclarations de dépendances de votre projet. Étant donné que la réparation manuelle peut être fastidieuse, le plugin propose également une tâche pour résoudre automatiquement tous les problèmes.
./gradlew fixDépendances
La tâche fixDependencies
est enregistrée sur chaque projet où le plugin est appliqué. L’exécuter comme ci-dessus exécutera la tâche dans chaque sous-projet. Voir également Correction des dépendances en un clic .
Dans certaines circonstances, il peut être considéré comme impossible de résoudre tous les problèmes en une seule fois. Peut-être avez-vous un très gros projet ou publiez-vous des bibliothèques et savez-vous que la modification de vos déclarations de dépendances modifiera également les métadonnées de vos bibliothèques, ce qui pourrait briser les consommateurs. Pour prendre en charge ce cas d'utilisation, la tâche fixDependencies
prend un indicateur facultatif pour lui indiquer, essentiellement, d'effectuer uniquement des modifications « sûres ».
./gradlew fixDependencies --upgrade
Avec cet indicateur en place, la tâche fixDependencies
ne supprimera ni ne « rétrogradera » aucune déclaration de dépendance. Il ne fera qu'ajouter ou "mettre à niveau" les déclarations (par exemple, de implementation
à api
).
Dans un scénario de déploiement incrémentiel, on pourrait imaginer utiliser l'indicateur --upgrade
, puis mettre à jour tous les consommateurs, puis enfin supprimer l'indicateur et supprimer toutes les dépendances inutilisées.
Si l'analyse comporte des bogues, la correction des déclarations de dépendance interrompt votre build (mais c'est également le cas avec les correctifs manuels). Si vous rencontrez ce problème, veuillez signaler un problème.
De plus, la fonctionnalité de réécriture est basée sur une grammaire DSL Gradle Groovy/Kotlin simplifiée, qui échouera en présence de scripts de construction complexes. Nous prévoyons d'améliorer bientôt la grammaire Gradle Kotlin DSL, car il s'agit du langage de script de construction par défaut, mais nous n'avons pas actuellement l'intention de faire de même pour Gradle Groovy DSL.
Vous pourriez être curieux de savoir pourquoi le plugin émet (ou n'émet pas) des conseils concernant certaines dépendances. Vous pouvez lui demander pourquoi :
./gradlew lib:reason --id com.squareup.okio:okio:2.2.2 (1) > Tâche :lib:raison --------------------------------------------- Vous avez posé des questions sur la dépendance « com.squareup.okio:okio:2.2.2 ». Il n'y a aucun conseil concernant cette dépendance. --------------------------------------------- Chemin le plus court de :lib à com.squareup.okio:okio:2.2.2 : :lib --- com.squareup.okio:okio:2.2.2 Source : principale ------------ * Expose la classe okio.BufferedSource (implique l'API).
La chaîne de version est facultative.
Pour des informations détaillées sur la façon de configurer le plugin, consultez le wiki.
Pour configurer le plugin, utilisez l'extension dependencyAnalysis
.
dependencyAnalysis {
// configuration goes here
}
Ce qui suit est une liste d'articles/posts de blog qui ont été publiés sur ce plugin :
Les soins et l'alimentation appropriés de votre build Gradle
Plugin Gradle d'analyse des dépendances : utilisation de l'analyse du bytecode pour rechercher les dépendances inutilisées
Plugin Gradle d'analyse des dépendances : qu'est-ce qu'un ABI ?
Réduire l'impact de mon plugin Gradle sur le temps de configuration : un voyage
Correction des dépendances en un clic
…et d'autres à venir :)
Ce plugin a également été présenté dans ces newsletters :
Gradle, oct. 2024
Gradle, mai 2022
Gradle, septembre 2020
Gradle, août 2020
Android hebdomadaire, numéro 423
Gradle, juillet 2020
Gradle, juin 2020
Des épisodes de podcast sur ce plugin peuvent être trouvés ici :
La boulangerie des développeurs, épisode #31
Vidéos Youtube sur ce plugin :
Comprendre Gradle #28 – Nettoyer les chemins de classe de compilation avec le plugin d'analyse des dépendances