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

简介:

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标准,修改如下:

标准proguard.cfg文件内容

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

3、常用proguard.cfg代码段

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

Java

1

2

3

-keepclassmembers class cn.trinea.android.common.service.impl.ImageCache {

public <init>(int);

}

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

Java

1

-keep class cn.trinea.android.common.** { *; }

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

Java

1

2

3

-keepclassmembers class cn.trinea.android.common.service.impl.ImageCache {

public boolean get(java.lang.String, android.view.View);

}

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

Java

1

2

3

-keep class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator *;

}

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

Java

1

2

3

4

-libraryjars libs/android-support-v4.jar

-dontwarn android.support.v4.**

-keep class android.support.v4.** { *; }

-keep interface android.support.v4.app.** { *; }

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

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

Java

1

2

3

4

-assumenosideeffects class android.util.Log {

public static *** d(...);

public static *** v(...);

}

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

目录
相关文章
|
Android开发 Kotlin JavaScript
Compose 为什么可以跨平台?
Compose 为什么可以跨平台?
1368 0
Compose 为什么可以跨平台?
|
数据采集 Cloud Native Java
在 GraalVM 静态编译下无侵入实现可观测探索
在 GraalVM 静态编译下无侵入实现可观测探索
113188 123
|
24天前
|
人工智能 运维 监控
智能聚类:从海量 Trace 中理解 Agent 的行为和表现
本文介绍从海量 Agent Trace 和 Session 中提取请求意图与用户任务并行进行聚类,结合耗时、Token 消耗与交互摩擦分析运行表现,帮助发现线上共性问题,为问题排查与能力优化提供依据。
198 11
|
20天前
|
弹性计算 运维 安全
阿里云 38元一年新人特惠云服务器测评:申领规则、选型与部署步骤说明
综合2026年最新阿里云新人政策,个人用户租用 阿里云轻量应用服务器 最低仅需38元一年,是目前全网正规云厂商最低入门价格,搭配2核2G均衡配置,完全满足新手入门、运维学习、个人建站、项目测试等全部轻量化需求。如果是短期使用、零基础入门、学生练手,38元新人 阿里云轻量应用服务器 是最优解,极致压缩入门成本;如果需要长期稳定运营项目、追求续费不涨价,99元 阿里云ECS云服务器 经济型是综合性价比之王;小微企业多服务部署、高访问需求直接选择199元企业款。
293 0
|
8月前
|
JSON NoSQL IDE
Studio 3T 2026.6 发布 - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2026.6 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
244 2
|
12月前
|
SQL 运维 关系型数据库
云数据库 Clouder 认证:SQL 基础开发与应用题型分析
阿里云Clouder认证(数据库方向)考察SQL基础开发与应用能力,涵盖DDL/DML操作、多表查询、聚合统计、子查询等高频题型。考试以MySQL实操为主,注重语法准确性与逻辑严谨性,适合开发者、运维及数据工程师备考。
856 162
|
存储 缓存 算法
《数据之美》:链表的灵活世界与算法实现
链表是一种动态数据结构,通过指针链接节点实现非连续存储,支持高效插入删除。本文详解其类型、操作、与数组对比及适用场景,助你掌握Java中链表原理与集合框架应用。
|
JSON 供应链 API
深度分析京东工业API接口,用Python脚本实现
京东工业是京东旗下工业供应链服务平台,提供商品查询、库存管理、订单处理等API接口,支持企业高效对接工业采购系统。本文解析其API架构、认证机制及Python调用示例,助力企业集成工业供应链能力。
|
11月前
|
JSON Unix API
拼多多API赋能,新农人也能玩转电商大舞台!
拼多多开放平台API助力新农人数字化转型,实现农产品高效上架、订单自动化处理与精准营销。本文详解API接入流程,涵盖商品管理、订单发货、活动创建及数据洞察,并提供Python代码示例,助力农业电商降本增效,拥抱智慧农业新机遇。(238字)
1043 1
|
10月前
|
人工智能 自然语言处理 搜索推荐
Geo优化:让联系方式在AI搜索中“被看见”的SOP
Geo专家于磊老师首创的“两大核心+四轮驱动”Geo优化体系,为企业提供了一个系统化、规范化、高效化的增长路径。
444 0