Android Dagger2和外部库:无法启动活动组件信息

Android Dagger2和外部库:无法启动活动组件信息,android,kotlin,dependency-injection,dagger-2,Android,Kotlin,Dependency Injection,Dagger 2,在我的android项目中,我使用了我编写的AAR库模块,项目和库都使用Dagger进行依赖注入 在我的项目中,我使用如下库: fun useLibrary() { startActivityForResult( Intent( this, LibraryActivity::class.java ), A_REQUEST_CODE ) } 但当我启动我的应用程序时,我遇到了一个错误:

在我的android项目中,我使用了我编写的AAR库模块,项目和库都使用Dagger进行依赖注入

在我的项目中,我使用如下库:

fun useLibrary() {
    startActivityForResult(
        Intent(
            this,
            LibraryActivity::class.java
        ),
        A_REQUEST_CODE
    )
}
但当我启动我的应用程序时,我遇到了一个错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mypackage.android.myproject/com.mypackage.aMyLib.LibraryActivity}: java.lang.IllegalArgumentException: No injector factory bound for Class<com.mypackage.aMyLib.LibraryActivity>
java.lang.RuntimeException:无法启动活动组件信息{com.mypackage.android.myproject/com.mypackage.aMyLib.LibraryActivity}:java.lang.IllegalArgumentException:类没有注入器工厂绑定
编辑

这是我的库中的匕首代码:

@Singleton
@Component(
    modules = [
        AndroidInjectionModule::class,
        AndroidSupportInjectionModule::class,
        ActivityBuilder::class,
        AppModule::class
    ]
)
interface AppComponent : AndroidInjector<MyApp> {

    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: Application): Builder
        fun build(): AppComponent
    }

    override fun inject(application: MyApp)

}

@Module
abstract class ActivityBuilder {

    @ContributesAndroidInjector(
        modules = [
            AppModule::class
        ]
    )
    abstract fun bindLibraryActivity(): LibraryActivity
}

@Module
class AppModule {
    @Provides
    fun provideContext(application: Application) = application as Context

}
@Singleton
@组成部分(
模块=[
AndroidInjectionModule::类,
AndroidSupportInjectionModule::类,
ActivityBuilder::类,
AppModule::类
]
)
接口组件:AndroidJector{
@组件生成器
界面生成器{
@装订
趣味应用程序(应用程序:应用程序):生成器
fun build():AppComponent
}
覆盖乐趣注入(应用程序:MyApp)
}
@模块
抽象类ActivityBuilder{
@贡献Android注射器(
模块=[
AppModule::类
]
)
抽象趣味bindLibraryActivity():LibraryActivity
}
@模块
类AppModule{
@提供
fun provideContext(应用程序:应用程序)=应用程序作为上下文
}

我错过了什么?

您应该在应用程序模块中将
ActivityBuilder
模块连接到组件,通常连接到根组件(在您的情况下,可能是
AppComponent
)。可能您不需要在库模块中有任何显式定义的组件

@Module
abstract class ActivityBuilder {
    @ContributesAndroidInjector
    abstract fun bindLibraryActivity(): LibraryActivity
}
根组件:

@Singleton
@Component(modules = [
    AndroidSupportInjectionModule::class,
    ActivityBuilder::class,
    ....
    ]
)
interface AppComponent { ... }
AppComponent
不应实现
androidjector
接口。您必须扩展
android.app.Application
,并使您的自定义应用程序类实现
HASANDROIDJECTOR
接口,以便注入工作


阅读此内容以更好地理解和使用示例。

您是否为
LibraryActivity
应用程序内模块添加了?您是否在库模块中启用了
kotlin kapt
插件?您不必在库模块中创建
AppComponent
,它必须仅存在于应用模块中。