当我从 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有问题。我对此没有任何想法。这真的让我很困惑,让我压力很大。
添加@Singleton
@Singleton
@Component(modules = arrayOf(AppModule::class, DatabaseModule::class))
interface DIComponent {
fun inject(app:App)
}
compile 'com.android.databinding:compiler:3.1.4'
我不知道有谁能解决我的问题。但我看到,当 gradle 构建完成时,消息中出现了一些警告,其中一个警告是 kotlin 编译器在数据绑定方面存在问题。所以解决了这个问题,我也解决了我的问题。谢谢。