項目使用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