proguard代码混淆问题

记录自己遇到的代码混淆问题(spring boot项目代码混淆):

1、由于引入框架,比如JDO,spring boot,有些方法是框架去调用,所以这些是不能够被混淆的。
比如自己编写的转换类:

public class ListStringToStringConverter implements AttributeConverter<List<String>, String> {
	@Override
    public String convertToDatastore(List<String> attributeValue) {
        return CollectionUtils.isEmpty(attributeValue) ? JacksonUtils.toJson(new ArrayList<>())
                : JacksonUtils.toJson(attributeValue);
    }

    @Override
    public List<String> convertToAttribute(String datastoreValue) {
        if (StringUtils.isBlank(datastoreValue)) {
            return new ArrayList<>();
        }
        return JacksonUtils.fromJson(datastoreValue, new TypeReference<ArrayList<String>>() {
        });
    }
}

AttributeConverter来自javax.jdo.AttributeConverter,是jdo需要去调用的,代码混淆后这些override的方法是不能够被混淆的,否则jdo调用不到,报错。
要用 -keep public class 具体的类{*;} 保持类不被混淆

2、当代码中遇到了多个catch exception的时候,proguard代码混淆会触发bug。代码存在下面这种

try
    {
        // code 
    }
    catch (IOException |  InvalidFormatException e)
    {
        LOG.error(e);

        throw new RuntimeException(e);
    }

报错信息是:
java.lang.VerifyError: Bad type on operand stack

即使keep这个报错的类 也无法消除这个报错。后续找到这个bug的讨论,发现我的这个类里面确实含有多个catch exception的情况
这是这个bug的讨论

解决办法:bug的讨论里面Eric给出了一种解决办法,如下
在这里插入图片描述
但由于项目的jdk版本不能随意改,所以我只有将代码中的多个catch Exception改掉,只用一个Exception。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值