proguard

混淆打包工具 

在pom.xml中加入插件

<!-- ProGuard混淆插件-->

  <groupId>com.github.wvengen

  <artifactId>proguard-maven-plugin

  <version>2.3.1

      <!-- 混淆时刻,这里是打包的时候混淆-->

      <phase>package

        <!-- 指定使用插件的混淆功能 -->

        <goal>proguard

    <proguardVersion>6.2.2

    <!-- 是否将生成的PG文件安装部署-->

    <attach>true

    <!-- 是否混淆-->

    <obfuscate>true

    <!-- 指定生成文件分类 -->

    <attachArtifactClassifier>pg

    <proguardInclude>${basedir}/proguard.conf

      <lib>${java.home}/lib/rt.jar

      <lib>${java.home}/lib/jce.jar

      <lib>${java.home}/lib/jsse.jar

    <!-- 对什么东西进行加载,这里仅有classes成功,不可能对配置文件及JSP混淆吧-->

    <injar>classes

    <outjar>${project.build.finalName}-pg.jar

    <!-- 输出目录-->

    <outputDirectory>${project.build.directory}

      <groupId>net.sf.proguard

      <artifactId>proguard-base

      <version>6.2.2

</plugin>

配置proguard.conf

# 忽略所有警告,否则有警告的时候混淆会停止

-ignorewarnings

# JDK目标版本1.8

-target 1.8

# 不做收缩(删除注释、未被引用代码)

-dontshrink

# 不做优化(变更代码实现逻辑)

-dontoptimize

# 不路过非公用类文件及成员

-dontskipnonpubliclibraryclasses

-dontskipnonpubliclibraryclassmembers

## 混淆时不生成大小写混合的类名,默认是可以大小写混合

-dontusemixedcaseclassnames

# 优化时允许访问并修改有修饰符的类和类的成员

-allowaccessmodification

# 确定统一的混淆类的成员名称来增加混淆

-useuniqueclassmembernames

# 不混淆所有包名,本人测试混淆后WEB项目问题实在太多,毕竟Spring配置中有大量固定写法的包名

-keeppackagenames

# 不混淆局部变量名

-keepparameternames

# 不删除注解

-keepattributes *Annotation*

# 不混淆所有特殊的类LocalVariable*Table,

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,Synthetic,EnclosingMethod

# 不混淆所有的set/get方法,毕竟项目中使用的部分第三方框架(例如Shiro)会用到大量的set/get映射

-keepclassmembers public class * {void set*(***);*** get*();}

##对异常、注解信息在runtime予以保留,不然影响springboot启动

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

##保留main方法的类及其方法名

#-keepclasseswithmembers public class * { public static void main(java.lang.String[]);}

##保留枚举成员及方法

-keepclassmembers enum * { *; }

# 不混淆泛型

-keepattributes Signature

#!!!!!!!不混淆dao和domain!!!!!

-keep class a.b.*.controller.** {*;}

#可以通过这个配置自己添加混淆字典

#-classobfuscationdictionary  ./filename.txt

## 混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代

#-adaptclassstrings

# 保持类protected不被混淆

#-keep public class * { public protected ;public protected ; }

-keepdirectories  如果找不到接口路径的话 可以配置这个

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容