You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio使用Dagger注入报java.lang.reflect.InvocationTargetException无错怎么解决

Dagger注入无错误提示异常解决指南

你遇到的运行时类缺失异常,本质是Dagger注解处理器未正常生成预期的注入辅助类导致的,以下是具体的触发原因和解决方案:

触发原因

  • 依赖配置不全:仅引入Dagger核心库,未配套引入对应编译器注解处理器依赖
  • Kotlin项目未启用注解处理插件:未添加kotlin-kapt或KSP插件,Dagger注解不会被识别处理
  • 循环注入:部分Dagger版本遇到循环依赖时不会输出明确错误,仅会跳过生成对应Component类
  • 注解配置不合法:@Module漏加、@Provides方法返回值不匹配、@Component依赖配置错误等情况,部分场景下无明确报错
  • 混淆规则错误:Release打包时Dagger生成的类被混淆移除,导致运行时找不到对应类
  • 构建缓存异常:本地构建缓存损坏,导致注解处理器未触发执行

解决方案

  1. 修正依赖配置
    Java项目依赖配置如下(所有Dagger相关依赖版本需完全一致):
    implementation 'com.google.dagger:dagger:2.48.1'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.48.1'
    
    Kotlin项目需先在模块级build.gradle顶部启用kapt插件,再配置依赖:
    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'
    }
    
  2. 排查循环依赖
    检查是否存在A注入B、同时B注入A的循环场景,可通过Lazy<T>包装其中一个依赖解除循环:
    @Inject lateinit var b: Lazy<B>
    
  3. 补全混淆规则
    Release打包场景下在proguard-rules.pro中添加Dagger专属规则:
    -dontwarn dagger.internal.**
    -keep class dagger.** { *; }
    -keep class * implements dagger.Component { *; }
    -keepclasseswithmembernames class * {
        @javax.inject.* <fields>;
        @javax.inject.* <methods>;
    }
    
  4. 清理缓存重新构建
    依次执行Android Studio菜单的Build -> Clean Project、Build -> Rebuild Project,清理损坏的构建缓存后重新触发注解处理器执行

内容的提问来源于stack exchange,提问作者Ptut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:15:04