9

我正在为 2.2 ( minSdkVersion=8) 开发,突然我收到了这个错误:

arbitrarily rejecting large method (regs=75 count=28584)
rejected Lcom/Demo/Loyalty/SelectType;.onClick (Landroid/view/View;)V
Verifier rejected class Lcom/Demo/Loyalty/SelectType;
Class init failed in newInstance call (Lcom/Demo/Loyalty/SelectType;)


java.lang.VerifyError: com.Demo.Loyalty.SelectType
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1429)
at android.app.Instrumentation.newActivity(Instrumentation.java:1022)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)

直到现在它工作正常。

注意:SelectType类有大约 16000 行代码,但我猜这并没有那么大。

我在网上搜索了很多,从答案中,我做了以下事情:

  • 清理项目
  • 重置亚行
  • 重启模拟器/设备/eclipse
  • 检查是否在构建路径中检查了第三方库字段

但我仍然收到该错误。

任何帮助表示赞赏。

4

1 回答 1

7

您描述的步骤可能无济于事。

问题是,这不是 Dalvik 的问题。例如,在 Oracle Java VM 中使用了类似的验证器。简单的回答:你的方法太复杂了。你看到的错误主要是因为太多:

  • 参数
  • 局部变量
  • 异常处理程序
  • 代码说明

更准确地说,该问题已在此线程中进行了描述:https ://groups.google.com/forum/?fromgroups=#!topic/android-developers/4qNoIdBHYFc

去引用:

(寄存器数 * 指令字数) 的值大于 2^21。(...) 它旨在防止验证程序膨胀应用程序的本机堆。

您还可以在此处看到类似的报告:http ://www.mentby.com/Group/android-developers/verifyerror-arbitrarily-rejecting-large-method.html ,其中包含有关如何解决问题的指示:

是的,Dalvik 编译器尝试为方法中的每个局部变量分配一个“寄存器”。它应该能够处理那么多,但显然不能。通过使它们成为实例变量,您消除了编译器“管理”它们的需要/愿望(并且还使该方法更小)。

因此,要解决它,您通常应该将大方法(可能onClick()?)分解成更小的部分。此外,将局部变量转换为类字段似乎可以帮助一些有同样问题的人。

于 2013-02-06T11:42:36.303 回答