Java代码混淆工具ProGuard(附有1.8以上和以下使用工具)使用详解
目录1.混淆工具版本2、混淆工具使用步骤2.1 解压后执行 bin目录下的proguardgui.bat​编辑2.2、执行proguardgui.bat后2.1.1、注意不要关闭DOS窗口2.3、 点击左侧菜单栏中的“Input/Output”按钮2.4、点击右侧菜单栏中的“Add input...”按钮导入需要被混淆的jar包选择文件类型-所有文件2.5、点击右侧菜单栏中的“Add Output...”按钮填写配置我们需要混淆后输出的jar包2.6、配置好jar包输入输出后2.7、添加支持库2.7.1、点击下方“Library jars,aara,wars,wars,zips,apks,and directories”框右侧“Add”按钮2.7.2、idea 的lib文件 例如git 拉取的项目位置 \....\target\.....\WEB-INF\lib 下面有所有依赖的jar包2.8、添加需要的jar包资源2.9、全不选2.10、推荐勾选ukf kk c2.10.1、混淆规则2.11、使用默认规范2.12、当前创建jar的环境2.13、点击“process”再点击“save configuration”在弹出的对话框中输入要保存的配置文件2.14、保存完test.pro文件之后关闭ProGuard开始手动修改配置文件test.pro2.14.1、自定义配置文件说明3、可能遇到的问题4、其他查阅5、优先查阅1.混淆工具版本下载地址https://download.csdn.net/download/m0_46208105/89302219ProGuard是一款Java代码混淆工具。 在开发组件功能对涉及到公司的核心代码时我们需要对项目组件进行Jar包加密。2、混淆工具使用步骤2.1 解压后执行 bin目录下的proguardgui.bat2.2、执行proguardgui.bat后如图2.1.1、注意不要关闭DOS窗口执行proguardgui.bat后会出现一个cmd命令框不要关闭最小化即可。2.3、 点击左侧菜单栏中的“Input/Output”按钮2.4、点击右侧菜单栏中的“Add input...”按钮导入需要被混淆的jar包选择文件类型-所有文件2.5、点击右侧菜单栏中的“Add Output...”按钮填写配置我们需要混淆后输出的jar包输出的jar包需要自己手动填写jar包名称可以自定义 所有的jar包类型。2.6、配置好jar包输入输出后如图2.7、添加支持库即eclipse里java project里的libraries所有Library的jar包或者是idea maven项目中的依赖文件2.7.1、点击下方“Library jars,aara,wars,wars,zips,apks,and directories”框右侧“Add”按钮2.7.2、idea 的lib文件 例如git 拉取的项目位置 \....\target\.....\WEB-INF\lib 下面有所有依赖的jar包当前项目中需要依赖的jar包等导出maven工程lib依赖pom.xml 方法一 !-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-dependency-plugin -- !--将所依赖的jar包插件导到 -Maven将依赖项复制到target/lib中-- dependency groupIdorg.apache.maven.plugins/groupId artifactIdmaven-dependency-plugin/artifactId version3.1.1/version /dependency 方法二 plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-dependency-plugin/artifactId executions execution idcopy-dependencies/id phasepackage/phase goals goalcopy-dependencies/goal /goals configuration !-- 拷贝项目依赖包到lib/目录下 -- outputDirectory${project.build.directory}/lib/outputDirectory !-- 间接依赖也拷贝 -- excludeTransitivefalse/excludeTransitive !-- 带上版本号 -- stripVersionfalse/stripVersion /configuration /execution /executions /plugin2.8、添加需要的jar包资源2.9、全不选2.10、推荐勾选ukf kk c2.10.1、混淆规则2.11、使用默认规范2.12、当前创建jar的环境2.13、点击“process”再点击“save configuration”在弹出的对话框中输入要保存的配置文件首先在指定文件夹下创建一个空test.pro文件选中test.pro)最后点击“保存”2.14、保存完test.pro文件之后关闭ProGuard开始手动修改配置文件test.protest.pro文件内容在保存时已自动生成内容我们只需添加自定义的修改即可内容如下具体内容proguard.pro 文件的混淆规则test.pro2.14.1、自定义配置文件说明1、这里是列表文本解决Proguard的bug“java.lang.ClassFormatError: LVTT entry for clazz in class file ** does not match any LVT entry”需要配置以下参数#不优化 代码/配置/变量 -optimizations !code/allocation/variable #忽略警告 -ignorewarnings #忽略泛型 -keepattributes Signature #忽略注解 -keepattributes *Annotation*2、解决找不到引用的类是第三方包里面的情况因为这种情况会在混淆过程中报错导致不能混淆代码需要配置以下参数#不要警告找不到com.alibaba.fastjson.**这个包里面的类的相关引用 -dontwarn com.alibaba.fastjson.** #保持com.alibaba.fastjson.**这个包里面的所有类和所有方法而不混淆 -keep class com.alibaba.fastjson.**{*;}3、混淆代码#不优化 代码/配置/变量 -optimizations !code/allocation/variable #忽略警告 -ignorewarnings #忽略泛型 -keepattributes Signature #忽略注解 -keepattributes *Annotation* #不要警告找不到com.alibaba.fastjson.**这个包里面的类的相关引用 -dontwarn com.alibaba.fastjson.** #保持com.alibaba.fastjson.**这个包里面的所有类和所有方法而不混淆 -keep class com.alibaba.fastjson.**{*;} #保持这个类及其内容不被混淆 -keep class com.LicenseAuthorization.ClientServices.common.config.InterceptorConfig{*;} #保持只保留类名 -keep class com.LicenseAuthorization.ClientServices.common.config.LicenseCheckedFilter #保持只保留类名 -keep class com.LicenseAuthorization.ClientServices.common.config.LicenseCheckListener #保持该类下所有的共有方法不被混淆 -keep class com.LicenseAuthorization.ClientServices.licenseMatch.LicenseVerify{public methods;} #保持这个包里面的所有类和所有方法而不混淆 -keep class com.LicenseAuthorization.ClientServices.common.utils.**{*;} #保持这个包里面的所有类和所有方法而不混淆 -keep class com.LicenseAuthorization.license.entity.**{*;}4、重新启动ProGuard加载配置文件test.pro,点击左菜单“ProGuard”然后点击“Load configuration”选择之前配置好的pro文件打开即可如图5、选择做菜单“Process”点击下方“View configuration”查看配置文件内容是否正确最后点击下方右侧“Porcess”程序开始进行混淆如图6、出现“Processing completed successfully”代表混淆成功如图3、可能遇到的问题1.提示Warning: can’t find referenced class xxx解决-dontwarn javax.crypto.** -keep class javax.crypto.** 其他类似警告也如此处理2.提示 there were 4 unresolved references to classes or interfaces. You may need to add missing …解决如果jar包没有问题则 在proe文件中加一行 -ignorewarnings3.问题解决当前的ProGuard 版本过低需要换更高的ProGuard版本或者是将依赖的jar包降低到可以让ProGuard解析4.问题构建该jar包需要的依赖结构不够完整就是创建这个jar包的代码实现所需要引用的import的依赖不完整 具体可以将所有的jar包都导出来具体看maven工程导出所有的lib 依赖您似乎缺少一些类导致类层次结构不完整请参阅手册中的疑难解答页面ProGuard Manual: Home | Guardsquare5.问题在编写pro文件做jar包数据混淆的时候没有写对代码或者是代码规范出错原因4、其他查阅proguard.pro 文件的混淆规则proguard包括四个功能shrinker压缩, optimizer优化,obfuscator混淆,preverifier预校验他们的作用分别是shrink 检测并移除没有用到的类变量方法和属性optimize: 优化代码非入口节点类会加上private/static/final, 在字节码级别执行优化让应用运行的更快。。obfuscate: 增大反编译难度类和类成员会被随机命名除非用keep保护。preverify: 预校验代码是否符合Java1.6或者更高的规范除了proguard之外还有一个DexGuard是专门用来优化混淆Android应用的。它包括资源混淆字符串加密类加密和dex文件分割等。它是在android编译的时候直接产生Dalvik字节码混淆后我们会在工程目录app/build/outputs/mapping/releasedebug下找到一个mapping.txt文件这就是混淆规则我们可以根据这个文件把混淆后的代码反推回源本的代码所以这个文件比较重要请妥善保管5、优先查阅#不优化 代码/配置/变量 -optimizations !code/allocation/variable #忽略警告 -ignorewarnings #忽略泛型 -keepattributes Signature #忽略注解 -keepattributes *Annotation* #不要警告找不到com.alibaba.fastjson.**这个包里面的类的相关引用 -dontwarn com.alibaba.fastjson.** #保持com.alibaba.fastjson.**这个包里面的所有类和所有方法而不混淆 -keep class com.alibaba.fastjson.**{*;} #保持这个类及其内容不被混淆 -keep class com.LicenseAuthorization.ClientServices.common.config.InterceptorConfig{*;} #保持只保留类名 -keep class com.LicenseAuthorization.ClientServices.common.config.LicenseCheckedFilter #保持只保留类名 -keep class com.LicenseAuthorization.ClientServices.common.config.LicenseCheckListener #保持该类下所有的共有方法不被混淆 -keep class com.LicenseAuthorization.ClientServices.licenseMatch.LicenseVerify{public methods;} #保持这个包里面的所有类和所有方法而不混淆 -keep class com.LicenseAuthorization.ClientServices.common.utils.**{*;} #保持这个包里面的所有类和所有方法而不混淆 -keep class com.LicenseAuthorization.license.entity.**{*;}-keep class com.xzt.demotwo.* # 一颗星只保持本包的类名(不包含内容) -keep class com.xzt.demotwo.** # 二颗星表示保持本包和子包下的类名(不包含内容) #只保持本包的类名和内容 -keep class com.xzt.demotwo.*{*;} #可以保持本包和子包的类名和内容 -keep class com.xzt.demotwo.**{*;} #你还可以在fields或methods前面加上private 、public、native等来进一步指定不被混淆的内容如 #包下的所有公共方法 -keep class com.xzt.demotwo{ public methods; } #保持某个具体的类名不被混淆 -keep class com.xzt.demotwo.MainActivity #保持某个具体的类及其内容不被混淆 -keep class com.xzt.demotwo.MainActivity{*;} #保持类中特定内容而不是所有的内容可以使用如下 -keep class com.xzt.demotwo.MainActivity{ 〈init〉;#匹配所有构造器 〈fields〉;#匹配所有域 〈methods〉;#匹配所有方法 } #表示MainActivity下的所有public方法都不会被混淆当然你还可以加入参数比如以下表示用JSONObject作为入参的构造函数不会被混淆 -keep class com.xzt.demotwo { public init(org.json.JSONObject); } #保持类中特定内容还可以进一步缩小范围 -keep class com.xzt.demotwo.MainActivity{ public ;#保持该类下所有的共有方法不被混淆 public *;#保持该类下所有的共有内容不被混淆 private ;#保持该类下所有的私有方法不被混淆 private *;#保持该类下所有的私有内容不被混淆 public (java.lang.String);#保持该类的String类型的构造方法 } #在方法后加入参数限制特定的构造方法 -keep class com.xzt.demotwo.MainActivity{ public (String); } #要保留一个类中的内部类及其内容不被混淆需要用 $ 符号 -keep class com.xzt.demotwo.MainActivity$MyClass{*;} #使用Java的基本规则来保护特定类不被混淆比如用extendsimplement等这些Java规则 #如下保持Android底层组件和类不要混淆 -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.view.View #如果不需要保持类名只需要保持该类下的特定方法保持不被混淆 #需要使用keepclassmembers而不是keep因为keep方法会保持类名。 #保持MainActivity类下test(String)方法不被混淆 -keepclassmembernames class com.xzt.demotwo.MainActivity{ public void test(java.lang.String); }# 如果拥有某成员保留类和类成员 -keepclasseswithmembernames class com.xzt.demotwo.MainActivity

