一般地,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