我找不到解决此问题的方法。
我已经可以使用我的multi-dex应用程序,但是自从我添加了Dagger 2.16以来,它就无法正常工作。
这是我的应用程序类别:
class App : MultiDexApplication(), HasActivityInjector {
@Inject
lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Activity>
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
AppInjector.init(this)
}
override fun activityInjector(): AndroidInjector<Activity> = dispatchingAndroidInjector
}
启动时出错
Caused by: java.lang.RuntimeException: androidx.multidex.MultiDexApplication does not implement dagger.android.HasActivityInjector
答案 0 :(得分:2)
当我忘记在App
中注册AndroidManifest.xml
时遇到错误。我还必须像这样在MultiDex
中注册attachBaseContext
:
class App : DaggerApplication() {
override fun applicationInjector(): AndroidInjector<out DaggerApplication> =
DaggerAppComponent.builder().create(this)
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}
}
答案 1 :(得分:1)
检查清单(AndroidManifest.xml
),并确保您的<application>
标签列出您的应用程序而不是MultiDexApplication,尤其是在调用AppInjector之前没有看到Timber日志的情况下。
请注意,您的错误消息指出:
原因:java.lang.RuntimeException: androidx.multidex.MultiDexApplication 没有实现dagger.android.HasActivityInjector
...这表明getApplication()
返回的类的类型为MultiDexApplication
,而不是App
。一般而言,Android建议保持Application子类轻便。 docs建议子类是可选的,并且如果您不需要自定义Application子类,则DaggerApplication和MultiDexApplication均设计为可以起作用。这样一来,您的清单可能就不会指向您的App类。