ProGuard配置详解

Java混淆工具 ProGuard之初体验 本文使用的是ProGuard这一款Java代码混淆工具。 因为在我们实际的开发工作中,有些程序包含了公司核心产品的代码,所以为了保护自身的知识产权,避免程序包不小心外流出去,我们有必要进行一些保护措施,在程序开发完之后,需要将程序代码进行混淆。 本文使用的是ProGuard v5.3.3版本。 下载地址:http://www.jb51.net/softs/242707.html 2.混淆... 阅读详情
AI摘要

本文深入解析ProGuard配置文件的结构和常见配置项,包括保留规则、警告抑制、属性保留等,帮助开发者有效优化和混淆代码,提升应用安全性。

ProGuard是一个开源的Java class文件缩小器、优化器、混淆器和预验证器。它通过删除未使用的类、字段、方法和属性,优化字节码指令,并重命名类、字段和方法,使反编译后的代码难以理解,从而提高应用的安全性。以下是对ProGuard配置文件的一些详细解释和常见配置项的说明。

ProGuard配置文件结构

ProGuard的配置文件通常命名为proguard-rules.pro,并包含在Android项目的根目录或app模块目录中。配置文件由各种规则和选项组成,每个选项都定义了ProGuard在混淆和优化代码时应该执行的操作。

常见配置项

1. -keep 指令

-keep指令用于保留类、方法、字段不被混淆。可以指定具体的类、方法、字段或带有某些特征的类。

# 保留所有继承自Activity的类
-keep class * extends android.app.Activity

# 保留所有带有特定注解的类
-keep @interface com.example.MyAnnotation

# 保留所有实现特定接口的类
-keep class * implements java.io.Serializable
2. -keepclassmembers 指令

-keepclassmembers指令用于保留类中的特定成员不被混淆。

# 保留所有实现Serializable接口的类中的所有字段和方法
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException;
    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException;
    java.lang.Object writeReplace() throws java.io.ObjectStreamException;
    java.lang.Object readResolve() throws java.io.ObjectStreamException;
}
3. -dontwarn 指令

-dontwarn指令用于告诉ProGuard忽略特定类的警告信息。

# 忽略某些库的警告信息
-dontwarn com.squareup.okhttp3.**
-dontwarn com.google.gson.**
4. -keepattributes 指令

-keepattributes指令用于保留类文件中的特定属性。

# 保留注解属性
-keepattributes *Annotation*

# 保留签名属性
-keepattributes Signature
5. -dontobfuscate 指令

-dontobfuscate指令用于告诉ProGuard不要混淆代码,只进行代码优化和压缩。

-dontobfuscate
6. -optimizations 指令

-optimizations指令用于指定哪些优化步骤可以被应用。

# 应用所有优化步骤
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
7. -printmapping 指令

-printmapping指令用于生成一个映射文件,记录了混淆前后的类、方法、字段的对应关系。

# 生成混淆映射文件
-printmapping mapping.txt

示例ProGuard配置文件

以下是一个常见的ProGuard配置文件示例,涵盖了基本的保留规则和常见的库配置。

# 保留所有注解属性
-keepattributes *Annotation*

# 保留四大组件的类
-keep class * extends android.app.Activity
-keep class * extends android.app.Service
-keep class * extends android.content.BroadcastReceiver
-keep class * extends android.content.ContentProvider

# 保留应用程序类
-keep public class * extends android.app.Application

# 保留自定义视图类
-keep class * extends android.view.View {
    *** get*();
    void set*(***);
    void *(android.content.Context);
}

# 保留 Parcelable 接口的实现类
-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}

# 保留 Gson 注解
-keep class com.google.gson.annotations.SerializedName { *; }

# 保留 Retrofit 的类
-keep class retrofit2.** { *; }
-keep class okhttp3.** { *; }
-keep class okio.** { *; }

# 保留 ButterKnife 注解
-keep class butterknife.** { *; }
-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

# 保留序列化类
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException;
    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException;
    java.lang.Object writeReplace() throws java.io.ObjectStreamException;
    java.lang.Object readResolve() throws java.io.ObjectStreamException;
}

# 忽略一些库的警告信息
-dontwarn com.squareup.okhttp3.**
-dontwarn com.google.gson.**

# 生成混淆映射文件
-printmapping mapping.txt

注意事项

  1. 逐步调试:如果应用在混淆后崩溃或行为异常,可以逐步添加保留规则,以找出哪些类或方法需要保留。
  2. 保留规则覆盖范围要适当:保留规则覆盖范围过大可能会导致混淆效果减弱,覆盖范围过小可能会导致应用运行异常。
  3. 结合混淆报告:使用ProGuard生成的混淆报告(mapping文件)来调试和分析混淆后的代码,以确保代码混淆的正确性。

通过合理配置ProGuard,可以在保持应用功能完整的前提下,最大化混淆和优化效果,提高应用的安全性和性能。

