【JAVA】Springboot集成Proguard完成jar包混淆
在Spring Boot项目中使用ProGuard进行jar包混淆,你需要做以下几步:
- 在
build.gradle
文件中添加ProGuard依赖:
buildscript {
repositories {
maven { url 'https://plugins.gradle.org/m2/' }
}
dependencies {
classpath 'gradle.plugin.com.guardsquare:proguard-gradle:7.0.1'
}
}
apply plugin: 'com.guardsquare.proguard'
- 配置ProGuard规则。在
build.gradle
中添加混淆配置:
proguard {
// 混淆后的输出目录
outputDirectory = file('proguarded')
// 混淆规则
configuration 'proguard-rules.pro'
}
- 创建
proguard-rules.pro
文件并添加混淆规则。例如,通常你需要保留Spring Boot的基础类和注解:
-keepattributes Exceptions, InnerClasses, Signature
-keepattributes SourceFile, LineNumberTable
-keep class sun.misc.Unsafe { *; }
-keep class com.google.common.io.** { *; }
-keep class com.google.common.base.** { *; }
-keep class com.google.common.util.concurrent.** { *; }
# 保留Spring Boot的自动配置相关类和注解
-keep @org.springframework.boot.autoconfigure.SpringBootApplication class * { *; }
-keep @org.springframework.context.annotation.Configuration class * { *; }
-keep @org.springframework.stereotype.Component class * { *; }
-keep @org.springframework.beans.factory.annotation.Autowired class * { *; }
-keep @org.springframework.beans.factory.annotation.Qualifier class * { *; }
-keep @org.springframework.context.annotation.Bean class * { *; }
-keep @org.springframework.context.annotation.Import class * { *; }
-keep @org.springframework.boot.context.properties.ConfigurationProperties class * { *; }
- 在
build.gradle
中添加混淆任务:
task proguardTask(type: proguard.gradle.ProGuardTask) {
configuration 'proguard-rules.pro'
// 混淆的输入jar
injars 'build/libs/your-app.jar'
// 混淆后的输出jar
outjars 'build/libs/your-app-proguarded.jar'
// 混淆时不显示ProGuard的logo
println 'ProGuard: obfuscating...'
printmapping 'proguard-map.txt'
// 混淆时的库文件
libraryjars 'java.desktop'
// 混淆时要保留的类和成员
keep 'public class your.package.name.YourApplication { public static void main(java.lang.String[]); }'
keepattributes SourceFile,LineNumberTable
// 混淆时要保留的类和类成员
keepnames class * {
java.lang.Class class$(java.lang.String);
java.lang.Class class$(java.lang.String, boolean);
}
}
// 混淆任务依赖于构建j
评论已关闭