Proguard语法及常用proguard.cfg代码段

本文深入探讨了ProGuard的使用方法,包括其常用语法、标准proguard.cfg文件内容、常见代码段以及与日志管理的结合。详细介绍了如何通过ProGuard优化代码、避免混淆关键代码和类,并在不同日志级别下实现有效的日志控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于ProGuard的作用、使用及bug分析可见 ProGuard的作用、使用及bug分析

1、ProGuard的常用语法
-libraryjars class_path 应用的依赖包,如android-support-v4
-keep [,modifier,...] class_specification 不混淆某些类
-keepclassmembers [,modifier,...] class_specification 不混淆类的成员
-keepclasseswithmembers [,modifier,...] class_specification 不混淆类及其成员
-keepnames class_specification 不混淆类及其成员名
-keepclassmembernames class_specification 不混淆类的成员名
-keepclasseswithmembernames class_specification 不混淆类及其成员名
-assumenosideeffects class_specification 假设调用不产生任何影响,在proguard代码优化时会将该调用remove掉。如system.out.println和Log.v等等
-dontwarn [class_filter] 不提示warnning

关于proguard更多语法可见:http://proguard.sourceforge.net/index.html#manual/usage.html

 

2、标准proguard.cfg文件内容
参考android标准,修改如下:

源文件见<android_root>/build/core/proguard.flags , 将14行 -dontobfuscate解除注释。

 

3、常用proguard.cfg代码段

不混淆某类的构造方法,需指定构造函数的参数类型,如JSONObject

 

不混淆某个包所有类或某个类class、某个接口interface, 不混淆指定类则把**换成类名

 

不混淆指某个方法,*可换成指定的方法或类名

 

不混淆Parcelable的子类,防止android.os.BadParcelableException

 

添加android-support-v4.jar依赖包

 

4、proguard与log level结合解决debug模式Log问题
常见的Android debug日志的打法是定义一个静态变量DEBUG_STATUS,如果为true,则打印log,否则不打印。对于release模式该变量为false,debug模式变量为true。这里介绍一个更好的方法,不用担心正式发布时一不小心错改了该变量。

 

proguard的作用就是在release模式压缩、优化、混淆代码,其中的压缩和优化就包括去除不必要的代码,我们可以利用这一特性解决debug日志的问题,在proguard.cfg中添加

表示Log.d和Log.v代码无副作用,在proguard时会被从源码中remove掉,这样release模式(正式发布)就不会打印日志了,而debug模式(平常调试)照常打印,不用修改一点代码大赞吧,嘿嘿*_^


### ProGuard 的下载与使用教程 #### 1. ProGuard 简介 ProGuard 是一种用于 Java 应用程序的优化和混淆工具。它可以减少应用程序的大小并提高其性能,同时还能保护代码不被反编译[^4]。 #### 2. 下载 ProGuard 访问 ProGuard 的开源项目地址进行下载: ```plaintext https://gitcode.com/gh_mirrors/pr/proguard ``` 下载完成后解压文件,通常会看到以下目录结构[^5]: - `proguard-7.0.0`:主目录。 - `bin`:含可执行脚本和其他必要的二进制文件。 - `docs`:文档说明。 - `examples`:示例配置文件和测试案例。 - `lib`:核心库文件。 - `LICENSE`:许可证文件。 #### 3. 安装 ProGuard 安装过程相对简单,只需确保环境变量中已设置好 JDK 路径即可。对于 Windows 用户,可以通过双击位于 `bin` 文件夹中的 `.bat` 文件来启动 ProGuard 图形界面[^2]。 如果希望在命令行下操作,则可以进入 `bin` 目录并通过以下方式运行 ProGuard: ```bash java -jar proguard.jar @config.file –options ``` 上述命令允许通过指定的配置文件完成 ProGuard 处理[^3]。 #### 4. 使用 ProGuard ##### 配置文件 创建一个名为 `proguard.cfg` 或其他名称的配置文件,并将其放置于适当位置。以下是基本配置模板: ```properties -injars input.jar # 输入 jar 文件路径 -outjars output.jar # 输出 jar 文件路径 -libraryjars lib.jar # 所需依赖库路径 -dontwarn # 忽略警告信息 -keep public class * { # 保留公共及其方法 public void *(...); } ``` ##### 命令行调用 假设已有以上配置文件,可通过以下命令执行 ProGuard: ```bash java -jar path/to/proguard.jar @path/to/config/file.pro ``` #### 5. 功能特点 ProGuard 主要功能括但不限于以下几个方面: - **压缩 (Shrinking)**:移除未使用的、字段和方法以减小程序体积。 - **优化 (Optimization)**:改进字节码效率从而提升应用性能。 - **混淆 (Obfuscation)**:重命名名、方法名以及变量名使其难以理解,增加逆向工程难度。 - **预校验 (Preverification)**:针对某些平台(如旧版本 Android),提供额外验证支持以便兼容性更好。 整个流程按照固定顺序依次执行——首先是压缩阶段去除冗余部分;其次是优化阶段调整内部实现细节;最后才是混淆阶段改变符号表内容。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值