安卓 Kotlin:错误 未解决的引用:DaggerAppComponent

40

今天我在一个已有的Dagger 2项目中安装了Kotlin插件。在安装Kotlin之前,我使用Dagger没有任何问题。但是,现在编译器报错:

Error:(5, 32) Unresolved reference: DaggerAppComponent
Error:Execution failed for task ':app:compileDebugKotlinAfterJava'.
> Compilation error. See log for more details
Error:(12, 21) Unresolved reference: DaggerAppComponent

Gradle 项目:

ext.kotlin_version = '1.1.1'

    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"

Gradle 模块:

kapt {
    generateStubs = true
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.0.1'
    testCompile 'junit:junit:4.12'

    compile 'com.google.dagger:dagger:2.7'
    kapt 'com.google.dagger:dagger-compiler:2.7'

    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"


}

DaggerAppComponent文件是自动生成的,因此我不明白为什么会抛出未解决引用错误。


你解决了你的问题吗?出了什么问题? - Eugene Stepanov
2
打开 Gradle 控制台,然后点击 运行 with --stacktrace 以显示更多日志(有关错误的更多详细信息)。 - Sally
7个回答

79
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'   

在你的依赖项中:

implementation "com.google.dagger:dagger:2.x"
implementation "com.google.dagger:dagger-android:2.x"
implementation "com.google.dagger:dagger-android-support:2.x"
kapt "com.google.dagger:dagger-compiler:2.x"
kapt "com.google.dagger:dagger-android-processor:2.x"

20

我遇到了与您不同的错误信息,但我的情况有所不同。未解决的引用仅在生成已签名APK时出现。这是我解决它的方法:

app/build.gradle

kapt {
    generateStubs = true
}

dependencies {
    //...
    implementation 'com.google.dagger:dagger:2.9'
    kapt 'com.google.dagger:dagger-compiler:2.9'
}

我现在可以顺利部署已签名的APK文件,没有出现任何错误。


“kapt.generateStubs” 没有被 “kotlin-kapt” 插件使用。 - LunaVulpo

8
起初,在重建后它会报错:
“未解决的引用:DaggerAppComponent”
您应该尝试导入(Alt + Enter)该组件。

6
请勿点踩此评论;在完成其他步骤后,这是我遗漏的部分哈哈。 - Zsolt Safrany

1

我花了很多时间来解决这个问题。在我的情况下,应用了错误的导入:

import com.google.android.datatransport.runtime.dagger.Module
import com.google.android.datatransport.runtime.dagger.Provides

我需要:
import dagger.Module
import dagger.Provides

请注意


1
在我的这一端,截至到目前为止。
Kotlin version 1.5.30
Dagger version 2.35.1
Dagger support version 2.28.3

使用Dagger 2(高版本)和Kotlin 1.5.30存在问题。当您尝试运行项目时,

implementation 'com.google.dagger:dagger:2.35.1'
implementation 'com.google.dagger:dagger-android:2.35.1'
implementation 'com.google.dagger:dagger-android-support:2.28.3'
kapt 'com.google.dagger:dagger-compiler:2.28.3'
kapt 'com.google.dagger:dagger-android-processor:2.28.3'

It will fail with error:

java.lang.reflect.InvocationTargetException

当我使用Run with --stacktrace时,发现问题是:

在KaptWithoutKotlincTask中,IllegalStateException: Unsupported metadata version" in KaptWithoutKotlincTask with 1.5.0-M2。

我发现这是因为Dagger使用旧版本的kotlinx-metadata-jvm库,而且尚不支持1.5及以上版本的Kotlin。
因此,我添加了以下修复措施:
kapt 'org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.2.0'

我不知道是否有官方的解决方法,但这可能会对某些人有所帮助。

注:我尝试从kapt更改为annotationProcessor,虽然项目已编译,但我仍然无法生成DaggerAppComponent


0

对我来说,它显示了未解决的引用“DaggerAppComponent”。

经过很长时间的研究,我发现这通常是由于Android Studio未能自动生成DaggerAppComponent而导致的。

因此,我们需要清理和重建项目,然后导入(ALT + Enter)。

如果仍然无法正常工作,请尝试文件=>无效缓存/重新启动。

也许有一天这会帮助到某个人!


-3

在 Kotlin 中不要使用 private 来注入 Dagger,应该像这样使用

@Inject
     internal lateinit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接