Использование Dagger2 на Android приводит к ошибке VerifyError на некоторых устройствах.

У меня есть приложение для Android, использующее Dagger2. У меня есть компонент Dagger с именем AppComponent, действие с именем MainActivity. MainActivity имеет введенное поле: @Inject MainDataModel mModel и использует DaggerAppComponent.inject(mainActivity) для заполнения поля. Я поместил код инициализации компонента в Application.onCreate(). Во время выполнения я сталкиваюсь с VerifyError во время инициализации компонента.

Fatal Exception: java.lang.VerifyError: com/myapp/a
   at com.myapp.dagger.DaggerAppComponent.initialize(DaggerAppComponent.java:39)
   at com.myapp.dagger.DaggerAppComponent.(DaggerAppComponent.java:29)
   at com.myapp.dagger.DaggerAppComponent.(DaggerAppComponent.java:19)
   at com.myapp.dagger.DaggerAppComponent$Builder.build(DaggerAppComponent.java:75)
   at com.myapp.dagger.ComponentHolder.init(ComponentHolder.java:15)
   at com.myapp.AppInitializer.init(AppInitializer.java:13)
   at com.myapp.app.MyApp.onCreate(MyApp.java:341)
   at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1069)
   at com.lbe.security.service.core.client.b.x.callApplicationOnCreate(Unknown Source)
   at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4699)
   at android.app.ActivityThread.access$1300(ActivityThread.java:171)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1447)
   at android.os.Handler.dispatchMessage(Handler.java:107)
   at android.os.Looper.loop(Looper.java:194)
   at android.app.ActivityThread.main(ActivityThread.java:5433)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:525)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:853)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
   at dalvik.system.NativeStart.main(NativeStart.java)

Проверив файл сопоставления, я обнаружил, что класс, вызывающий сообщение VerifyError, является классом MainActivity_MembersInjector, который также генерируется Dagger.

Строка, которая вызывает это, this.mainActivityMembersInjector = MainActivity_MembersInjector_MembersInjector.create(MembersInjectors.noOp(), this.mainDataModelProvider); внутри класса DaggerAppComponent.

Единственное, что нельзя, это то, что это происходит только на определенных устройствах, таких как Xiaomi 2014011. Есть идеи, как это исправить?


person Chris.Zou    schedule 29.02.2016    source источник
comment
Есть ли у вас новости по этому вопросу?   -  person Bruno Pinto    schedule 03.04.2017


Ответы (1)


Включена ли функция multiDex в вашей конфигурации build.gradle?

person Marius Constantin    schedule 29.02.2016
comment
Да, мультидекс включен. - person Chris.Zou; 29.02.2016
comment
Попробуйте без multiDex и дайте мне знать, если вы все еще сталкиваетесь с этой проблемой. Между тем, вы можете посмотреть здесь, проблема связана с Dagger1, но, вероятно, она может повлиять и на Dagger2: stackoverflow.com/questions/31773884/ - person Marius Constantin; 29.02.2016