Das Dependency Analysis Gradle Plugin (DAGP, geb. Dependency Analysis Android Gradle Plugin) erkennt Folgendes:
Ungenutzte Abhängigkeiten.
Verwendete transitive Abhängigkeiten (die Sie möglicherweise direkt deklarieren möchten).
Abhängigkeiten, die auf der falschen Konfiguration deklariert wurden ( api
vs. implementation
vs. compileOnly
usw.).
Als Nebeneffekt kann Ihnen das Plugin auch den ABI Ihres Projekts mitteilen und unter anderem Graphviz-Dateien erstellen, die verschiedene Ansichten Ihres Abhängigkeitsdiagramms darstellen. Bei diesen Nebenwirkungen handelt es sich derzeit größtenteils um undokumentierte interne Verhaltensweisen, sie könnten jedoch für einige fortgeschrittene Benutzer interessant sein.
Zusätzlich zu den abhängigkeitsbezogenen Ratschlägen (siehe oben) bietet DAGP weitere Ratschläge, die Ihnen dabei helfen, Ihre „Gesundheit“ aufrechtzuerhalten. Dazu gehört die Erkennung von:
Unnötige Plugins (derzeit nur kapt
).
Teilprojekte („Module“), die unnötigerweise das Android-Plugin nutzen und stattdessen durch „normale“ JVM-Bibliotheken ersetzt werden könnten.
Informationen zu den Versionen von Gradle, dem Android Gradle Plugin usw., mit denen dieses Plugin kompatibel ist, finden Sie im Wiki.
Detaillierte Anweisungen finden Sie im Wiki.
Der einfachste Ansatz besteht darin, Folgendes hinzuzufügen:
plugins {
id( " com.autonomousapps.build-health " ) version " <<latest_version>> "
}
Wichtig | Wenn Ihr Projekt Kotlin oder Android (oder beides) verwendet, müssen diese Plugins auch in den Klassenlader des Einstellungsskripts (oder einen übergeordneten Klassenlader) geladen werden. Weitere Informationen finden Sie im Wiki |
Für einen schnellen Start führen Sie einfach Folgendes aus:
./gradlew buildHealth
Sie werden wahrscheinlich eine Ausgabe wie die folgende sehen:
> Aufgabe: buildHealth FEHLGESCHLAGEN FEHLER: Der Build ist aufgrund einer Ausnahme fehlgeschlagen. * Was schief gelaufen ist: Die Ausführung der Aufgabe „:buildHealth“ ist fehlgeschlagen. > Es gab Abhängigkeitsverstöße. Siehe Bericht unter file:///path/to/project/build/reports/dependency-analysis/build-health-report.txt
Wenn Sie möchten, dass dieser (möglicherweise sehr lange) Bericht auf der Konsole gedruckt wird, fügen Sie dies Ihrer gradle.properties
Datei hinzu:
dependency.analysis.print.build.health=true
Sie müssen dieses Plugin nicht über das Einstellungsskript auf alle Projekte anwenden. Es kann auch nur auf bestimmte Teilprojekte angewendet werden. In diesem Fall muss es auch auf das Root-Build-Skript angewendet werden.
plugins {
id( " com.autonomousapps.dependency-analysis " ) version " <<latest_version>> "
}
plugins {
id( " com.autonomousapps.dependency-analysis " )
}
Wichtig | Wenn Ihr Projekt Kotlin oder Android (oder beides) verwendet, müssen diese Plugins auch in den Root-Build-Skript-Klassenlader (oder einen übergeordneten Klassenlader) geladen werden. Weitere Informationen finden Sie im Wiki |
Die Analyse kann mit der projectHealth
-Aufgabe für einzelne Module ausgeführt werden. Zum Beispiel:
./gradlew app:projectHealth
Es kommt häufig vor, dass das Plugin viele Probleme mit den Abhängigkeitsdeklarationen Ihres Projekts meldet. Da die manuelle Behebung mühsam sein kann, bietet das Plugin auch eine Funktion zur automatischen Behebung aller Probleme.
./gradlew fixDependencies
Die Aufgabe fixDependencies
wird in jedem Projekt registriert, in dem das Plugin angewendet wird. Wenn Sie es wie oben ausführen, wird die Aufgabe in jedem Unterprojekt ausgeführt. Siehe auch One-Click-Abhängigkeiten beheben .
Unter bestimmten Umständen kann es als undurchführbar angesehen werden, alle Probleme in einem Durchgang zu lösen. Vielleicht haben Sie ein sehr großes Projekt oder veröffentlichen Bibliotheken und wissen, dass sich durch die Änderung Ihrer Abhängigkeitsdeklarationen auch die Metadaten Ihrer Bibliotheken ändern, was zu Problemen bei den Verbrauchern führen kann. Um diesen Anwendungsfall zu unterstützen, benötigt die Aufgabe fixDependencies
ein optionales Flag, um sie anzuweisen, im Wesentlichen nur „sichere“ Änderungen vorzunehmen.
./gradlew fixDependencies --upgrade
Wenn dieses Flag aktiviert ist, wird die Aufgabe fixDependencies
“ keine Abhängigkeitsdeklarationen entfernen oder „herabstufen“. Es werden nur Deklarationen hinzugefügt oder „aktualisiert“ (z. B. von implementation
zur api
).
In einem inkrementellen Rollout-Szenario könnte man sich vorstellen, das Flag --upgrade
zu verwenden, dann alle Verbraucher zu aktualisieren und schließlich das Flag zu entfernen und alle nicht verwendeten Abhängigkeiten zu entfernen.
Wenn die Analyse Fehler aufweist, führt das Korrigieren der Abhängigkeitsdeklarationen dazu, dass Ihr Build kaputt geht (dies ist jedoch auch bei manuellen Korrekturen der Fall). Wenn Sie auf dieses Problem stoßen, melden Sie bitte ein Problem.
Darüber hinaus basiert die Umschreibefunktion auf einer vereinfachten Gradle Groovy/Kotlin DSL-Grammatik, die bei komplexen Build-Skripten fehlschlägt. Wir planen, die Gradle Kotlin DSL-Grammatik bald zu verbessern, da es sich um die Standard-Build-Skriptsprache handelt, haben jedoch derzeit keine Pläne, dasselbe für Gradle Groovy DSL zu tun.
Sie sind vielleicht neugierig, warum das Plugin Hinweise zu bestimmten Abhängigkeiten ausgibt (oder nicht ausgibt). Sie können es fragen, warum:
./gradlew lib:reason --id com.squareup.okio:okio:2.2.2 (1) > Aufgabe :lib:reason ---------------------------------------- Sie haben nach der Abhängigkeit „com.squareup.okio:okio:2.2.2“ gefragt. Es gibt keine Hinweise zu dieser Abhängigkeit. ---------------------------------------- Kürzester Pfad von :lib zu com.squareup.okio:okio:2.2.2: :lib --- com.squareup.okio:okio:2.2.2 Quelle: main ------------ * Macht die Klasse okio.BufferedSource verfügbar (impliziert API).
Die Versionszeichenfolge ist optional.
Ausführliche Informationen zur Konfiguration des Plugins finden Sie im Wiki.
Um das Plugin zu konfigurieren, verwenden Sie die dependencyAnalysis
Erweiterung.
dependencyAnalysis {
// configuration goes here
}
Im Folgenden finden Sie eine Liste von Artikeln/Blogbeiträgen, die zu diesem Plugin veröffentlicht wurden:
Die richtige Pflege und Fütterung Ihres Gradle-Körpers
Abhängigkeitsanalyse-Gradle-Plugin: Verwenden Sie die Bytecode-Analyse, um ungenutzte Abhängigkeiten zu finden
Abhängigkeitsanalyse-Gradle-Plugin: Was ist ein ABI?
Den Einfluss meines Gradle-Plugins auf die Konfigurationszeit reduzieren: Eine Reise
Abhängigkeiten mit einem Klick beheben
…und es kommen noch mehr :)
Dieses Plugin wurde auch in diesen Newslettern vorgestellt:
Gradle, Okt. 2024
Gradle, Mai 2022
Gradle, September 2020
Gradle, August 2020
Android Weekly, Ausgabe Nr. 423
Gradle, Juli 2020
Gradle, Juni 2020
Podcast-Episoden zu diesem Plugin finden Sie hier:
Die Bäckerei der Entwickler, Folge #31
Youtube-Videos zu diesem Plugin:
Gradle #28 verstehen – Klassenpfade sauber kompilieren mit dem Dependency Analysis Plugin