VerifyError для ".access" - PullRequest
       6

VerifyError для ".access"

1 голос
/ 01 декабря 2011

При обратном портировании приложения на 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

Удивительно, что в классе CardEditor и его родительском классе Activity нет метода access на каком-либо уровне общедоступного API. Исходный код не-API Android на самом деле содержит ActivityThread.access , но я использую исключительно общедоступный API.

Этот класс CardEditor не импортирует скомпилированные библиотеки (jar или около того). Операторы импорта являются либо «Android». или ссылаться на исходные файлы Java, которые находятся в том же проекте, и таким образом перекомпилироваться одновременно. Если это имеет значение, вот как я всегда компилирую: ant clean debug, свежий файл Ant, автоматически создаваемый Android SDK.

1 Ответ

3 голосов
/ 08 декабря 2011

Возможно, вы столкнулись с ограничением Dalvik. Методы не могут генерировать более 65535 байт-кодов. Попробуйте найти самые большие методы в CardEditor и разбить их на куски. Например, вызывая другие методы вместо кодирования непосредственно после каждого «случая», и посмотрите, работает ли это.

Пожалуйста, посмотрите на эту ссылку

...