AndroidX Dagger2 MultiDexApplication:未实现HasActivityInjector

时间:2018-09-24 14:35:50

标签: android dagger-2 android-multidex androidx

我找不到解决此问题的方法。

我已经可以使用我的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

2 个答案:

答案 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类。