Kotlin - Dagger 2 - Android 中的组件不是由 Dagger 2 生成的

问题描述 投票:0回答:3

当我从 java 迁移到 Kotlin 时,我遇到了这个问题。 Dagger 没有生成 DaggerComponent 类。我尝试了很多方法来解决这个问题。这是我的代码:

app.gradle

...

apply plugin: 'kotlin-kapt'

...

dependencies {
    ...

    implementation "com.google.dagger:dagger:$dagger_version"
    implementation "com.google.dagger:dagger-android:$dagger_version"
    implementation "com.google.dagger:dagger-android-support:$dagger_version"
    kapt "com.google.dagger:dagger-compiler:$dagger_version"
    kapt "com.google.dagger:dagger-android-processor:$dagger_version"
    provided 'javax.annotation:jsr250-api:1.0'

   ...

    compileOnly 'org.glassfish:javax.annotation:10.0-b28'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}

apply plugin: 'com.google.gms.google-services'

这是我的project.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext.kotlin_version = '1.1.51'
    ext.support_version = '27.1.1'
    ext.glide_version = '4.7.1'
    ext.glide_slider_version = '1.3.2'
    ext.dagger_version = '2.17'

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.0.1'

       ...

最后这是我的组件接口代码:

@Component(modules = arrayOf(AppModule::class, DatabaseModule::class))
interface DIComponent {
    fun inject(app:App)
}

我认为我做得正确,我用正确的注释声明了所有必需的代码。我已经清理并重建了该项目,但它仍然不起作用。我做了无效缓存并重新启动等操作,但仍然不起作用。

我在声明组件时犯了错误吗?或者是我的Android Studio有问题。我对此没有任何想法。这真的让我很困惑,让我压力很大。

android kotlin dagger
3个回答
2
投票

添加@Singleton

@Singleton
@Component(modules = arrayOf(AppModule::class, DatabaseModule::class))
interface DIComponent {
    fun inject(app:App)
}

0
投票

如果上述所有解决方案都不起作用,并且您仍然看不到任何生成的

DaggerComponent

有时这个问题是具有欺骗性的。它来自 Android Studio,会在 build 文件夹中按预期生成

源,但不会刷新此文件夹,您的源会执行 
build
 文件夹中已更改的内容。

您必须手动强制 Android Studio

reload the sources from Disk

 。您可以通过找到适当的操作或右键单击受指控的模块来实现这一点。


-1
投票
我刚刚通过将 @Singleton 添加到我的组件中解决了我的问题,然后将其添加到我的应用程序 gradle 中:

compile 'com.android.databinding:compiler:3.1.4'

我不知道有谁能解决我的问题。但我看到,当 gradle 构建完成时,消息中出现了一些警告,其中一个警告是 kotlin 编译器在数据绑定方面存在问题。所以解决了这个问题,我也解决了我的问题。谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.