我在 Android 应用程序上遇到了 java.lang.VerifyError
。
我用 Google 搜索并遇到了各种验证错误,但找不到发生这种情况的可靠原因。
这是堆栈跟踪。
我正在使用 Android SDK Tools 22.3,应用程序在 Android 2.2 上运行
W/dalvikvm( 2327): VFY: 'this' arg 'Ljava/lang/String;' not instance of 'Lcom/mypackage/BPM/DATA_Manager_BPM;'
W/dalvikvm( 2327): VFY: rejecting opcode 0x74 at 0x085d
W/dalvikvm( 2327): VFY: rejected Lcom/mypackage/DEALER/DEALER_FailedOperationManager$TransactionAsyncTask;.doInBackground ([Ljava/lang/Object;)Ljava/lang/Integer;
W/dalvikvm( 2327): Verifier rejected class Lcom/mypackage/DEALER/DEALER_FailedOperationManager$TransactionAsyncTask;
D/AndroidRuntime( 2327): Shutting down VM
W/dalvikvm( 2327): threadid=1: thread exiting with uncaught exception (group=0x4001d7e8)
有谁知道“拒绝操作码 0x74”这个“不是实例”错误是什么意思?或者关于在哪里查看的任何线索?
更新
TransactionAsyncTask 的签名如下。
class TransactionAsyncTask extends AsyncTask<Object, Void, Integer>
我只需使用 new TransactionAsyncTask().execute();
doInBackground
的签名是
protected Integer doInBackground(Object... params)
最佳答案
在 doInBackground()
中,有一个虚拟方法调用(操作码 0x74,使用寄存器调用虚拟),使用 String
作为 this
调用com.mypackage.BPM.DATA_Manager_BPM
预期位置的指针。
有other posts这表明可能涉及 ProGuard 错误。
关于java - 奇怪的 java.lang.VerifyError - VFY : 'this' arg 'Ljava/lang/String;' not instance of '(my-class-name),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20998930/