【Developer Log】ProGuard扰码:ClassFormatError

本文探讨了如何解决使用ProGuard时遇到的ClassFormatError问题,特别是当在不进行混淆的情况下运行Web项目时出现的错误。通过添加特定的配置项,可以避免在特定情况下发生错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一个web项目,扰码后运行发现tomcat回复500,而且给出了java.lang.ClassFormatError的错误。然后给了某个类某行(1042),而那个类也就大概一百行,根本无法定位。

如果不进行扰码,是没有问题。这说明不是代码逻辑问题,而在于扰码问题。代码有异常捕获,没有捕获到这个异常。在代码中加入log,看看代码的执行情况,发现语句在user.getPhone(),而且返回的500异常多了信息:

java.lang.ClassFormatError: LVTT entry for … in class file … does not match any LVT entry.

这个报错,和跟踪到user.getPhone()是符合。在网上查找解决方法:

参考1:http://stackoverflow.com/questions/9651703/using-proguard-with-android-without-obfuscation/13877518#13877518

参考2:https://sourceforge.net/p/proguard/bugs/462/

看来这是ProGuard的一个bug,还有bug号(见参考2)。在参考1中给出:Add !code/allocation/variable is workaround for proguard bug when -dontobfuscate is set to your –optimizations,即在proguard的配置文件中增加:

-optimizations !code/allocation/variable

或者在图形工具中给出:

问题解决。

 

相关链接:开发日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值