VerifyError - Verifier rejected class

后端 未结 1 1225
孤城傲影
孤城傲影 2021-01-18 00:09

I\'m developing for 2.2 (minSdkVersion=8) and suddenly I\'m getting this error:

arbitrarily rejecting large method (regs=75 count=28584)
rejecte         


        
相关标签:
1条回答
  • 2021-01-18 00:38

    The steps you've described probably won't help.

    The thing is, it's not a Dalvik issue. Similar verifier is employed in the Oracle Java VM for example. Simple answer: your method is too complex. The error you see is mainly caused by too many:

    • parameters
    • local variables
    • exception handlers
    • code instructions

    More precisely, the issue has been described in this thread: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/4qNoIdBHYFc

    To quote:

    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.

    You can also see similar report here: http://www.mentby.com/Group/android-developers/verifyerror-arbitrarily-rejecting-large-method.html with pointers on how to resolve the issue:

    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).

    So to solve it, you should generally break the large method (probably onClick()?) into smaller pieces. Also, converting local variables to class fields seemed to help some people with the same issue.

    0 讨论(0)
提交回复
热议问题