使用Dagger注入依赖项时,multidex应用程序中的VerifyError

时间:2015-08-02 16:17:51

标签: android dagger multidex android-multidex

库的示例应用程序有~67k方法。它具有multidex功能,可以克服65k方法限制。很遗憾,在启用multidex时,当尝试在主要活动中注入VerifyError时,应用会在EndpointAdapter上崩溃。

当应用程序进入程序并禁用multidex时,不会发生此问题,因此必须由multidex和Dagger 1问题引起。

我确定EndpointAdapter位于主dex文件中,但Dagger生成的某些类位于multidex生成的第二个dex文件中。在具有API<的设备上会出现此问题21(例如,使用KitKat 4.4.4进行genymotion)。

知道为什么它会与VerifyError崩溃?

FATAL EXCEPTION: main
Process: pl.toro.libsample.debug, PID: 11775
java.lang.VerifyError: pl/toro/lib/network/EndpointAdapter
    at java.lang.Class.getDeclaredConstructors(Native Method)
    at java.lang.Class.getDeclaredConstructors(Class.java:574)
    at dagger.internal.loaders.ReflectiveAtInjectBinding.getConstructorsForType(ReflectiveAtInjectBinding.java:232)
    at dagger.internal.loaders.ReflectiveAtInjectBinding.create(ReflectiveAtInjectBinding.java:168)
    at dagger.internal.FailoverLoader.getAtInjectBinding(FailoverLoader.java:74)
    at dagger.internal.Linker.createBinding(Linker.java:224)
    at dagger.internal.Linker.linkRequested(Linker.java:141)
    at dagger.ObjectGraph$DaggerObjectGraph.getInjectableTypeBinding(ObjectGraph.java:309)
    at dagger.ObjectGraph$DaggerObjectGraph.inject(ObjectGraph.java:279)
    at pl.toro.lib.app.BaseApplication.inject(BaseApplication.java:135)
    ...

这是MultiDex标签的输出

VM with version 1.6.0 does not have multidex support
install
MultiDexExtractor.load(/data/app/pl.toro.libsample.debug-1.apk, false)
Detected that extraction must be performed.
Extraction is needed for file /data/data/pl.toro.libsample.debug/code_cache/secondary-dexes/pl.toro.libsample.debug-1.apk.classes2.zip
Extracting /data/data/pl.toro.libsample.debug/code_cache/secondary-dexes/pl.toro.libsample.debug-1.apk.classes-1477675005.zip
Renaming to /data/data/pl.toro.libsample.debug/code_cache/secondary-dexes/pl.toro.libsample.debug-1.apk.classes2.zip
Extraction success - length /data/data/pl.toro.libsample.debug/code_cache/secondary-dexes/pl.toro.libsample.debug-1.apk.classes2.zip: 187777
load found 1 secondary dex files
install done

修改

我已切换到Dagger 2,此问题已解决。 Dagger 2不再使用反射,这是这个问题的主要因素。

1 个答案:

答案 0 :(得分:0)

正如本博文[1]中所指出的那样,您是否在安装multi-dex后创建了匕首图。所以在调用super之后MultiDexApplication#attachBaseContext(或者自己调用MultiDex.install())。

[1] https://developers.soundcloud.com/blog/congratulations-you-have-a-lot-of-code-remedying-androids-method-limit-part-2