【我的Android进阶之旅】Android 混淆文件资源分类整理之二:将混淆文件拆分成更小粒度的混淆文件 在我2017年的文章【我的Android进阶之旅】Android 混淆文件资源分类整理中,我已经提及过。 之前将所有的混淆都配置在一个 proguard-rules.pro 这个Android Studio新建项目时自动生成的文件里面,而随着项目功能迭代越来越多,代码量越来越多,引用的第二方库、第三方库都越来越多,导致proguard-rules.pro 越来越臃肿,而且随着开发人员增多导致proguard-rules.pro 文件里面的配置越来越混乱。 一、拆分proguard-rules.pro混淆 阅读详情

相关推荐

Android混淆处理与Proguard配置详解

Proguard配置文件是构建过程中控制混淆行为的核心载体。通过配置文件,开发者可以指定哪些类、方法或字段需要保留、混淆或优化。理解其种类与作用是配置的第一步。当多个配置文件中存在相同规则时,Proguard会进行合并处理。合并机制遵循以下原则:相同规则的叠加:如多个文件中都使用-keep保留某类,最终效果是保留该类;优先级覆盖:若存在冲突规则(如一个保留、一个删除),则优先级高的配置文件中的规则生效;自动去重:重复的指令会被自动合并,避免冗余。例如,假设。

weixin_35756637的博客 1023

Android 将类混淆成中文、混淆资源文件和反编译

##1.配置proguard-rules.pro和module文件混淆成中文:** 在proguard-rules.pro的配置: #中文混淆 -classobfuscationdictionary ./proguard-keys.txt -packageobfuscationdictionary ./proguard-keys.txt -obfuscationdictionary ./pro...

MyselfGang的博客 3365

Android ProGuard配置与混淆详解

本文还有配套的精品资源,点击获取 简介:在Android开发中,ProGuard是用于代码混淆、优化和压缩的工具,它能有效保护代码安全、减小APK体积并提高运行效率。本篇详细介绍了ProGuard的基础知识、作用、以及针对jPush混淆问题的解决策略。通过理解ProGuard的工作原理和配置规则,开发者能够确保在使用jPush等第三方服务时,混淆过程不会破坏应用的功能。文章...

weixin_36123300的博客 2347

ProGuard详解 - Java代码混淆

proGuard简介及使用proGuard工具加密混淆java的jar文件的过程示例

weixin_44462773的博客 3万+

XVF3800麦克风阵列实战:从选型到快速原型搭建

本文详细介绍了XVF3800麦克风阵列的选型与快速原型搭建实战经验。从开箱即用的特性到波束成形、回声消除等核心功能拆解,再到硬件设计避坑指南和固件开发技巧,帮助开发者高效实现智能语音设备的开发。特别适合智能音箱、会议终端等需要远场拾音和声源定位的应用场景。

weixin_29161719的博客 274

Material Studio 2024安装避坑指南:从证书配置到权限设置的完整解决方案

本文详细解析了Material Studio 2024的安装流程,从环境准备到权限优化的完整解决方案。针对证书配置、系统权限和计算服务等常见问题,提供了12个关键风险点的避坑指南,帮助科研工作者高效完成安装,提升材料模拟工作的效率。

moon9的博客 772

使用开源工具ProGuard实现Java代码混淆

使用ProGuard对Java代码进行混淆,代码混淆是将计算机程序的代码转换成一种功能上等价,但是难以阅读和理解的形式。

BUG编写师的博客 1万+

EMC案例:解决千兆网口RTL8211F EMI问题

摘要:本文分析了Amlogic S812平台OEM项目中RTL8211F-CG千兆网卡EMI辐射超标问题。发现百兆测试时25MHz时钟有3dB余量,但千兆125MHz时钟导致超标。问题根源包括:未关闭PHY芯片悬空CLKOUT引脚、TX/RXCLK端RC位置错误、包地不完整及参考地缺失。解决方案涉及软件关闭无用时钟、优化RC布局、加强包地与打孔、调整共模电感位置,并在HDMI 3.3V加磁珠。关键结论指出千兆网125MHz时钟需严格包地打孔,且RC取值需平衡EMI与通信性能。

电子绿洲的博客 1278

proguard的配置文件

# 需要混淆的jar包 -injars management_sso-1.0-SNAPSHOT.jar # 混淆后导出的jar (注意jar包路径) -outjars management_sso-1.1-SNAPSHOT.jar # 需要混淆jar的依赖包 -libraryjars 'F:\Java\jre8\lib\rt.jar' # 指定不去忽略非公共的库的类 -dontskipnonpu...

bie__zou的博客 832

【人工智能】你知道什么是DeepSeek吗?你有去了解过DeepSeek吗?新手要入门DeepSeek的必经之路——初识DeepSeek

【人工智能】初识DeepSeek 详细介绍DeepSeek以及DeepSeek-R1

蒙奇D索大的博客 3366

混合编程实战:C#集成C++ PCL点云处理库,打造跨语言动态链接库

