如何解决android验证错误?

时间:2011-01-20 15:10:19

标签: android

我正在使用android应用程序。当我在下面运行此应用程序时发生错误。请帮助我......

01-20 20:39:02.955: WARN/dalvikvm(5690): VFY: arbitrarily rejecting large method (regs=93 count=23019)
01-20 20:39:02.955: WARN/dalvikvm(5690): VFY:  rejected Lez/com/Action_module_screen;.da ()V
01-20 20:39:02.955: WARN/dalvikvm(5690): Verifier rejected class Lez/com/Action_module_screen;
01-20 20:39:02.955: INFO/System.out(5690): verify Errorez.com.Action_module_screen

4 个答案:

答案 0 :(得分:4)

一些谷歌搜索原因和解决方法:

来自http://www.mentby.com/Group/android-developers/vfy-arbitrarily-rejecting-large-method.html

  

这意味着 (寄存器数量*指令字数) 的值是   大于 2 ^ 21 [2,097,152]。

您的错误显示该方法可能包含大量参数和局部变量(regs=93)以及大量代码(说明count=23019):

`93 registers * 23019 number of instruction words` = 2,140,767
 exceeding the "size" limit of 2,097,152 by 43,615 (2%)

验证者认为你的方法不合理: - )。

  

我并不是真的希望有人能够达到这个目标 - 它的意图是   防止验证者膨胀应用程序的本机堆 。是吗?   方法采用 大量参数 ,或者 大量本地   变量? 时, 一个方法有4个不良行为   调用另一个带15个参数的方法的调用 ;该   寄存器分配器吓坏了一点。

     

是否存在调试信息会影响    “dx”代码优化器允许执行的操作 (例如一些不必要的内容)   将保留说明,以便调试器可以显示某些内容   合理而单步)。 通常开销很小,但是   可能是你已经接近边缘了,这会让你感到震惊。

同样来自http://www.mentby.com/Group/android-developers/verifyerror-arbitrarily-rejecting-large-method.html

  

除了某种方式 减少并行分支的宽度 (例如,   如果可以的话,将内部switch语句放在他们自己的方法中)    减少“全局”局部变量的数量 (方法局部变量   到达所有分支路径的那些 可能会有很大帮助

     

是的, Dalvik编译器试图为每个人分配一个“寄存器”   方法中的局部变量

我不赞成这种方法,但您也可以将一些方法参数和局部变量转换为实例变量:

  

通过 制作实例变量 ,您将其删除   编译器需要/希望“管理”它们(并且还制作方法   相当数量的小)。

答案 1 :(得分:2)

你的Errorez.com.Action_module_screen类中有一个方法太大(“任意拒绝大方法”)。看起来有问题的方法是da()。尝试减小该方法的大小。

答案 2 :(得分:2)

以下是similar question的链接。
你的问题是(93 * 23019)> 2 ^ 21(2 ^ 21 = 2097152)

我相信简短的回答是:你的方法太大,你需要将它优化得更小,以便它适合。

答案 3 :(得分:0)

通常显示你的apk包含代码,不对应操作系统版本/级别或者它有编译问题。有时它有助于清理项目并重建所有内容。 如果清洁没有帮助,你可能应该提供更长的堆栈跟踪:)