公司的项目最近要进行代码混淆,因此学习使用了一个Proguard代码混淆工具,项目使用ssh框架。
操作步骤和参数配置方法主要参考文章地址:http://blog.csdn.net/zhangdaiscott/article/details/45368261
熟悉了一下Proguard的参数和配置方法,然后跟着文章流程走了一遍,但是没有能够走通。基于混淆过程中出现的问题,记录一下应该注意的问题和思路。
1. 应该最大程度的熟悉项目的结构
2. 对于保留和非保留的代码应该注意代码之间的关联关系,防止保留的部分调用到未混淆部分而出现异常
3. 混淆后调试困难,有些问题不仅应该考虑混淆的问题,还应考虑proguard版本的问题(可能存在BUG)
4. 应当保留bean对象和action中的属性名称,防止jsp页面和action数据无法交互
5. 使用action的modeldriven 对象类型为List<T> 时,应当配置保留泛型
6. 采用annotation配置应该注意spring注入的方式是采用byName还是byType,防止因为代码混淆后无法按照指定的类型注入bean
在我的项目中,除了根据以上做了必须的保留项之外,主要用到了以下配置:
/*
java.lang.ClassFormatError: LVTT entry for 'a' in class file ×× does not match any LVT entry
这个貌似是Proguard的bug,使用下面的代码解决
*/
-optimizations !code/allocation/variable
//忽略警告
-ignorewarnings
//忽略泛型
-keepattributes Signature
//忽略注解
-keepattributes *Annotation*
Proguard除了可以代码混淆还有代码优化缩减的功能,但这次只用到了代码混淆,其他的功能,以后再细加研究。