Java之代码混淆插件ProGuard使用及说明

 更新时间:2026年04月07日 09:06:20   作者:enjoy嚣士  
本文介绍了使用ProGuard对Java项目进行代码混淆,以保护业务逻辑,详细说明了Maven项目配置、ProGuard版本及使用方法,强调了生成的jar包与mapping.txt文件需对应的重要性

背景

接之前的文章,用java实现了C++库函数,并对外提供接口,但是Java可以反编译看到源码业务逻辑等,所以决定使用代码混淆功能,虽然混淆之后也能看到业务逻辑,但是增加了难度而已。

环境

  • maven项目管理
  • Java 1.8
  • proguard 2.7.0

pom配置

<!-- ProGuard 混淆插件 -->
   <plugin>
       <groupId>com.github.wvengen</groupId>
       <artifactId>proguard-maven-plugin</artifactId>
       <version>2.7.0</version>
       <executions>
           <execution>
               <phase>package</phase>
               <goals>
                   <goal>proguard</goal>
               </goals>
           </execution>
       </executions>
       <configuration>
           <libs>
               <lib>${java.home}/lib/rt.jar</lib>
               <lib>${java.home}/lib/jsse.jar</lib>
           </libs>
           <obfuscate>true</obfuscate>
           <attach>false</attach>
           <options>
               ########################################
               # 不做裁剪和优化(SDK必须)
               ########################################
               <option>-dontoptimize</option>
               <option>-dontshrink</option>
               <option>-dontwarn</option>
               ########################################
               # 保留对外 API
               ########################################
               <option>
                   -keep public class org.test.api.** { *; }
               </option>
               ########################################
               # 内部实现允许混淆
               ########################################
               <option>
                   -keep,allowobfuscation class org.test.internal.** { *; }
               </option>
               ########################################
               # Java 8 必须保留
               ########################################
               <option>-keepattributes Signature</option>
               <option>-keepattributes *Annotation*</option>
               <option>-keepattributes Exceptions</option>
               <option>-keepattributes InnerClasses</option>
               <option>-keepattributes EnclosingMethod</option>
               <option>-keepattributes BootstrapMethods</option>
               ########################################
               # 枚举安全
               ########################################
               <option>
                   -keepclassmembers enum * {
                   public static **[] values();
                   public static ** valueOf(java.lang.String);
                   }
               </option>
               ########################################
               # 序列化安全
               ########################################
               <option>
                   -keepclassmembers class * implements java.io.Serializable {
                   static final long serialVersionUID;
                   }
               </option>
               ########################################
               # 混淆强度增强
               ########################################
               <option>-allowaccessmodification</option>
               <option>-overloadaggressively</option>
               <option>-useuniqueclassmembernames</option>
               <option>-flattenpackagehierarchy</option>
               ########################################
               # 输出 mapping, 方便调试
               ########################################
               <option>-printmapping target/mapping.txt</option>
               <option>-keepattributes LineNumberTable</option>
           </options>
       </configuration>
   </plugin>

说明

生成的 jar包target/mapping.txt 文件要对应起来,防止出问题无法定位到问题点。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • JPA多数据源分布式事务处理方案

    JPA多数据源分布式事务处理方案

    这篇文章主要为大家介绍了JPA多数据源分布式事务处理的两种事务方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-02-02
  • SpringBoot利用注解来实现Redis分布式锁

    SpringBoot利用注解来实现Redis分布式锁

    有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响。本文将利用注解来实现Redis分布式锁,需要的可以参考一下
    2022-09-09
  • spring mvc路径匹配原则详解

    spring mvc路径匹配原则详解

    这篇文章主要介绍了spring mvc路径匹配原则详解,小编觉得还是挺不错的,这里分享给大家,需要的朋友可以参考下,下面就和小编一起来看看吧
    2018-02-02
  • java通过ssh连接服务器执行shell命令详解及实例

    java通过ssh连接服务器执行shell命令详解及实例

    这篇文章主要介绍了java通过ssh连接服务器执行shell命令详解及实例方法的相关资料
    2017-02-02
  • 详解Java8中的lambda表达式、::符号和Optional类

    详解Java8中的lambda表达式、::符号和Optional类

    这篇文章主要介绍了Java8中的lambda表达式、::符号和Optional类,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Spring之spring-context-indexer依赖详解

    Spring之spring-context-indexer依赖详解

    这篇文章主要介绍了Spring之spring-context-indexer依赖详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java面向对象之final关键字详细解读

    Java面向对象之final关键字详细解读

    这篇文章主要介绍了Java面向对象之final关键字详细解读,final修饰的属性又叫常量,一般用 XX_XX_XX来命名,final修饰的属性在定义时必须赋初始值,并且以后不能再修改,需要的朋友可以参考下
    2024-01-01
  • 如何利用java实现生成PDF文件

    如何利用java实现生成PDF文件

    前段时间因为相关业务需求需要后台生成pdf文件,下面这篇文章主要给大家介绍了关于如何利用java实现生成PDF文件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • 详谈ServiceLoader实现原理

    详谈ServiceLoader实现原理

    下面小编就为大家带来一篇详谈ServiceLoader实现原理。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • springboot controller参数注入方式

    springboot controller参数注入方式

    这篇文章主要介绍了springboot controller参数注入方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05

最新评论