1

我正在 Eclipse 中运行一个程序,该程序涉及一些数学和数据库输入。在某一时刻,它似乎太多了,因为 Eclipse 给了我一个 VerifyError。当我删除一点时它运行良好,不管我删除什么,所以它不是导致错误的特定部分,而是它的长度,似乎。这是错误消息:

10-27 17:04:03.855: W/dalvikvm(12618): VFY: warning: method is huge (regs=643 insnsSize=7090)
10-27 17:04:03.855: W/dalvikvm(12618): VFY:  rejected Lcom/example/simpledatabasetutorial/DatabaseManageActivity;.onClick (Landroid/view/View;)V
10-27 17:04:04.114: W/dalvikvm(12618): VFY: register2 v12-13 values 0,0
10-27 17:04:04.114: W/dalvikvm(12618): VFY:  rejecting opcode 0xab at 0x10f2
10-27 17:04:04.114: W/dalvikvm(12618): VFY:  rejected Lcom/example/simpledatabasetutorial/DatabaseManageActivity;.onClick (Landroid/view/View;)V
10-27 17:04:04.114: W/dalvikvm(12618): Verifier rejected class Lcom/example/simpledatabasetutorial/DatabaseManageActivity;
10-27 17:04:04.114: W/dalvikvm(12618): Class init failed in newInstance call (Lcom/example/simpledatabasetutorial/DatabaseManageActivity;)
10-27 17:04:04.114: D/AndroidRuntime(12618): Shutting down VM
10-27 17:04:04.114: W/dalvikvm(12618): threadid=1: thread exiting with uncaught exception (group=0x40015560)
10-27 17:04:04.145: E/AndroidRuntime(12618): FATAL EXCEPTION: main
10-27 17:04:04.145: E/AndroidRuntime(12618): java.lang.VerifyError: com.example.simpledatabasetutorial.DatabaseManageActivity

任何快速解决方案的想法?也许这还远远不够,如果是这种情况,请告诉我,我将包括相关的内容。

4

1 回答 1

1

问题实际上并不在于您的方法太大。与姜饼一样,过大的方法不再导致方法被拒绝。(第一个“rejected”消息只是出现,因为它使用LOG_VFY_METH宏来报告方法名称。)

真正的问题是第二个投诉,register2 v12-13 values 0,0 ... rejecting opcode 0xab. 0xab 是一个“加双”指令,它接受一个 64 位参数,这意味着两个 32 位 Dalvik 寄存器上的类型应该是“双低”和“双高”。验证者发现它们都是零类型,即“未知”。

所以要么在 Dalvik 验证器中存在错误,要么在生成的代码中存在错误(可能源自“dx”工具)。您应该在http://b.android.com/上提交报告。

于 2012-11-13T19:35:18.720 回答