一、问题描述
用混淆jar包之后,启动就报如下错误:
Exception in thread "main" java.lang.VerifyError: Bad return typeException Details:Location:aaa/bbb/ccc/ddd/eee/e/c.openConnection(Ljava/net/URL;)Ljava/net/URLConnection; @80: areturnReason:Type 'java/lang/Object' (current frame, stack[0]) is not assignable to 'java/net/URLConnection' (from method signature)Current Frame:bci: @80flags: { }locals: { }stack: { 'java/lang/Object' }Bytecode:0x0000000: b200 20bb 0014 59b7 0029 1203 b600 2a2b0x0000010: b600 2eb6 002a b600 2cb6 0025 2a2b b7000x0000020: 314d 2ab4 001f 2bb6 002e b900 3502 00990x0000030: 0020 2cc1 0016 9900 19bb 0008 592c c0000x0000040: 162a b400 1d2a b400 1eb7 0021 a700 042c0x0000050: b0Stackmap Table:full_frame(@79,{Top,Top,Object[#24]},{})full_frame(@80,{},{Object[#18]})at aaa.bbb.ccc.ddd.eee.e.a.
这就很尴尬 。。。在网上搜了下,java.lang.: Badtype这种错误引起的原因是:
JVM 在加载一个类时,会去校验类的正确性,只有类文件不合法才会报这个Error 。
找了一圈,没找到相关答案,基本上都是说是版本,jar包重复什么的引起的,问题是我这根本就不存在这两个问题 。。在官方里搜到了一堆相关的问题,和我的错误都差不多
搞了一天无果,在晚上的时候找到了解决方法 。。
二、解决方法
从错误日志中发现了问题,在如下行异常中:
at aaa.bbb.ccc.ddd.eee.e.a.
用-打开混淆之后的jar,与没混淆的jar包,之间做了下对比,发现了其中的秘密:
aaa/bbb/ccc/ddd/eee/e/c.openConnection(Ljava/net/URL;)Ljava/net/URLConnection; @80:
对应了异常中的:
Reason:Type 'java/lang/Object' (current frame, stack[0]) is not assignable to 'java/net/URLConnection' (from method signature)
需要的是,给的却是,所以导致了异常,这肯定是混淆引起的,调整配置,以下是我这边调整后能用的:
- 记录错误1——edge浏览器兼容性问题
- android 打包混淆,debug可以正常使用,混淆正式包就一点就崩
- Microbiome | 抑郁症背后的微生物密码:肠道菌群或成抗抑郁药物疗效的关
- 石壕吏最后一段作用
- 甲流发烧过后反复头痛怎么办
- 3亿美金、3000人、36个月:华为Mate30系列研发背后的珠峰之路
- centos7 物理机安装后没有网卡解决办法
- 水仙开花后怎样留明年
- 柑橘苗移栽后管理技术
- 曹操吃鸡肋的歇后语是什么 曹操吃鸡肋的歇后语后半句