• java.lang.VerifyError 异常解决方法


      先看Log,由于混淆无法查看具体代码行,但通知反编译能大概猜到是哪个类里面报的错;但由于不是具体的异常,无法断定是什么问题。

    E/AndroidRuntime(19738): java.lang.VerifyError: com/less/more/download/bc
    E/AndroidRuntime(19738):        at com.less.more.download.aw.run(Unknown Source)
    E/AndroidRuntime(19738):        at android.os.Handler.handleCallback(Handler.java:733)
    E/AndroidRuntime(19738):        at android.os.Handler.dispatchMessage(Handler.java:95)
    E/AndroidRuntime(19738):        at android.os.Looper.loop(Looper.java:136)
    E/AndroidRuntime(19738):        at android.os.HandlerThread.run(HandlerThread.java:61)

      首先说明一下,我的包是使用ant进行打包的,之前一直都没有出现问题,今天运行突然报这个错;出现错误,首先是找从上一个版本到这个版本都改了哪些问题,这样一个修改记录慢慢定位,发现确实是其中的一条修改导致的,把该条修改恢复再次打包,运行OK;看看该条有问题的修改记录,没有发现任何异样;真想不出来是什么问题引起的;通过google找了各种解决方法,好像都与我这个问题无关,尽管log及现象是一样的。

      先汇总网络上的相关解决方法:

    http://blog.csdn.net/bill_ming/article/details/8799061

    http://blog.csdn.net/wudiwo/article/details/7548451

      下面我们来具体分析一下本人遇到这个问题

    使用adb logcat能发现在崩溃之前有一段警告的log

    W/dalvikvm(19738): VFY: Ljava/lang/Object; is not instance of Ljava/lang/String;
    W/dalvikvm(19738): VFY: bad arg 6 (into Ljava/lang/String;)
    W/dalvikvm(19738): VFY:  rejecting call to Lcom/less/more/util/ag;.a (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
    W/dalvikvm(19738): VFY:  rejecting opcode 0x74 at 0x04f3
    W/dalvikvm(19738): VFY:  rejected Lcom/less/more/download/bc;.a (Landroid/content/Intent;)V
    W/dalvikvm(19738): Verifier rejected class Lcom/less/more/download/bc;
    W/dalvikvm(19738): threadid=14: thread exiting with uncaught exception (group=0x41638d88)

    当然我们通过这个log,再根据反编译的smail文件,可以定位到具体的函数,但实际上该函数是没有任何问题;并且崩溃异常的地方并没有执行到该函数;所以这就涉及到另外一个问题:

    一个类被实例化时,会检查该类中所有方法及变量的合法性?仅猜测而已;回到正题

    既然没有问题,那怎么会报这个错呢?可以再次搜索,不过关键词是

    Ljava/lang/Object; is not instance of Ljava/lang/String

    果然,能找到类似的问题,

    http://stackoverflow.com/a/20999441/1043256

    该问题提到一点“There are other posts that suggest there might be a ProGuard bug involved.”引起了我的怀疑,顺藤摸瓜,就找到了一个关键的帖子

    http://sourceforge.net/p/proguard/bugs/456/

    原来这真是proguard中4.x上的一个bug;找到问题了,那解决方法就好办了;

    在开源proguard   http://sourceforge.net/p/proguard/下载最新版本的proguard,解压后,放到xxxandroid-sdk-windows ools目录中,删除原来的那个proguard目录,把新版本的proguard目录改名成progurad;然后再次编译,果然问题不见了;只能说一句google真坑爹啊,新版本都已经5.2.1了,sdk里面带的还是4.7

    转载请注明出处
  • 相关阅读:
    在线api文档
    Android Studio 快捷键
    AtomicBoolean运用
    ubuntu下Pycharm安装及配置
    Pycharm Professional Edition 激活码(license)
    opengl中对glOrtho()函数的理解
    附加作业
    个人最终总结
    mysql
    创建数据库
  • 原文地址:https://www.cnblogs.com/successjerry/p/4402962.html
Copyright © 2020-2023  润新知