项目使用Gradle作构建,使用的框架是SpringBoot、Mybatis、Mybatis Plus,sql都写在mybatis的xml文件中。
网上有些博客是直接使用Maven的proguard插件,或者是Gradle的proguard插件。可是我这里没有用这些插件,由于对构建工具依赖比较大。建议仍是直接把proguard下载回来,配置到本身电脑的path下来使用就行了,
解耦
。
@PathVariable
、@RequestParam
时须要显式声明参数名1.修改bean命名策略:java
@SpringBootApplication public class ServerApplication { public static void main(String[] args) { new SpringApplicationBuilder(ServerApplication.class) .beanNameGenerator((def,reg)->def.getBeanClassName()) .run(args); } }
2.springboot打包:gradle clean
,而后gradle build
spring
3.编写混淆规则&调试混淆结果:sql
个人项目就叫server
,打包好springboot的jar包后,本身手动解压出jar包文件,编写配置文件并执行proguard.bat @proguard.cnf
调试。须要耐心反复校验混淆效果。如下是个人proguard.cnf
文件:数据库
# 基础目录,下面injars、outjars、libraryjars参数都基于此目录 -basedirectory build/libs/server-1.0/BOOT-INF/ # 须要作混淆的jar或目录 -injars classes # 混淆后输出的jar或目录 -outjars classes-pro # 混淆时须要引用的java库,这些库的类不会作混淆 -libraryjars <java.home>/lib/rt.jar -libraryjars lib # 不警告 -dontwarn # 不理会警告,不然混淆失败 -ignorewarnings # 不压缩 -dontshrink # 不优化 -dontoptimize # 一个类中的成员不使用重复的命名,如Student类混淆后不能出现a属性和a方法。 -useuniqueclassmembernames # 不混淆注解 -keepattributes *Annotation* # 不混淆泛型 -keepattributes Signature # 保留程序入口 -keep @org.springframework.boot.autoconfigure.SpringBootApplication class * {*;} # config 能够作混淆 # constants 能够作混淆 # controller 能够混淆 # dao 保留所有类及类成员,方法命名也不能变,由于与xml文件作了关联 -keep class com.abc.device.dao.** {*;} # entity 保留所有类 -keep class com.abc.device.entity.** {*;} # service 能够混淆 #-keep interface * extends com.baomidou.mybatisplus.service {*;} # shiro 能够混淆 # util 能够混淆 # vo 用keepclasseswithmembers保留类名和类成员,keepclassmembers保留部分的类成员,剩下的都混淆 -keepclasseswithmembers class com.abc.device.vo.DeviceServicePropMsg {*;} -keepclasseswithmembers class com.abc.device.vo.DeviceNewestMsgTime {*;} -keepclassmembers class com.abc.device.vo.DeviceImportVo {*;} -keepclassmembers class com.abc.device.vo.DeviceNewestMsgTime {*;} -keepclassmembers class com.abc.device.vo.Option {*;} -keepclassmembers class com.abc.device.vo.UpdateRolePermVo {*;}
4.从新打包:springboot
混淆后,能够手工拷贝class文件到原来的jar包中替换classes目录,我为了方便,写了个proguard.bat
来执行:bash
md build\libs\server-1.0 && ^ cd build\libs\server-1.0 && ^ jar xf ..\server-1.0.jar && ^ cd ..\..\..\ && ^ proguard.bat @proguard.cnf && ^ rd /S/Q build\libs\server-1.0\BOOT-INF\classes && ^ ren build\libs\server-1.0\BOOT-INF\classes-pro classes && ^ jar c0fM build\libs\server-1.0-pro.jar -C build\libs\server-1.0/ . && ^ rd /S/Q build\libs\server-1.0
其实逻辑都很简单:
建立build\libs\server-1.0
进入build\libs\server-1.0
解压springboot打出来的jar包:jar xf ..\server-1.0.jar
退回到server目录:cd ..\..\..\
按混淆配置文件执行混淆:proguard.bat @proguard.cnf
删除目录:rd /S/Q build\libs\server-1.0\BOOT-INF\classes
重命名目录:ren build\libs\server-1.0\BOOT-INF\classes-pro classes
从新打包jar:jar c0fM build\libs\server-1.0-pro.jar -C build\libs\server-1.0/ .
删除目录:rd /S/Q build\libs\server-1.0
mybatis