Перенося приложение на Android 1.5, я постоянно исправляю ошибки 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
Сбивает с толку то, что в классе access. ="nofollow">CardEditor, ни его родительский класс Activity , на любом уровне общедоступного API. Исходный код Android без API фактически содержит ActivityThread.access, но я использую исключительно общедоступный API.
Этот класс CardEditor
не импортирует скомпилированные библиотеки (jar или около того). Операторы импорта либо "android". или ссылаться на исходные файлы Java, которые находятся в одном проекте и, таким образом, перекомпилируются в одно и то же время. Если это имеет значение, вот как я всегда компилирую: ant clean debug
, новый файл Ant, автоматически созданный Android SDK.