Android Dagger2和外部库:无法启动活动组件信息
在我的android项目中,我使用了我编写的AAR库模块,项目和库都使用Dagger进行依赖注入 在我的项目中,我使用如下库: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 ) } 但当我启动我的应用程序时,我遇到了一个错误:
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
,它必须仅存在于应用模块中。