Пример приложения для библиотеки имеет около 67 000 методов. Он имеет multidex, позволяющий преодолеть ограничение метода 65k. К сожалению, при включенном мультидексе приложение вылетает на VerifyError
при попытке внедрить EndpointAdapter
в основную активность.
Эта проблема не возникает, когда приложение защищено и мультидекс отключен, поэтому она должна быть вызвана проблемами с мультидексом и кинжалом 1.
Я уверен, что EndpointAdapter
находится в основном файле dex, но некоторые классы, сгенерированные Dagger, находятся во втором файле dex, сгенерированном multidex. Эта проблема возникает на устройствах с API ‹ 21 (например, на genymotion с KitKat 4.4.4).
Есть идеи, почему он вылетает с 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 больше не использует отражение, которое является основным фактором этой проблемы.
@Inject
аннотированный конструктор с 2 зависимостями, но я не уверен, в каком индексе находятся зависимости. Под «исправленным» вы подразумеваете после того, как MultiDex инициализируется и печатает журнал установки? - person tomrozb   schedule 07.08.2015