java.lang.VerifyError 错误解决方法

java.lang.VerifyError 错误解决方法_第1张图片

一般地,java.lang.VerifyError 是说 JVM 在加载一个类时,会去校验类的正确性,只有类文件不合法才会报这个Error。

这个错误是集成三方sdk的时候遇到的看到这个错误,真是蒙了,查阅文档后,各种说法都有,也算是增加了对这个异常的理解,参考过的文章见底部,虽然看了

很多,但并没有直接找到原因,各种尝试快两天,后来仔细看出问题的类,FileUploadUtil ,这个类里有用到联网的三方库,有看了下jar包,版本一个是

com.loopj.android:android-async-http:1.4.9,android-async-http:1.4.6, 三方SDK里提供的是1.4.6的jar包,但是项目里有个1.4.9的依赖,编译时冲突估计就去掉

了,没想到居然还隐藏了这个大bug,三方库里的用到的那个问题和新包里依赖的那个文件有差别,具体的原因请看延伸阅读第一篇文章,非常详细,相信读过后

即使不能完全读懂也会有收获的。

说到问题的解决,还是要查看错误log,这个错误和FileUploadUtil类有关,这个类的构造加载时加载了一个静态方法

public static SSLSocketFactory createSSLSocketFactory() {
    MySSLSocketFactory var0 = null;

    try {
        KeyStore var1 = KeyStore.getInstance(KeyStore.getDefaultType());
        var1.load((InputStream)null, (char[])null);
        var0 = new MySSLSocketFactory(var1);
    } catch (Exception var2) {
        var2.printStackTrace();
    }

    return var0;
}

上面的方法里用到了MySSLSocketFactory 的构造,而MySSLSocketFactory 类里又有很多静态方法,用到了 android-async-http jar

包中的方法,so,及时不太懂也能推断出是这个jar的问题,所以,还是好好看log,一步一步推断。。。



延伸阅读:

https://yrom.net/blog/2016/08/22/java-lang-verifyerror-on-android/

https://stackoverflow.com/questions/100107/causes-of-getting-a-java-lang-verifyerror


你可能感兴趣的:(遇到的问题,原创)