首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dagger2 - FragmentSubcomponentBuilder没有实现AndroidInjector.Factory

Dagger2 - FragmentSubcomponentBuilder没有实现AndroidInjector.Factory
EN

Stack Overflow用户
提问于 2017-11-03 12:51:39
回答 1查看 827关注 0票数 1

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

MyFragmentSubcomponentBuilder没有实现AndroidInjector.Factory

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

代码语言:javascript
复制
@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:

代码语言:javascript
复制
 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"
        }
    }

    // ...

以及app build.gradle:

代码语言:javascript
复制
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。但我在运行时仍然会出错。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 16:48:52

AndroidSupportInjectionModule放在ApplicationComponent中的数组模块中

例如

代码语言:javascript
复制
@Singleton
@Component(
        modules = arrayOf(
                AndroidSupportInjectionModule::class,
                ActivityBuilder::class,
                AppModule::class
        )
)
interface AppComponent : AndroidInjector<App> {

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

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47096262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档