背移植一个应用程序到Android 1.5,我解决的VerifyError错误所有的时间,但这里是一个比平常明显少得多(full log here):的VerifyError的“访问”
W/dalvikvm(6978): VFY: invalid reg type 8 on iput instr (need 6)
W/dalvikvm(6978): VFY: rejecting opcode 0x5c at 0x0004
W/dalvikvm(6978): VFY: rejected Lcom/ichi2/anki/CardEditor;.access$1776 (Lcom/ichi2/anki/CardEditor;I)Z
W/dalvikvm(6978): Verifier rejected class Lcom/ichi2/anki/CardEditor;
W/dalvikvm(6978): Class init failed in newInstance call (Lcom/ichi2/anki/CardEditor;)
D/AndroidRuntime(6978): Shutting down VM
W/dalvikvm(6978): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
E/AndroidRuntime(6978): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(6978): java.lang.VerifyError: com.ichi2.anki.CardEditor
E/AndroidRuntime(6978): at java.lang.Class.newInstanceImpl(Native Method)
有趣线似乎是:rejected Lcom/ichi2/anki/CardEditor;.access
莫明其妙的事是,有在CardEditor类也不是它的父类Activity没有access
方法,在公共API的任何水平。非API Android源代码实际上包含ActivityThread.access,但我只使用公共API。
这个CardEditor
类不会导入任何编译的库(jar或so)。导入语句是“android”。或者引用同一项目中的Java源文件,从而在同一时间重新编译。如果这很重要,下面是我总是编译的:ant clean debug
,这是由Android SDK自动创建的新鲜Ant文件。
最长的方法有252行。我将交换机的每个“case”分成不同的私有方法,现在它工作,不再有VerifyError :-)非常感谢! –