Android Studio使用Dagger注入报java.lang.reflect.InvocationTargetException无错怎么解决
Dagger注入无错误提示异常解决指南
你遇到的运行时类缺失异常,本质是Dagger注解处理器未正常生成预期的注入辅助类导致的,以下是具体的触发原因和解决方案:
触发原因
- 依赖配置不全:仅引入Dagger核心库,未配套引入对应编译器注解处理器依赖
- Kotlin项目未启用注解处理插件:未添加
kotlin-kapt或KSP插件,Dagger注解不会被识别处理 - 循环注入:部分Dagger版本遇到循环依赖时不会输出明确错误,仅会跳过生成对应Component类
- 注解配置不合法:
@Module漏加、@Provides方法返回值不匹配、@Component依赖配置错误等情况,部分场景下无明确报错 - 混淆规则错误:Release打包时Dagger生成的类被混淆移除,导致运行时找不到对应类
- 构建缓存异常:本地构建缓存损坏,导致注解处理器未触发执行
解决方案
- 修正依赖配置
Java项目依赖配置如下(所有Dagger相关依赖版本需完全一致):
Kotlin项目需先在模块级build.gradle顶部启用kapt插件,再配置依赖:implementation 'com.google.dagger:dagger:2.48.1' annotationProcessor 'com.google.dagger:dagger-compiler:2.48.1'plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' // 必须添加 } dependencies { implementation 'com.google.dagger:dagger:2.48.1' kapt 'com.google.dagger:dagger-compiler:2.48.1' } - 排查循环依赖
检查是否存在A注入B、同时B注入A的循环场景,可通过Lazy<T>包装其中一个依赖解除循环:@Inject lateinit var b: Lazy<B> - 补全混淆规则
Release打包场景下在proguard-rules.pro中添加Dagger专属规则:-dontwarn dagger.internal.** -keep class dagger.** { *; } -keep class * implements dagger.Component { *; } -keepclasseswithmembernames class * { @javax.inject.* <fields>; @javax.inject.* <methods>; } - 清理缓存重新构建
依次执行Android Studio菜单的Build -> Clean Project、Build -> Rebuild Project,清理损坏的构建缓存后重新触发注解处理器执行
内容的提问来源于stack exchange,提问作者Ptut
相关产品推荐
相关产品推荐