相关新闻

推荐开源项目:User Flows V2 - Sketch 流程图插件

推荐开源项目:User Flows V2 - Sketch 流程图插件

推荐开源项目:User Flows V2 - Sketch 流程图插件 【免费下载链接】UserFlows A plugin for generating user walkthroughs from Artboards in Sketch. 项目地址: https://gitcode.com/gh_mirrors/us/UserFlows 项目介绍 在UI设计过程中,流程图是…

2026/8/5 17:39:01 阅读更多 →
Vike模块化框架深度解析:3步构建企业级Web应用的终极指南

Vike模块化框架深度解析:3步构建企业级Web应用的终极指南

Vike模块化框架深度解析:3步构建企业级Web应用的终极指南 【免费下载链接】vike (Replaces Next.js/Nuxt) 🔨 Build mission-critical applications with stability and development freedom. 项目地址: https://gitcode.com/GitHub_Trending/vi/vike …

2026/8/5 17:39:01 阅读更多 →
开源大模型“幻觉率”首次量化发布:基于2198个事实核查样本的横向测评(Llama 3-8B幻觉率12.7%,Qwen2-7B仅5.3%)

开源大模型“幻觉率”首次量化发布:基于2198个事实核查样本的横向测评(Llama 3-8B幻觉率12.7%,Qwen2-7B仅5.3%)

