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

問題は、実際にはメソッドが大きすぎるということではありません。ジンジャーブレッドの時点で、過度に大きなメソッドによってメソッドが拒否されることはなくなりました。(最初の「拒否された」メッセージが表示されるのは、LOG_VFY_METHマクロを使用してメソッド名を報告しているためです。)

本当の問題は、2 番目の苦情ですregister2 v12-13 values 0,0 ... rejecting opcode 0xab。0xab は「add-double」命令であり、64 ビットの引数を取ります。これは、2 つの 32 ビット Dalvik レジスタの型が「double low」と「double high」であることを意味します。検証者は、それらが両方とも「不明」なタイプ 0 であることを発見しました。

したがって、Dalvik 検証ツールにバグがあるか、生成されたコードにバグがある (おそらく "dx" ツールに由来する) かのいずれかです。http://b.android.com/でレポートを提出する必要があります。

于 2012-11-13T19:35:18.720 に答える