【问题标题】:how to solve android verify error?如何解决android验证错误?
【发布时间】:2011-01-20 15:10:19
【问题描述】:

我正在使用 android 应用程序。当我在错误 occred 下运行该应用程序时。请帮助我......

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

【问题讨论】:

  • 您需要去接受您之前问题的答案;你有 12 个并且没有接受一个答案。
  • 下面的各种答案基本上是正确的——该方法比 VM 认为合理的要大。将方法分解成更小的部分会有所帮助。 FWIW,在最新版本的 Android 中,此限制已完全取消。

标签: android


【解决方案1】:

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

来自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 编译器尝试为每个 方法中的局部变量

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

通过将它们设为实例变量,您可以删除 编译器需要/渴望“管理”它们(并制作方法 小很多)。

【讨论】:

    【解决方案2】:

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

    我认为简短的回答是:您的方法太大,您需要将其优化为更小以使其适合。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-25
          • 2019-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-11
          相关资源
          最近更新 更多