关于java.lang.VerifyError的另外一种错误原因

Android开发过程中,碰到了一个crash bug,照理说,程序开发碰到crash没什么大不了,看堆栈定位原因,然后解决即可。

但是这个堆栈刚看到的时候,还是愣了一下,如下:


报了一个java.lang.VerifyError,第一步当然是看堆栈,但是这堆栈完全不在我们自己代码空间里,看上去像是启动Application的时候就挂了,照理google和baidu都搜索了一下,

网上说的最多的是jar包导入设置的问题,调整下order and export;也有说是android sdk的版本问题,但是我们用的是android studio,不存在这个order and export。而且从代码开发更新来看,也不像是这个问题,因为配置没改过。

网上那些方法显然不管用,只能自己找原因,再往上找看看有没有其它有用信息,果然在crash之前还有以下的提示信息:


看到了一条比较有价值的提示,unable to find class referenced in signature ,后面的类名涉及公司程序,去掉了。

看来应该是在dex里没找到对应的那个类,这个时候,我想起来了,最近项目新增加了一个比较大的第三方sdk,导致程序又庞大了不少,原来程序就因为API数超过了64K,而分成了两个dex, 用的是MultiDex,自动打包成class.dex和class2.dex.

逆向解压编译的APK,发现提示那个找不到的class,果然不在class.dex中,而是在class2.dex中。原因是找到了,我们把打包顺序改一下,或者调用顺序改一下即可解决问题。


这里给这类java.lang.VerifyError的crash又提供了一种情况,如果是你的apk也是很庞大时,碰到此类问题,也可以往这方面检查检查,最简单的方法就是在class.dex里找找看,是否存在那个提示找不到的类。


评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值