移除Hilt后Gradle仍执行kapt任务,如何排查原因?
排查移除Hilt后kapt任务仍执行的问题
以下是逐步排查的具体方法:
1. 确认kapt插件与Hilt相关配置完全移除
- 检查所有
build.gradle.kts文件(包括根目录和app模块):- 确保
id("kotlin-kapt")插件已从plugins块中删除——只要该插件存在,Gradle就会自动生成kapt系列任务 - 确认
id("com.google.dagger.hilt.android")插件已删除 - 清理dependencies块中所有Hilt相关依赖:包括
androidx.hilt:hilt-navigation-compose、com.google.dagger:hilt-android以及对应的kapt依赖
- 确保
- 检查
libs.versions.toml文件(若使用版本目录管理):删除所有与Hilt、kapt相关的alias或版本声明 - 检查根目录
build.gradle.kts的buildscript块:确保已移除Hilt Gradle插件的classpath配置(如com.google.dagger:hilt-android-gradle-plugin)
2. 排查第三方插件是否触发kapt
你当前使用了io.objectbox插件,部分第三方库会自动引入kapt依赖或触发kapt任务:
- 执行
./gradlew app:dependencies,在输出中搜索kapt关键词,查看是否有ObjectBox或其他依赖间接引入了kapt相关配置 - 查阅ObjectBox官方文档,确认其是否依赖kapt,是否需要额外配置关闭kapt关联
3. 分析Gradle任务依赖链
- 执行
./gradlew app:tasks --all,找到kapt系列任务(如kaptGenerateStubsDebugKotlin),查看其依赖的前置任务,确认是哪个任务或插件触发了它 - 执行
./gradlew app:kaptGenerateStubsDebugKotlin --info,查看详细日志,日志中会明确显示任务的触发来源,帮助定位根源
4. 针对编译器参数变化的排查
Build Analyzer提示compilerOptions.freeCompilerArgs变化导致任务重复执行:
- 执行
./gradlew app:kaptGenerateStubsDebugKotlin --up-to-date,对比两次构建的参数差异 - 执行
./gradlew app:properties,查看compilerOptions.freeCompilerArgs的具体值,确认是否存在残留的kapt相关参数
5. 深层清理缓存
常规清理无效时,尝试:
- 删除用户目录下的Gradle缓存:
rm -rf ~/.gradle/caches(Ubuntu系统) - 执行
./gradlew cleanBuildCache清理Gradle构建缓存
6. 对比正常项目配置
将当前项目的build.gradle.kts、gradle.properties等配置文件,与新建的无kapt问题的项目逐行对比,找出隐藏的配置差异
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

