VerrifyError с проектом Guice на Android maven

Поэтому я пытаюсь заставить Guice работать в моем проекте android maven и объединить его в сторонний модуль. Он нормально работает в обычном тесте junittest, который выполняет тестовое внедрение, но завершается неудачно на ВМ с сообщением logcat, прикрепленным ниже.

Что я не могу понять, так это многочисленные сообщения о том, что Guice прекрасно работает на Android. Несмотря на это, мой код, похоже, не работает при вызове getBeanInfo () из инжектора Guice. Кажется, я не единственный, у кого есть эта ошибка.

Есть ли обходной путь для ошибки Android "Невозможно разрешить виртуальный метод java/beans/PropertyDescriptor"?

Итак, у меня есть пара вопросов. Является ли причиной того, что Guice не работает для меня, потому что мой сторонний модуль вызывает некоторые функции, которые повсеместно выходят из строя, но не распространены? Есть ли способ получить больше информации от Guice относительно того, что конкретно вызывает вызывающий сбой getBeanInfo ()? Есть ли обходные пути? Какие возможности мне доступны для дальнейшей отладки.

Решение должно быть совместимо с maven, поскольку ответы на аналогичный вопрос о настройке параметров затмения для подобных проблем не могут быть применимы. Получение "Причины: java.lang.VerifyError:" (в любом случае, я не получил здесь большого пробега).

Я думаю, что все соответствующие файлы были обработаны dx плагином android maven, как зависимость: дерево показывает все соответствующие проекты в области "compile", но я здесь не эксперт.

