Dagger2 – FragmentSubcomponentBuilder没有实现AndroidInjector.Factory

我正在使用匕首2并试图将我的Android项目从Java转换为Kotlin。 成功构建后,我得到运行时错误:

MyFragmentSubcomponentBuilder没有实现AndroidInjector.Factory

用Java这个错误没有出现。 我还注意到,在我的ActivityBuilder模块中,所有方法在构建之后都是未使用的(它们必须在生成的子组件类中使用)。

@Module abstract class ActivityBuilder { // ... @ContributesAndroidInjector(modules = arrayOf(MainActivityModule::class,MyFragmentProvider::class)) internal abstract fun bindMainActivity(): MainActivity // this method highlighted with gray color in AndroidStudio as unused } 

我如何设置我的项目正确使用匕首2和kotlin?

我的顶级gradle.build:

  buildscript { ext.kotlin_version = '1.1.51' repositories { jcenter() maven { url 'https://maven.google.com' } mavenCentral() google() maven { url 'https://github.com/uPhyca/stetho-realm/raw/master/maven-repo' } maven { url "https://jitpack.io" } } dependencies { classpath 'com.android.tools.build:gradle:3.0.0' classpath 'com.google.gms:google-services:3.1.0' classpath "io.realm:realm-gradle-plugin:3.0.0" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } // ... 

和应用程序build.gradle:

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' apply plugin: 'realm-android' android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { applicationId "com.example.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0.0" multiDexEnabled true } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } dataBinding { enabled = true } kapt { generateStubs = true } } // ... kapt { generateStubs = true } dependencies { // ... kapt 'com.android.databinding:compiler:3.0.0' //Dagger 2 dependencies compile 'com.google.dagger:dagger:2.11' compile 'com.google.dagger:dagger-android:2.11' compile 'com.google.dagger:dagger-android-support:2.11' kapt 'com.google.dagger:dagger-compiler:2.11' kapt 'com.google.dagger:dagger-android-processor:2.11' // ... } 

正如你可以看到我没有使用annotationProcessor为匕首2(只有kapt),而且我还添加了generateStubs = true。 但我仍然在运行时出错。

AndroidSupportInjectionModule放入ApplicationComponent中的数组模块中

例如

 @Singleton @Component( modules = arrayOf( AndroidSupportInjectionModule::class, ActivityBuilder::class, AppModule::class ) ) interface AppComponent : AndroidInjector<App> { @Component.Builder abstract class Builder : AndroidInjector.Builder<App>() }