38

I have installed Kotlin plugin today into an existing project with Dagger 2. Before Kotlin was installed I had no issues with Dagger. However, now the compiler complains :

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

Project 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"

Module 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"


}

The DaggerAppComponent file IS auto generated, so I'm confused as to why there is an un resolved reference error thrown.

Mike6679
  • 5,547
  • 19
  • 63
  • 108

7 Answers7

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

And in your dependencies:

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"
Pablo Cegarra
  • 20,955
  • 12
  • 92
  • 110
20

I was getting the same error message, but my case was different than yours. The unresolved reference appeared only when generating signed APK. This is how I solved it:

app/build.gradle

kapt {
    generateStubs = true
}

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

I can now deploy my signed APK without errors

voghDev
  • 5,641
  • 2
  • 37
  • 41
8

At first, It gives an error after rebuild:

Unresolved reference: DaggerAppComponent

You should try to import (Alt + Enter) that component.

zgr
  • 176
  • 1
  • 5
1

On my end, as of

Kotlin version 1.5.30
Dagger version 2.35.1
Dagger support version 2.28.3

There's an issue with dagger 2 (above versions) and kotlin 1.5.30. When you try to run the project using

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

When i used Run with --stacktrace i found out that the issue was:

IllegalStateException: Unsupported metadata version" in KaptWithoutKotlincTask with 1.5.0-M2

I found out that this is because Dagger uses the old version of kotlinx-metadata-jvm library & doesn't support kotlin version 1.5 and above yet.

So as a fix, i added:

kapt 'org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.2.0'

I don't know if there's an official fix to this yet, but this might help someone.

N:B: i tried changing from kapt to annotationProcessor, and though the project compiled, i still couldn't generate DaggerAppComponent

tendai
  • 1,172
  • 1
  • 11
  • 22
1

I spent a lot of time to fix this problem. In my case applied incorrect imports:

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

I needed:

import dagger.Module
import dagger.Provides

Pay attantion

Leonid Ivankin
  • 579
  • 4
  • 9
0

for me it was Showing Unresolved reference "DaggerAppComponent". after spending so many time i figured,this usually happens as a result of Android Studio failed to generate DaggerAppComponent automatically.

So, we need to clean and rebuild the project , then import (ALT+Enter )

If it is still not working try File=>Invalidate Caches/restart.

may be this would help someone some day !

krishnañ kv
  • 1
  • 1
  • 1
-3

Do not use private for inject dagger in Kotlin, use it like this for Kotlin

@Inject
     internal lateinit
4b0
  • 21,981
  • 30
  • 95
  • 142