求助:使用Dagger生成类时出现Unresolved reference: DaggerAppComponent错误
我之前也碰到过一模一样的Dagger构建坑,折腾了快一下午才捋清楚几个可行的解决方向,给你逐一试试:
检查注解处理器的Gradle配置是否正确
这是最常见的问题!如果是Kotlin项目,一定要用kapt来引入Dagger的编译器依赖,而不是implementation,而且要确保启用了kapt插件:// 模块顶部启用kapt(Groovy DSL) apply plugin: 'kotlin-kapt' dependencies { implementation 'com.google.dagger:dagger:2.48' // 必须用kapt引入编译器,不然不会生成Dagger类 kapt 'com.google.dagger:dagger-compiler:2.48' }要是Java项目,就把
kapt换成annotationProcessor。如果配置错了,注解处理器根本不会生成Dagger开头的实现类,自然会报未解析引用。标记生成类目录为源码根
Dagger生成的类默认在build/generated/source/kapt/debug(Kotlin)或build/generated/source/apt/debug(Java)目录下。有时候Android Studio会漏掉把这个目录标记为「生成源码根」,导致IDE识别不了这些类。你可以右键这个目录,选择Mark Directory as > Generated Sources Root,然后重启IDE试试。彻底清理缓存(比clean更狠)
普通的clean和rebuild有时候搞不定Gradle的顽固缓存。试试:- 关闭Android Studio
- 删除项目根目录下的
.gradle文件夹,以及所有模块里的build文件夹 - 重新打开IDE,执行
Rebuild Project
我当时就是靠这个解决了一次缓存导致的诡异问题。
检查Dagger组件的定义是否合法
有时候组件本身的定义有问题,注解处理器虽然没报错,但其实没生成完整的Dagger类。比如:- 确认
AppComponent接口加了@Component注解,并且modules参数配置正确 - 检查组件里的
inject方法是否指向正确的类,有没有拼写错误 - 依赖的Module类是否加了
@Module注解,提供方法是否加了@Provides
- 确认
调整IDE的编译器设置
打开File > Settings > Build, Execution, Deployment > Compiler,取消勾选Configure on demand选项,这个选项有时候会干扰注解处理器的执行。另外也可以试试File > Invalidate Caches... > Invalidate and Restart,彻底清理IDE的缓存。
这些方法里应该有能解决你问题的,我当时是kapt配置漏了加上IDE没标记生成目录,折腾了好久才搞定。
内容的提问来源于stack exchange,提问作者Rickless