更多请点击: https://codechina.net 第一章:开源大模型“幻觉率”首次量化发布:基于2198个事实核查样本的横向测评(Llama 3-8B幻觉率12.7%,Qwen2-7B仅5.3%) 幻觉率作为评估大语言模型事实一致性的核心指标…

2026/8/5 17:39:01 阅读更多 →

最新新闻

Amulet Map Editor:3步掌握跨版本Minecraft世界编辑核心技能

Amulet Map Editor:3步掌握跨版本Minecraft世界编辑核心技能

Amulet Map Editor:3步掌握跨版本Minecraft世界编辑核心技能 【免费下载链接】Amulet-Map-Editor A Minecraft world editor and converter that supports all versions since Java 1.12 and Bedrock 1.7. 项目地址: https://gitcode.com/gh_mirrors/am/Amulet-Ma…

2026/8/5 18:18:14 阅读更多 →
Linux常用命令大全(超全面!超详细!)

Linux常用命令大全(超全面!超详细!)

本文全面总结了Linux中常见的命令以及一些实际操作示例,包括文件目录操作、时间日期管理、用户与组管理、文件权限管理、网络管理、进程管理、压缩和解压缩、搜索查找、软件包管理以及关机重启和帮助命令等方面。 本文目录一、文件目录命令1. pwd:显示当…

