检测未使用和滥用的依赖
dependency analysis gradle plugin (DAGP,Née依赖分析Android Gradle插件)检测到以下内容:
-
未使用的依赖性。
-
使用的及依赖性(您可能需要直接声明)。
-
在错误的配置上声明的依赖项(
apivsimplementation与compileOnly等)。
作为副作用,该插件还可以告诉您项目的ABI,并生成代表依赖关系图的各种视图的GraphViz文件。这些副作用目前主要是无证件的内部行为,但对于某些高级用户来说可能很有趣。
建立健康
除了与依赖关系相关的建议(见上文)外,DAGP还提供了其他建议,以帮助维护您的“建立健康”。这包括检测:
-
不必要的插件(目前仅
kapt)。 -
不必要地使用Android插件的子标记(“模块”),而不是“正常”的JVM库。
兼容性
请参阅Wiki,以获取有关Gradle,Android Gradle插件等版本的信息,该插件与此插件兼容。
添加到您的项目并使用
有关详细说明,请参阅Wiki。
最简单的方法是添加以下内容:
settings.gradle.kts
plugins {
id( \" com.autonomousapps.build-health \" ) version \" <<latest_version>> \"
}
| 重要的 | 如果您的项目使用Kotlin或Android(或两者都),则这些插件也必须加载在“设置脚本classloader”(或父级)中。有关更多信息,请参见Wiki |
快速启动,只需运行以下内容:
./gradlew buildHealth
您可能会看到以下输出:
>任务:BuildHealth失败 失败:构建失败,例外。 *出了什么问题: 执行失败了任务\':buildHealth\'。 >存在违规行为。请参阅文件:////path/to/project/build/reports/depperency-analisy/build-health-report.txt
如果您希望将此(可能很长的)报告打印到控制台上,请将其添加到您的gradle.properties文件:
gradle.properties
dependency.analysis.print.build.health=true
存储库
该插件从2.19.0的发行版和2.18.1-snapshot,此插件使用https://central.s*o*n*atype.com。要将此插件添加到您的项目中,请使用以下存储库。
settings.gradle.kts
pluginManagement {
repositories {
// releases
mavenCentral()
// snapshots
maven(url = \" https://central.*s*onat*ype.com/repository/maven-snapshots/ \" )
// Once you start using pluginManagement, you should explicitly add this,
// unless you NEVER want to use this repository
gradlePluginPortal()
}
}
更高级的用法
您不必通过设置脚本将此插件应用于所有项目。它也只能应用于特定的子标题。在这种情况下,还必须将其应用于root Build脚本。
root build.gradle.kts
plugins {
id( \" com.autonomousapps.dependency-analysis \" ) version \" <<latest_version>> \"
}
sub/project/build.gradle.kts
plugins {
id( \" com.autonomousapps.dependency-analysis \" )
}
| 重要的 | 如果您的项目使用Kotlin或Android(或两者),则这些插件也必须加载在Root Build Script Loader(或父级)中。有关更多信息,请参见Wiki |
项目健康
可以按照projectHealth任务对单个模块进行分析。例如:
./gradlew App:ProjectHealth
自动解决依赖性问题
插件通常会报告项目依赖性声明的许多问题。由于手动修复可能很乏味,因此该插件还提供了一项任务以使所有问题自动化。
./gradlew fixDependencies
fixDependencies任务已在应用插件的每个项目上注册。按照上述运行它将在每个子项目中运行任务。另请参阅一键依赖项修复。
仅修复一些依赖性问题
在某些情况下,一个通过以一通解决所有问题可能是不可行的。也许您有一个非常大的项目,或者您发布了库,并且您知道更改依赖性声明也会改变库的元数据,这可能会破坏消费者。为了支持此用例, fixDependencies任务采用可选标志来告诉它,从本质上讲,仅进行“安全”更改。
./gradlew fixDependencies-升级
有了此标志, fixDependencies任务将不会删除或“降级”任何依赖性声明。它将仅添加或“升级”声明(例如,从implementation到api )。
在增量的推出方案中,可以想象使用--upgrade标志,然后更新所有消费者,然后最终删除标志并删除所有未使用的依赖项。
警告
如果分析有任何错误,那么修复依赖性声明会使您的构建破坏(但手动修复也是如此)。如果您遇到此问题,请提出问题。
此外,重写功能基于简化的Gradle Groovy DSL语法,该语法将在复杂的Groovy构建脚本的存在下失败。 Kotlin DSL语法对整个Kotlin语言都有全面的支持,这使得重写功能对Gradle Kotlin DSL脚本的工作更大。 Gradle Groovy DSL没有计划做同样的计划。
原因
您可能会很好奇插件为什么会发出(或不发出)有关某些依赖性的建议。你可以问为什么:
./gradlew lib:原因-ID com.squareup.okio:okio:2.2.2 (1) >任务:lib:原因 ----------------------------------------------------------- 您询问了依赖项\'com.squareup.okio:okio:2.2.2\'。 关于这种依赖性没有任何建议。 ----------------------------------------------------------- 最短的路径从:lib到com.squareup.okio:okio:2.2.2: :lib \\ --- com.squareup.okio:okio:2.2.2 来源:主 ----------------- *公开okio.bufferedsource类(暗示API)。
-
版本字符串是可选的。
基本配置
有关如何配置插件的详细信息,请参见Wiki。
要配置插件,请使用dependencyAnalysis扩展。
build.gradle.kts
dependencyAnalysis {
// Declare that the plugin should use typesafe project accessors. False by default.
useTypesafeProjectAccessors( true )
// Configure ABI exclusion rules.
abi { .. . }
// Configure the severity of issues, and exclusion rules, for potentially the entire project.
issues { .. . }
// Configure issue reports.
reporting {
// false by default. Setting to true results in
// the advice report being emitted to console.
printBuildHealth( true )
}
// Configure dependency structure rules (bundles, mapping, etc).
structure { .. . }
// Configure usage rules.
usage { .. . }
}
编程用法和API保证
从版本3.0.0(未发行)中,该插件在api/api.txt中包含API定义。从那时起,任何向后兼容的更改都将导致主要版本发布。请注意,某些代码仅由于工具限制而公开;此代码大部分都在internal软件包中,但是com.autonomousapps.tasks也被认为是“内部”。这些内部软件包中任何API的使用自身都有您的风险。
对于仅应用插件并运行主要任务( buildHealth , projectHealth , reason等)的典型用户,应将主要版本视为非事件。对于这些用户,“ API”只是这些主要任务。
出版物
以下是已发表讨论此插件的文章 /博客文章的列表:
-
适当的护理和喂养您的gradle构建
-
dependency analysis gradle plugin :使用字节码分析查找未使用的依赖项
-
dependency analysis gradle plugin :什么是ABI?
-
减少我的Gradle插件对配置时间的影响:旅程
-
单击依赖项修复
这些插件也已在这些新闻通讯中出现:
-
格拉尔,2024年10月
-
格拉尔,2022年5月
-
格拉尔,2020年9月
-
格拉尔,2020年8月
-
Android每周,第423期
-
格拉尔,2020年7月
-
格拉尔,2020年6月
有关此插件的播客剧集可以在此处找到:
-
开发人员的面包店,第31集
有关此插件的YouTube视频:
-
了解Gradle#28 – 带有依赖性分析插件的清洁编译类路径
