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

Dagger2报错:app:kaptDebugKotlin任务执行失败如何修复

问题描述

学习Android开发及基于Dagger的Android依赖注入技术时,尝试实现简单的汽车-引擎依赖注入示例,触发Execution failed for task ':app:kaptDebugKotlin'错误,核心错误日志如下:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
   > java.lang.reflect.InvocationTargetException (no error message)

*完整错误日志已上传公开代码片段存档。

现有实现代码

Car.kt

该类依赖Engine类,仅包含run方法:

class Car @Inject constructor(private val engine: Engine) {
    private val TAG: String = "Car"

    fun run() {
        engine.start()
        Log.i(TAG, "Car Run ...")
    }
}

Engine.kt

简单实现类,包含start方法:

class Engine @Inject constructor() {
    private val TAG = "Engine"
    fun start() {
        Log.i(TAG, "Engine Start")
    }
}

CarComponent.kt

简单Dagger组件,包含getCar方法:

@Component(modules = [AndroidSupportInjectionModule::class])
interface CarComponent {
    fun getCar(): Car
}
项目Gradle配置
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'com.google.gms.google-services'
    id 'kotlin-kapt'
    id 'kotlin-android'
}

android {
    compileSdk 32

    defaultConfig {
        applicationId "com.mdidproject.movupapp"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.4.2'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'

//    firebase
    implementation 'com.google.firebase:firebase-auth-ktx:21.0.6'
    implementation 'com.google.firebase:firebase-analytics-ktx:21.0.0'

//    dagger
    implementation "com.google.dagger:dagger-android:2.35.1"
    implementation "com.google.dagger:dagger-android-support:2.17"
    kapt "com.google.dagger:dagger-android-processor:2.17"
    kapt "com.google.dagger:dagger-compiler:2.27"

//    testing
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
已尝试操作
  • 多次重新构建项目,始终触发上述kaptDebugKotlin任务执行失败错误
  • 将kapt引入的com.google.dagger:dagger-android-processor:2.17与com.google.dagger:dagger-compiler:2.27替换为annotationProcessor后,报错消失但Dagger生成的组件类未正常生成
修复方案

该报错由两个明确问题导致,按以下步骤修改即可解决:

  • 统一所有Dagger依赖版本
    当前引入的Dagger库版本从2.17到2.35.1不等,跨版本的注解处理器与运行库API不兼容,直接触发kapt执行异常。Kotlin项目必须使用kapt处理注解,替换为annotationProcessor不会处理Kotlin代码的注解标记,自然无法生成Dagger组件类。
    将依赖配置中的Dagger部分替换为以下内容,所有Dagger相关库使用完全一致的版本号:
    //    dagger 版本统一为2.44稳定版
    implementation "com.google.dagger:dagger:2.44"
    implementation "com.google.dagger:dagger-android:2.44"
    implementation "com.google.dagger:dagger-android-support:2.44"
    kapt "com.google.dagger:dagger-compiler:2.44"
    kapt "com.google.dagger:dagger-android-processor:2.44"
    
  • 修正Component配置
    当前示例仅实现普通类的依赖注入,不需要引入AndroidSupportInjectionModule,该模块仅用于Dagger对Android四大组件的注入场景,多余的模块引用也会导致注解处理器校验失败。将CarComponent修改为:
    @Component
    interface CarComponent {
        fun getCar(): Car
    }
    
  • 执行缓存清理
    修改完配置后,依次点击Android Studio菜单栏的Build -> Clean Project,等待清理完成后再点击Build -> Rebuild Project即可正常构建。注意你定义的组件名为CarComponent,Dagger生成的实现类名为DaggerCarComponent,并非DaggerAppComponent,调用时不要写错类名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:54:23