2011-05-17 56 views
0

我在將Xoom更新爲3.1後遇到VerifyError錯誤。這是似乎導致它的代碼。Android 3.1 VerifyError

public boolean goBack() 
{ 
     if(_overlay == null || _pdfView == null) return false; 

     _overlay.removeView(_pdfView); 
     _overlay = null; 
     _pdfView = null; 

     return true; 
} 

_overlayFrameLayout_pdfView對於呈現擴展RelativeLayout PDF文檔的類。這是我得到的錯誤。

05-17 11:26:30.532: WARN/dalvikvm(14244): VFY: Ljava/lang/Object; is not instance of Landroid/view/View; 
05-17 11:26:30.532: WARN/dalvikvm(14244): VFY: bad arg 1 (into Landroid/view/View;) 
05-17 11:26:30.532: WARN/dalvikvm(14244): VFY: rejecting call to Landroid/view/ViewGroup;.removeView (Landroid/view/View;)V 
05-17 11:26:30.532: WARN/dalvikvm(14244): VFY: rejecting opcode 0x6e at 0x000f 
05-17 11:26:30.532: WARN/dalvikvm(14244): VFY: rejected Lcom/bluediesel/shell/utils/JavaScriptInterface;.goBack()Z 
05-17 11:26:30.532: WARN/dalvikvm(14244): Verifier rejected class Lcom/bluediesel/shell/utils/JavaScriptInterface; 
05-17 11:26:30.532: DEBUG/AndroidRuntime(14244): Shutting down VM 
05-17 11:26:30.532: WARN/dalvikvm(14244): threadid=1: thread exiting with uncaught exception (group=0x401e2760) 
... 
05-17 11:26:30.542: ERROR/AndroidRuntime(14244): Caused by: java.lang.VerifyError: com.bluediesel.shell.utils.JavaScriptInterface 
05-17 11:26:30.542: ERROR/AndroidRuntime(14244):  at com.bluediesel.shell.utils.BDWebViewClient.<init>(BDWebViewClient.java:15) 
05-17 11:26:30.542: ERROR/AndroidRuntime(14244):  at com.bluediesel.shell.view.BDWebView.<init>(BDWebView.java:56) 
05-17 11:26:30.542: ERROR/AndroidRuntime(14244):  at com.bluediesel.shell.view.BDWebView.<init>(BDWebView.java:42) 
05-17 11:26:30.542: ERROR/AndroidRuntime(14244):  ... 24 more 

如果我註釋掉_overlay.removeView(_pdfView);這一行,它可以正常工作。這就像它不知道PdfView是View的一個子類。 PdfView在一個庫中。這有什麼關係嗎?

回答

1

操作碼0x6e是「invoke-virtual」,用於方法調用。消息由驗證傳遞給目標方法的參數的代碼發出。

「Ljava/lang/Object;不是Landroid/view/View的實例;」向我暗示有幾種類型被合併,驗證者在java.lang.Object下面找不到一個公共的超類。 (如果它抱怨說「PdfView不是View的一個實例」,那麼我同意你的評估VM不理解類關係)。

你可以在反彙編中粘貼goBack() ?如果您在其所在的APK上運行「dexdump -d」並搜索「com.bluediesel.shell.utils.JavaScriptInterface.goBack」,則應該直接跳到它。只需包含該方法的(20-ish?)反彙編字節碼行。

+0

我不知道發生了什麼事。即使在清理和重建之後,它仍然給我這個錯誤,但是我改變了版本號並開始工作!我認爲這可能是因爲它會導致Android在設備上進行某種清理,但我不知道。無論哪種方式,我會給你加號的檢查標記,並且知道更多關於這個東西的方式,任何人都應該! ;) – CaseyB 2011-05-17 22:44:59

+1

CaseyB:你從哪個版本切換到哪個版本? – 2012-01-17 09:34:17