03-05 00: 57: 34.529: I / dalvikvm (2295): threadid = 3: реагирование на сигнал 3
03-05 00:57:34.568: I/dalvikvm(2295): записал трассировки стека в /data/anr/traces.txt
03-05 00:57:35.059: I/dalvikvm(2295): threadid=3: реагирование на сигнал 3
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): не удалось загрузить финализатор в своем загрузчике классов. Вместо этого загружается финализатор в текущий загрузчик классов. В результате вы не сможете собрать мусор этого загрузчика классов. Чтобы поддержать исправление этого загрузчика классов, либо решите основную проблему, либо переместите Коллекции Google в путь к системным классам.
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): java.io.FileNotFoundException: com/google/inject/internal/util/$Finalizer.class
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.google.inject.internal.util.$FinalizableReferenceQueue$DecoupledLoader.getBaseUrl(FinalizableReferenceQueue.java:269)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.google.inject.internal.util.$FinalizableReferenceQueue$DecoupledLoader.loadFinalizer(FinalizableReferenceQueue.java:253)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.google.inject.internal.util.$FinalizableReferenceQueue.loadFinalizer(FinalizableReferenceQueue.java:175)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295):    at com.google.inject.internal.util.$FinalizableReferenceQueue.(FinalizableReferenceQueue.java:100)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295):    at com.google.inject.internal.util.$MapMaker$QueueHolder.(MapMaker.java:787)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.google.inject.internal.util.$MapMaker$WeakEntry.(MapMaker.java:946)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.google.inject.internal.util.$MapMaker$Strength$1.newEntry(MapMaker.java:312)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): в com.google.inject.internal.util.$MapMaker$StrategyImpl.newEntry(MapMaker.java:498)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.google.inject.internal.util.$MapMaker$StrategyImpl.newEntry(MapMaker.java:419)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): по адресу com.google.inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2029)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): в com.google.inject.internal.Annotations$AnnotationChecker.hasAnnotations(Annotations.java:116)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): по адресу com.google.inject.internal.Annotations.isScopeAnnotation(Annotations.java:124)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): по адресу com.google.inject.internal.ScopeBindingProcessor.visit(ScopeBindingProcessor.java:40)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): по адресу com.google.inject.internal.ScopeBindingProcessor.visit(ScopeBindingProcessor.java:30)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): в com.google.inject.spi.ScopeBinding.acceptVisitor(ScopeBinding.java:59)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.google.inject.internal.AbstractProcessor.process(AbstractProcessor.java:55)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:165)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.google.inject.Guice.createInjector(Guice.java:95)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.google.inject.Guice.createInjector(Guice.java:72)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.google.inject.Guice.createInjector(Guice.java:62)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): по адресу za.co.mambo.cherrylist.android.CherryListActivity.onCreate(CherryListActivity.java:27)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295):    at android.app.Activity.performCreate(Activity.java:4465)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): в android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на android.app.ActivityThread.access$600(ActivityThread.java:123)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): в android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на android.os.Handler.dispatchMessage(Handler.java:99)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на android.os.Looper.loop(Looper.java:137)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на android.app.ActivityThread.main(ActivityThread.java:4424)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): в java.lang.reflect.Method.invokeNative(собственный метод)
03-05 00: 57: 35.098: W / nalizableReferenceQueue (2295): в java.lang.reflect.Method.invoke(Method.java:511)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-05 00:57:35.098: W/nalizableReferenceQueue(2295): в dalvik.system.NativeStart.main(собственный метод)
03-05 00:57:35.108: I/dalvikvm(2295): записал трассировки стека в '/data/anr/traces.txt'
03-05 00:57:35.338: D/dalvikvm(2295): GC_CONCURRENT освобожден 391K, 4% свободен 12676K/13127K, приостановлен 8ms+5ms
03-05 00:57:35.418: W/dalvikvm(2295): VFY: невозможно найти класс, на который есть ссылка в подписи ([Ljava/beans/PropertyDescriptor;)
03-05 00:57:35.418: W/dalvikvm(2295): VFY: невозможно найти класс, на который есть ссылка в подписи ([Ljava/beans/PropertyDescriptor;)
03-05 00:57:35.418: W/dalvikvm(2295): VFY: невозможно найти класс, на который есть ссылка в подписи ([Ljava/beans/PropertyDescriptor;)
03-05 00:57:35.418: W/dalvikvm(2295): VFY: невозможно найти класс, на который есть ссылка в подписи ([Ljava/beans/PropertyDescriptor;)
03-05 00:57:35.418: W/dalvikvm(2295): VFY: невозможно найти класс, на который есть ссылка в подписи ([Ljava/beans/PropertyDescriptor;)
03-05 00:57:35.428: W/dalvikvm(2295): VFY: невозможно найти класс, на который есть ссылка в подписи ([Ljava/beans/PropertyDescriptor;)
03-05 00:57:35.438: I/dalvikvm(2295): не удалось найти метод java.beans.Introspector.getBeanInfo, на который ссылается метод com.google.inject.internal.cglib.core.$ReflectUtils.getPropertiesHelper
03-05 00:57:35.438: W/dalvikvm(2295): VFY: невозможно разрешить статический метод 8989: Ljava/beans/Introspector;.getBeanInfo (Ljava/lang/Class;Ljava/lang/Class;)Ljava/beans/BeanInfo;
03-05 00:57:35.438: D/dalvikvm(2295): VFY: замена кода операции 0x71 на 0x000c
03-05 00:57:35.458: W/dalvikvm(2295): VFY: невозможно разрешить класс исключений 1373 (Ljava/beans/IntrospectionException;)
03-05 00:57:35.458: W/dalvikvm(2295): VFY: невозможно найти обработчик исключений на адрес 0x4e
03-05 00:57:35.458: W/dalvikvm(2295): VFY: отклонено Lcom/google/inject/internal/cglib/core/$ReflectUtils;.getPropertiesHelper (Ljava/lang/Class;ZZ)[Ljava/beans/PropertyDescriptor;
03-05 00:57:35.458: W/dalvikvm(2295): VFY: отклонение кода операции 0x0d при 0x004e
03-05 00:57:35.458: W/dalvikvm(2295): VFY: отклонено Lcom / google / inject / internal / cglib / core / $ ReflectUtils;.getPropertiesHelper (Ljava / lang / Class; ZZ) [Ljava / beans / PropertyDescriptor;
03-05 00: 57: 35.458: W / dalvikvm (2295): верификатор отклонил класс Lcom/google/inject/internal/cglib/core/$ReflectUtils;
03-05 00:57:35.488: D/AndroidRuntime(2295): выключение виртуальной машины
03-05 00:57:35.498: W/dalvikvm(2295): threadid=1: поток завершается с необработанным исключением (группа =0x409c01f8)
03-05 00:57:35.508: I/dalvikvm(2295): threadid=3: реагирование на сигнал 3
03-05 00:57:35.548: I/dalvikvm(2295): записал трассировки стека в /data/anr/traces.txt
03-05 00:57:35.568: E/AndroidRuntime(2295): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное
03-05 00:57:35.568: E/AndroidRuntime(2295): java.lang.RuntimeException: невозможно запустить действие ComponentInfo{za.co.mambo.cherrylist.android/za.co.mambo.cherrylist.android.CherryListActivity}: com.google.inject.internal.util.$ComputationException: java.lang.VerifyError: com/google/inject/internal/cglib/core/$ReflectUtils
03-05 00:57:35.568: E/AndroidRuntime(2295): на android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
03-05 00:57:35.568: E/AndroidRuntime(2295): на android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-05 00:57:35.568: E/AndroidRuntime(2295): на android.app.ActivityThread.access$600(ActivityThread.java:123)
03-05 00:57:35.568: E/AndroidRuntime(2295): в android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-05 00:57:35.568: E/AndroidRuntime(2295): на android.os.Handler.dispatchMessage(Handler.java:99)
03-05 00:57:35.568: E/AndroidRuntime(2295): на android.os.Looper.loop(Looper.java:137)
03-05 00:57:35.568: E/AndroidRuntime(2295): на android.app.ActivityThread.main(ActivityThread.java:4424)
03-05 00:57:35.568: E/AndroidRuntime(2295): по адресу java.lang.reflect.Method.invokeNative(собственный метод)
03-05 00:57:35.568: E/AndroidRuntime(2295): на java.lang.reflect.Method.invoke(Method.java:511)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-05 00:57:35.568: E/AndroidRuntime(2295):     at dalvik.system.NativeStart.main(собственный метод)
03-05 00:57:35.568: E/AndroidRuntime(2295): вызвано: com.google.inject.internal.util. $ ComputationException: java.lang.VerifyError: com / google / inject / internal / cglib / core / $ ReflectUtils
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:553)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:419)
03-05 00:57:35.568: E/AndroidRuntime(2295): в com.google.inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2041)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.FailableCache.get(FailableCache.java:50)
03-05 00:57:35.568: E/AndroidRuntime(2295): в com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:49)
03-05 00:57:35.568: E/AndroidRuntime(2295):     at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:125)
03-05 00:57:35.568: E/AndroidRuntime(2295): в com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:521)
03-05 00:57:35.568: E/AndroidRuntime(2295): в com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:847)
03-05 00:57:35.568: E/AndroidRuntime(2295): в com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:772)
03-05 00:57:35.568: E/AndroidRuntime(2295): в com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:256)
03-05 00:57:35.568: E/AndroidRuntime(2295): в com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:205)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:853)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.FactoryProxy.notify(FactoryProxy.java:46)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.ProcessedBindingData.runCreationListeners(ProcessedBindingData.java:50)
03-05 00:57:35.568: E/AndroidRuntime(2295): по адресу com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:133)
03-05 00:57:35.568: E/AndroidRuntime(2295): в com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.Guice.createInjector(Guice.java:95)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.Guice.createInjector(Guice.java:72)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.Guice.createInjector(Guice.java:62)
03-05 00:57:35.568: E/AndroidRuntime(2295): по адресу za.co.mambo.cherrylist.android.CherryListActivity.onCreate(CherryListActivity.java:27)
03-05 00:57:35.568: E/AndroidRuntime(2295): на android.app.Activity.performCreate(Activity.java:4465)
03-05 00:57:35.568: E/AndroidRuntime(2295): на android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
03-05 00:57:35.568: E/AndroidRuntime(2295): на android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
03-05 00:57:35.568: E/AndroidRuntime(2295):     ... еще 11
03-05 00:57:35.568: E/AndroidRuntime(2295): вызвано: java.lang.VerifyError: com / google / inject / internal / cglib / core / $ ReflectUtils
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.cglib.reflect.$FastClassEmitter.(FastClassEmitter.java:67)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.cglib.reflect.$FastClass$Generator.generateClass(FastClass.java:72)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.cglib.core.$DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:216)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.cglib.reflect.$FastClass$Generator.create(FastClass.java:64)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.BytecodeGen.newFastClass(BytecodeGen.java:207)
03-05 00:57:35.568: E/AndroidRuntime(2295):     at com.google.inject.internal.DefaultConstructionProxyFactory.create(DefaultConstructionProxyFactory.java:53)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal.ProxyFactory.create(ProxyFactory.java:153)
03-05 00:57:35.568: E/AndroidRuntime(2295): на com.google.inject.internal
03-05 00:57:36.178: I/dalvikvm(2295): threadid=3: реагирование на сигнал 3
03-05 00:57:36.188: I/dalvikvm(2295): записал трассировки стека в /data/anr/traces.txt
03-05 00:57:36.530: I/dalvikvm(2295): threadid=3: реагирование на сигнал 3
03-05 00:57:36.538: I/dalvikvm(2295): записал трассировки стека в /data/anr/traces.txt

1 ответ

Решение

Dalvik vm не поддерживает аспектно-ориентированное программирование, поэтому вы не можете использовать простой Guice JVM. Вы должны использовать версию no_aop.

С использованием сборки Maven

<dependency>
  <groupId>com.google.inject</groupId>
  <artifactId>guice</artifactId>
  <version>3.0</version>
  <classifier>no_aop</classifier>
</dependency>

чтобы получить банку no_aop в вашу сборку и apk.

Конечно, вы также можете посмотреть на использование RoboGuice.

Другие вопросы по тегам