gpt4 book ai didi

android - VerifyError - 验证者拒绝类

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:01:01 25 4
gpt4 key购买 nike

我正在为 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
  • 检查第三方库字段是否在构建路径中被选中

但我仍然遇到该错误。

感谢任何帮助。

最佳答案

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

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

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

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

引用:

The value of (number of registers * number of instruction words) is larger than 2^21. (...) it's intended to prevent the verifier from bloating up an app's native heap.

您还可以在这里看到类似的报告:http://www.mentby.com/Group/android-developers/verifyerror-arbitrarily-rejecting-large-method.html关于如何解决问题的指示:

Yep, the Dalvik compiler attempts to assign a "register" to every local variable in the method. It should be able to handle that many, but apparently can't. By making them instance variables you remove the compiler's need/desire to "manage" them (and also make the method a fair amount smaller).

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

关于android - VerifyError - 验证者拒绝类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14727418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com