所以我试图让 Guice 在我的 android maven 项目中运行并捆绑在第 3 方模块中。它在进行测试注入的普通 junittest 中运行良好,但在 VM 上失败并附有下面的 logcat 消息。
我无法理解的是,有许多关于 Guice 在 android 上运行良好的报告。尽管如此,我的代码似乎在从 Guice 注入器调用 getBeanInfo() 时失败了。看来我不是唯一一个有这个错误的人。
Android 错误“无法解析虚拟方法 java/beans/PropertyDescriptor”是否有解决方法?
所以我有几个问题。Guice 对我不起作用的原因是因为我的 3rd 方模块正在调用某些功能,这些功能会在所有地方都失败但并不常见?有没有办法从 Guice 中获取更多关于触发有问题的 getBeanInfo() 的具体信息?有变通办法吗?我可以通过哪些途径进行进一步调试。
该解决方案必须与 maven 兼容,因为对于类似问题的有关调整 eclipse 设置以解决类似问题的类似问题的答案不适用。得到“引起:java.lang.VerifyError:” (不是说我在这里有很多里程)。
我认为所有相关文件都由 dx 由 android maven 插件处理,因为 dependency:tree 显示了“编译”范围内的所有相关项目,但我不是这里的专家。
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): 在 com.google.inject.internal.util.$FinalizableReferenceQueue.(FinalizableReferenceQueue.java:100) 03-05 00:57:35.098: W/nalizableReferenceQueue(2295): 在 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): 在 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(Native Method) 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(Native Method) 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 /豆信息; 03-05 00:57:35.438: D/dalvikvm(2295): VFY: 在 0x000c 处替换操作码 0x71 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/属性描述符; 03-05 00:57:35.458: W/dalvikvm(2295): VFY: 在 0x004e 拒绝操作码 0x0d 03-05 00:57:35.458: W/dalvikvm(2295): VFY: 拒绝 Lcom/google/inject/internal/cglib/core/$ReflectUtils;.getPropertiesHelper (Ljava/lang/Class;ZZ)[Ljava/beans/属性描述符; 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): 关闭 VM 03-05 00:57:35.498: W/dalvikvm(2295): threadid=1: 线程以未捕获的异常退出 (group=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(Native Method) 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(Native Method) 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): at 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): 在 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): at 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): 在 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): at 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”