未解决的参考DaggerApplicationComponent

时间:2016-08-08 15:32:49

标签: android kotlin dagger-2

我正在尝试创建我的应用组件,但Dagger不会生成我的应用组件。 这是 MyApplication

class MyApplication : Application() {

companion object {
    @JvmStatic lateinit var graph: ApplicationComponent
}
@Inject
lateinit var locationManager : LocationManager

override fun onCreate() {
    super.onCreate()
    graph = DaggerApplicationComponent.builder().appModule(AppModule(this)).build()
    graph.inject(this)
  }
}

这是我的 AppComponent

@Singleton
@Component(modules = arrayOf(AppModule::class))
interface ApplicationComponent {
    fun inject(application: MyApplication)
}

这是截图 enter image description here

这是 github

上的project

这是错误日志

Error:(7, 48) Unresolved reference: DaggerApplicationComponent
Error:(28, 17) Unresolved reference: DaggerApplicationComponent
Error:Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details
Information:BUILD FAILED
Information:Total time: 21.184 secs
Error:e: .../MyApplication.kt: (7, 48): Unresolved reference: DaggerApplicationComponent
e: Unresolved reference: DaggerApplicationComponent
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

Information:4 errors
Information:0 warnings
Information:See complete output in console

13 个答案:

答案 0 :(得分:43)

我的解决方案是添加

apply plugin: 'kotlin-kapt'

并删除

kapt {
    generateStubs = true
}

答案 1 :(得分:27)

请尝试启用stubs generation,这可能是在构建过程的这个阶段看不到类的原因。在您的build.gradle文件中,顶级:

kapt {
    generateStubs = true
}

答案 2 :(得分:21)

这有助于我解决这个问题

将其添加到build.gradle

的顶部
apply plugin: 'kotlin-kapt'

android标记内添加

kapt {
    generateStubs = true
}

然后替换

annotationProcessor 'com.google.dagger:dagger-compiler:2.11'

kapt 'com.google.dagger:dagger-compiler:2.11'

现在Rebuild项目

Build -> Rebuild project

答案 3 :(得分:6)

我已经下载了你的Github项目。谢谢分享!

您的问题的答案非常简单:

Build -> Rebuild project

Dagger依赖项文件将被重新创建,app会在任何问题后启动。

我已经使用Android Studio 2.1.2版本检查了这个。它的工作原理

答案 4 :(得分:3)

你应该删除

kapt {
generateStubs = true}

并添加到应用程序gradle文件的顶部

apply plugin: 'kotlin-kapt'
然后Dagger会照顾其余的事情:)

答案 5 :(得分:2)

混合Java / Kotlin项目只需要两个步骤:

  1. apply plugin: 'kotlin-kapt'添加到构建文件的顶部
  2. annotationProcessor 'com.google.dagger:dagger-compiler:2.14.1'替换为kapt 'com.google.dagger:dagger-compiler:2.14.1'

答案 6 :(得分:1)

对于Java用户,解决方案只是重建您的项目。

答案 7 :(得分:1)

答案很简单:

Build -> Rebuild project

它对我有用。

答案 8 :(得分:1)

在我的情况下缺少kapt编译器依赖。请确保也具有以下依赖性。

kapt 'com.google.dagger:dagger-compiler:2.15'

app build.gradle

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-kapt'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.usb.utility"
        minSdkVersion 14
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.google.dagger:dagger-android:2.15'
    compile 'com.google.dagger:dagger-android-support:2.15' // if you use the support libraries
    kapt 'com.google.dagger:dagger-android-processor:2.15'
    kapt 'com.google.dagger:dagger-compiler:2.15'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

答案 9 :(得分:1)

将其添加到build.gradlle顶部

apply plugin: 'kotlin-kapt'

在依赖项中添加

kapt 'com.google.dagger:dagger-compiler:2.15'
kapt 'com.google.dagger:dagger-android-processor:2.15'

之后,重建您的项目。我希望它能工作。 谢谢

答案 10 :(得分:0)

请尝试将此添加到您的build.gradle

android {
    dexOptions {
        incremental false
    }
编辑:显然一年之后如果您不申请kotlin-kapt插件,就会发生这种情况。另外,请确保使用kapt代替annotationProcessor

答案 11 :(得分:0)

就我而言,我做了所有答案,但没有解决!

我的解决方案:转到项目的目录路径并删除

buildapp>build.idea.Gradle

并返回android studio并rebuild进行项目并完成!

答案 12 :(得分:-1)

这必须解决您的问题:

更新(2020年3月29日)

build.gradle块内的应用级 dependencies内,添加以下行:

     //dagger2
     api 'com.google.dagger:dagger:2.24'
     api 'com.google.dagger:dagger-android:2.24'
     api 'com.google.dagger:dagger-android-support:2.24'

     annotationProcessor 'com.google.dagger:dagger-compiler:2.24'
     kapt 'com.google.dagger:dagger-compiler:2.24'

     annotationProcessor 'com.google.dagger:dagger-android-processor:2.24'
     kapt 'com.google.dagger:dagger-android-processor:2.24'

     compileOnly 'javax.annotation:jsr250-api:1.0'
     implementation 'javax.inject:javax.inject:1'

应用级android内,

build.gradle

应用程序级别 kapt { generateStubs = true } 顶部处,以完全低于顺序的方式进行操作。

build.gradle

最后,您需要按照下面的屏幕快照中的说明配置注释过程。您可以进行apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' 搜索File>Other Settings>Settings for New Projects> enter image description here

此后,请从菜单"Annotation processor"中进行操作。你完成了!

测试:

Build > Rebuild

现在,您可以使用在编译时为Applicati @Component public interface ApplicationComponent { } nComponent接口生成的DaggerApplicationComponent

o