本文详细介绍了C#与C++混合编程实战,重点讲解如何通过动态链接库(DLL)集成C++ PCL点云处理库,实现跨语言协作。内容涵盖环境配置、PCL功能封装、C#调用DLL的完整方案,以及性能优化和错误处理等进阶技巧,帮助开发者高效处理大规模点云数据,提升工业软件开发效率。

weixin_42620913的博客 381

Android Proguard工具使用和配置详解

介绍Android Proguard工具的使用和配置方法

ccpat的专栏 2万+

实用电路精讲系列---仪表放大器

摘要 仪表放大器通过三级运放架构实现高共模抑制比(CMRR>100dB)和精密差分放大,其核心是第一级同相运放提供高输入阻抗和可调增益(G=1+2R/RG),第二级差分运放消除共模干扰。具有低失调(≤50μV)、低温漂(≤0.6μV/℃)特性,广泛应用于智能断路器电流监测、ECG心电信号放大等场景。典型电路采用LTC1049运放,通过匹配电阻网络实现199倍差分增益,结合输出缓冲确保信号稳定性。设计时需注意输入共模电压范围限制和增益电阻精度,优选集成IC(如AD620、INA128)以规避分立元件匹配

weixin_40590799的博客 2072

springboot项目使用proguard配置代码混淆

物料准备:1.pom引入proguard-maven-plugin插件2.在proguard.cfg配置文件里设置具体的代码混淆配置3.maven package 打包测试。

ThinkPet 6740

Claude Code、Codex、Gemini CLI、OpenCode 和 OpenClaw 配置管理太麻烦?试试这个统一管理工具

还在为 Claude Code、Codex、Gemini CLI 等 AI CLI 配置烦恼?🤯 这款桌面工具支持五大助手统一管理,一键切换 50+ 服务商,MCP 和 Skills 集中管理 🛠️,跨平台支持,让你的 AI 编程更高效 ⚡

XiaoqiangClub的博客 913

【图像去噪】论文复现:CLIP用于图像去噪提升泛化性!CLIPDenoising的Pytorch源码复现,跑通CLIPDenoising全流程,图文结合,网络结构梳理和拆解,对应源码注释!

论文题目:Transfer CLIP for Generalizable Image Denoising —— 用于可泛化图像去噪的转移CLIP。【图像去噪】论文精读:Transfer CLIP for Generalizable Image Denoising(CLIPDenoising)CLIPDenoising理论部分详解见上面对应的论文精读,本文以源码为主,理论部分只是粗略回顾。启发:多看其他领域的文章,分析是否能应用在去噪领域,这是产生idea的要素之一;

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1413

proguard 配置简介

proguard  配置简介   参数:    -include {filename}    从给定的文件中读取配置参数    -basedirectory {directoryname}    指定基础目录为以后相对的档案名称    -injars {class_path}    指定要处理的应用程序jar,war,ear和目录    -outjars {class_pa

Working harder, getting stronger! 1948

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android代码混淆配置:ProGuard

混淆

qq_42795723的博客 1449

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

安卓代码混淆 proguard配置

proguard主要是个代码优化和混淆工具; 使用可以项目的build里面配置release正式版 和debug版 ,minifyEnabled是否开启混淆 buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('pr...

qq_36237165的博客 895

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

史上最全ProGuard使用及相光配置

ProGuard工作原理 ProGuar由shrink、optimize、obfuscate和preveirfy四个步骤组成,每个步骤都是可选的,我们可以通过配置脚本来决定执行其中的哪几个步骤。 (1)压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute)。 (2)优化(Optimize):对字节码进行优化,移除无用的指令。 (3)混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名。 (4)预检(Preveirfy):在Java

weixin_43434765的博客 1077

ProGuard的Maven插件配置

Java代码混淆工具ProGuard是比较流行的,集成到Maven中需要使用相关插件。 通过比较,笔者认为IDFC Maven ProGuard Plug-in是较好些(也是ProGuard官方推荐)。 下面是pom的一个配置示例,这个示例是对项目中一个公共lib(有其特殊性)进行混淆,除了plugin之外的配置,还有一个.pro的配置文件(存放在${basedir}/src/main/co...

qian0021514578 458

如何快速配置Android ProGuard:android-proguard-snippets完全指南

在Android应用开发中,ProGuard是保护代码安全和减小APK体积的重要工具。**android-proguard-snippets**项目提供了针对常见Android库的ProGuard配置模板,帮助开发者快速实现混淆配置,避免因错误配置导致的运行时异常。本文将详细介绍如何使用这个开源项目,让你的Android应用混淆配置变得简单高效。 ## 📋 什么是android-proguar

gitblog_01160的博客 230

Android Studio:ProGuard 混淆配置

Android Studio 创建Module后,会自动生成 proguard-rules.pro 文件,在其中添加需要的规则即可对apk或jar进行混淆。

doris_d的专栏 1万+
上一篇: 枚举单例是怎么保证线程安全和防止反射的
下一篇: 混淆后的代码报错如何定位问题
彬_小彬
博客等级 码龄10年 574粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬_小彬

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值