2011-05-17 4 views
0

Je cours dans un VerifyError après la mise à jour de ma Xoom à 3.1. Voici le code qui semble le provoquer.Android 3.1 VerifyError

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

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

     return true; 
} 

_overlay est un FrameLayout et _pdfView est une classe pour le rendu des documents PDF qui RelativeLayout étend. Voici l'erreur que je reçois.

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 

Si je commente la ligne _overlay.removeView(_pdfView); il fonctionne très bien. C'est comme s'il ne savait pas que PdfView est une sous-classe de View. PdfView est dans une bibliothèque. Cela pourrait-il avoir quelque chose à voir avec ça?

Répondre

1

Opcode 0x6e est "invoke-virtual", utilisé pour l'appel de méthode. Le message est émis par le code qui valide les arguments transmis à la méthode cible.

"Ljava/lang/Object; n'est pas l'instance de Landroid/view/View;" suggère à moi que quelques types ont fusionné, et le vérificateur n'a pas pu trouver une superclasse commune ci-dessous java.lang.Object. (S'il se plaignait que "PdfView n'est pas une instance de View", alors je serais d'accord avec votre évaluation que la VM n'a pas compris les relations de classe.)

Pouvez-vous coller dans le démontage de goBack() ? Si vous exécutez "dexdump -d" sur l'APK, il habite et recherche "com.bluediesel.shell.utils.JavaScriptInterface.goBack", vous devriez aller droit à cela. Il suffit d'inclure les lignes (20-ish?) Du bytecode désassemblé pour la méthode.

+0

Je n'ai aucune idée de ce qui s'est passé. Il m'a toujours donné cette erreur même après un nettoyage et une reconstruction, mais j'ai changé le numéro de version et ça a commencé à fonctionner! Je pense que c'est peut-être parce qu'Android fait une sorte de nettoyage sur l'appareil, mais je n'en ai aucune idée. De toute façon, je vais vous donner la coche pour intensifier et savoir plus sur ce truc que toute personne devrait! ;) – CaseyB

+1

CaseyB: à partir de quelle version avez-vous changé? –

Questions connexes