El complemento Gradle de análisis de dependencia (DAGP, de soltera, complemento Gradle de Android de análisis de dependencia) detecta lo siguiente:
Dependencias no utilizadas.
Dependencias transitivas utilizadas (que es posible que desee declarar directamente).
Dependencias declaradas en una configuración incorrecta ( api
vs implementation
vs compileOnly
, etc.).
Como efecto secundario, el complemento también puede indicarle el ABI de su proyecto y produce archivos Graphviz que representan varias vistas de su gráfico de dependencia, entre otras cosas. Actualmente, estos efectos secundarios son en su mayoría comportamientos internos no documentados, pero pueden resultar interesantes para algunos usuarios avanzados.
Además de los consejos relacionados con la dependencia (ver arriba), DAGP brinda otros consejos para ayudarlo a mantener su "salud física". Esto incluye la detección de:
Complementos innecesarios (actualmente solo kapt
).
Subproyectos ("módulos") que utilizan innecesariamente el complemento de Android y, en su lugar, podrían utilizar bibliotecas JVM "normales".
Consulte la wiki para obtener información sobre las versiones de Gradle, el complemento Gradle de Android, etc., con las que este complemento es compatible.
Para obtener instrucciones detalladas, consulte la wiki.
El enfoque más simple es agregar lo siguiente:
plugins {
id( " com.autonomousapps.build-health " ) version " <<latest_version>> "
}
Importante | Si su proyecto usa Kotlin o Android (o ambos), esos complementos también deben cargarse en el cargador de clases del script de configuración (o en uno principal). Consulte la wiki para obtener más información. |
Para un inicio rápido, simplemente ejecute lo siguiente:
./gradlew buildHealth
Probablemente verá resultados como el siguiente:
> Tarea: buildHealth FALLÓ FALLO: La compilación falló con una excepción. * Qué salió mal: Error de ejecución de la tarea ':buildHealth'. > Hubo violaciones de dependencia. Consulte el informe en file:///path/to/project/build/reports/dependency-analysis/build-health-report.txt
Si desea imprimir este informe (potencialmente muy largo) en la consola, agréguelo a su archivo gradle.properties
:
dependency.analysis.print.build.health=true
No es necesario aplicar este complemento a todos los proyectos a través del script de configuración. También se puede aplicar sólo a subproyectos específicos. En este caso, también se debe aplicar al script de compilación raíz.
plugins {
id( " com.autonomousapps.dependency-analysis " ) version " <<latest_version>> "
}
plugins {
id( " com.autonomousapps.dependency-analysis " )
}
Importante | Si su proyecto usa Kotlin o Android (o ambos), esos complementos también deben cargarse en el cargador de clases del script de compilación raíz (o en uno principal). Consulte la wiki para obtener más información. |
El análisis se puede ejecutar en módulos individuales con la tarea projectHealth
. Por ejemplo:
./gradlew aplicación:projectHealth
Es común que el complemento informe muchos problemas con las declaraciones de dependencia de su proyecto. Dado que solucionarlo manualmente puede resultar tedioso, el complemento también proporciona una tarea para solucionar automáticamente todos los problemas.
./gradlew fixDependencias
La tarea fixDependencies
se registra en cada proyecto donde se aplica el complemento. Ejecutarlo como arriba ejecutará la tarea en cada subproyecto. Consulte también Corrección de dependencias con un clic .
En algunas circunstancias, puede considerarse inviable resolver todos los problemas de una sola vez. Tal vez tenga un proyecto muy grande o publique bibliotecas y sepa que cambiar sus declaraciones de dependencia también cambiará los metadatos de sus bibliotecas, lo que podría perjudicar a los consumidores. Para admitir este caso de uso, la tarea fixDependencies
toma un indicador opcional para indicarle que, esencialmente, solo realice cambios "seguros".
./gradlew fixDependencies --actualizar
Con esta bandera en su lugar, la tarea fixDependencies
no eliminará ni "degradará" ninguna declaración de dependencia. Sólo agregará o "actualizará" declaraciones (por ejemplo, de implementation
a api
).
En un escenario de implementación incremental, uno podría imaginarse usar el indicador --upgrade
, luego actualizar a todos los consumidores y finalmente eliminar el indicador y eliminar todas las dependencias no utilizadas.
Si el análisis tiene algún error, corregir las declaraciones de dependencia interrumpirá su compilación (pero este también es el caso con las correcciones manuales). Si encuentra esto, presente un problema.
Además, la funcionalidad de reescritura se basa en una gramática DSL Gradle Groovy/Kotlin simplificada, que fallará en presencia de scripts de compilación complejos. Planeamos mejorar la gramática DSL de Gradle Kotlin pronto, ya que es el lenguaje de script de compilación predeterminado, pero no tenemos planes actuales para hacer lo mismo con Gradle Groovy DSL.
Quizás tengas curiosidad por saber por qué el complemento emite (o no emite) consejos sobre alguna dependencia. Puedes preguntarle por qué:
./gradlew lib:razón --id com.squareup.okio:okio:2.2.2 (1) > Tarea :lib:razón ---------------------------------------- Preguntaste sobre la dependencia 'com.squareup.okio:okio:2.2.2'. No hay ningún consejo sobre esta dependencia. ---------------------------------------- Ruta más corta desde :lib a com.squareup.okio:okio:2.2.2: :lib --- com.squareup.okio:okio:2.2.2 Fuente: principal ------------ * Expone la clase okio.BufferedSource (implica api).
La cadena de versión es opcional.
Para obtener información detallada sobre cómo configurar el complemento, consulte la wiki.
Para configurar el complemento, utilice la extensión dependencyAnalysis
.
dependencyAnalysis {
// configuration goes here
}
La siguiente es una lista de artículos/publicaciones de blog que se han publicado sobre este complemento:
El cuidado y la alimentación adecuados de tu Gradle build
Complemento Gradle de análisis de dependencias: uso del análisis de código de bytes para encontrar dependencias no utilizadas
Complemento Gradle de análisis de dependencia: ¿Qué es una ABI?
Reducir el impacto de mi complemento Gradle en el tiempo de configuración: un viaje
Corrección de dependencias con un solo clic
…con más por venir :)
Este complemento también apareció en estos boletines:
Gradle, octubre de 2024
Gradle, mayo de 2022
Gradle, septiembre de 2020
Gradle, agosto de 2020
Semanal de Android, número 423
Gradle, julio de 2020
Gradle, junio de 2020
Los episodios de podcast sobre este complemento se pueden encontrar aquí:
La panadería de los desarrolladores, episodio 31
Vídeos de Youtube sobre este complemento:
Comprensión de Gradle n.º 28: rutas de clase de compilación limpia con el complemento de análisis de dependencia