最近要将 Android 项目中不再使用的依赖移除。比如: kotlin-stdlib-jdk8 自从Kotlin 1.4+之后就不再需要手动添加了,Kotlin Gradle 插件会选择适当的JVM标准库自动添加。
但是目前 Android studio 和 Gradle 并没有这样的功能,怎样检测不再使用的依赖项和移除不再需要的依赖呢?
1. 使用 AGP task 检查
IssueTracker 中有相关的 Feature Request: find unused dependency declarations
官方的回复提到可以使用实验性的 AGP 任务 ./gradlew analyze<variant>Dependencies
生成未使用的依赖项的报告
Since it isn't mentioned here, there is an experimental AGP task that can be invoked by running ./gradlew analyze<variant>Dependencies that creates a JSON report of unused dependencies in build/intermediates/analyze_dependencies_report. While it cannot be guaranteed that the tool will be fully reliable, it may be helpful for identifying possible unused dependencies.
比如分析测试项目的 product 版本的依赖:
./gradlew analyzeProdSignedReleaseDependencies
分析结果会生成一个报告,文件目录是: app/build/intermediates/analyze_dependencies_report
// dependenciesReport.json
{
"add": [
"androidx.work:work-runtime:2.7.1"
],
"remove": [
"androidx.core:core-ktx:1.8.0",
"androidx.databinding:databinding-ktx:7.2.2",
"androidx.legacy:legacy-support-v4:1.0.0",
"androidx.room:room-ktx:2.4.3",
"androidx.work:work-runtime-ktx:2.7.1",
"org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10"
]
}
当前该AGP task还是实验性的,正如官方回复中提到的:While it cannot be guaranteed that the tool will be fully reliable, it may be helpful for identifying possible unused dependencies.
2. 使用开源的 Gradle 插件
在 IssueTracker 中也有人推荐 dependency-analysis-android-gradle-plugin
插件,测试确实可用。
插件的 Github 地址:https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin
在根目录的 build.gradle 添加插件
plugins {
id 'com.autonomousapps.dependency-analysis' version "<<latest_version>>"
}
快速开始,只需运行以下命令:
./gradlew buildHealth
也可以使用 projectHealth
任务对各个模块进行分析:
./gradlew app:projectHealth
这两种方式生成的报告都要结合自己项目的实际情况,检查报告中的依赖项是否确实可以移除
3. 其他
也有一些文章介绍 Netflix 的 gradle-lint-plugin
插件。但是经过踩坑它并不适用于Android项目。
想详细了解参见:https://github.com/nebula-plugins/gradle-lint-plugin/issues/36