2010-11-29 4 views
0

Я пытаюсь интегрировать JTwitter в приложение для Android, и я был полностью успешным до того момента, когда решил регрессионный тест на старых версиях Android. В Android 2.x мой код работает, но в Android 1,5/1,6 Dalvik бросает VerifyError на следующей строке:JTwitter VerifyError в Android pre-2.0

OAuthSignpostClient oauthClient 
     = new OAuthSignpostClient(KEY_TWITTER, SECRET_TWITTER, "oob"); 

и обеспечивает этот выход LogCat и трассировки стека:

Could not find method javax.swing.JOptionPane.showInputDialog, referenced from method winterwell.jtwitter.OAuthSignpostClient.askUser 
VFY: unable to resolve static method 1703: Ljavax/swing/JOptionPane;.showInputDialog (Ljava/lang/Object;)Ljava/lang/String; 
VFY: rejecting opcode 0x71 at 0x0000 
VFY: rejected Lwinterwell/jtwitter/OAuthSignpostClient;.askUser (Ljava/lang/String;)Ljava/lang/String; 
Verifier rejected class Lwinterwell/jtwitter/OAuthSignpostClient; 
Shutting down VM 
threadid=3: thread exiting with uncaught exception (group=0x4001aa28) 
Uncaught handler: thread main exiting due to uncaught exception 
java.lang.VerifyError: winterwell.jtwitter.OAuthSignpostClient 
    at com.wirelessdesigns.android.AuthActivity.onCreate(AuthActivity.java:37) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
    at android.app.ActivityThread.access$2100(ActivityThread.java:116) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:4203) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:521) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
    at dalvik.system.NativeStart.main(Native Method) 

I» m пытается выяснить, что могло быть изменено в базовой реализации между версиями Android, которые повлияли бы на это, и каковым может быть обходной путь? A similar question ответил некоторое время назад, но ответ был в форме теперь мертвой ссылки на сообщение в форуме.

Любые мысли?

+0

Очевидно, что OAuthSignpostClient реализован с использованием API, представленного на уровне 5 или выше. Вероятно, вы должны извлечь OAuthSignpostClient.java из jtwitter.jar, чтобы узнать, что именно. Я пытался это сделать сейчас, но мой JDK, похоже, сломан. 2010-11-29 17:34:42

+0

Можете ли вы опубликовать материал, который появляется в logcat чуть выше исключения? Должно быть несколько строк с «VFY» в них, которые расскажут вам, где проблема (возможно, загадочно). Отметим также, что верификатор работает по-разному в версии 2.0+; pre-2.0 немедленно отклонил классы, если что-то не так, 2.0, а затем он регистрирует предупреждение и вставляет инструкцию «всегда бросать», которая срабатывает при выполнении кода. Дополнительная информация: http://android.git.kernel.org/?p=platform/dalvik.git;a=blob_plain;f=docs/verifier.html;hb=HEAD. – fadden 2010-11-29 23:09:28

ответ

0

Перед Android 2.0 верификатор немедленно отклонит классы, когда что-то не так. В версии 2.0 и более поздних версий сообщения о некоторых сбоях откладываются до тех пор, пока код не будет выполнен. Одним из таких случаев является попытка вызвать несуществующий или недоступный метод.

Это пример того, почему поведение верификатора было изменено. Несмотря на то, что вы не вызываете отсутствующую функцию, весь класс, который пытается ее вызвать, получает отклонение.

Некоторые обходные пути можно найти here, но похоже, что вы нашли один по своему усмотрению.

Смежные вопросы