1

私はdagger 2を使用していて、AndroidプロジェクトをJavaからKotlinに変換しようとしています。ビルドが成功した後、私はランタイムエラーを取得しています:Dagger2 - FragmentSubcomponentBuilderはAndroidInjector.Factoryを実装していません

MyFragmentSubcomponentBuilderは、このエラーが出ていないのJavaでAndroidInjector.Factory

を実装していません。また、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' 

    // ... 
} 

あなたは私の短剣2(のみkapt)のためannotationProcessorを使用して、またはない見ることができるようにgenerateStubs = trueが追加されました。しかし、私はまだ実行時にエラーが発生します。

答えて

2

は、例えばApplicationComponent

であなたのアレイモジュールにAndroidSupportInjectionModuleを入れ

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

    @Component.Builder 
    abstract class Builder : AndroidInjector.Builder<App>() 

} 
関連する問題