2026/8/5 18:18:14 阅读更多 →
【P4995 跳跳!】2025-3-10

【P4995 跳跳!】2025-3-10

缘由洛谷p4995 后五个测试点没过,不到为啥,请解答_数据结构与算法-CSDN问答 洛谷p4995 后五个测试点没过,不到为啥,请解答,谢谢,为什么要规定字数超过30啊,我真的不知道说啥 很简单题目,要求尽…

2026/8/5 18:18:14 阅读更多 →
深度解析LivePortrait:5大核心技术实现高效人像动画生成

深度解析LivePortrait:5大核心技术实现高效人像动画生成

深度解析LivePortrait:5大核心技术实现高效人像动画生成 【免费下载链接】LivePortrait Bring portraits to life! 项目地址: https://gitcode.com/GitHub_Trending/li/LivePortrait LivePortrait是一款基于深度学习的开源人像动画生成工具,通过创…

2026/8/5 18:18:14 阅读更多 →
计算机系统结构练习题+笔记

计算机系统结构练习题+笔记

习题第二章第三章一个虚拟存储系统最多有64个用户,每个用户程序最大不超过8192页,每页4KB,主存储器的容量为64MB。为了加快地址变换过程,采用快慢表结构,快表的容量为64个存储字,快表地址经散列函数交换得到…

2026/8/5 18:18:14 阅读更多 →
UE_C++ —— UE反射系统(二)

UE_C++ —— UE反射系统(二)

目录 一,Properties 二,UFunctions 三,Metadata Specifiers 四,Unreal Smart Pointer Library 一,Properties Properties 属性使用标准的C变量语法声明,前面用 UPROPERTY 宏来定义属性变量的说明符和元…

2026/8/5 18:17:14 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →