You need to enable JavaScript to run this app. ProGuard混淆配置:全项目各模块路径下model类的保留方法
优惠活动
大模型
产品
解决方案
定价
更多

ProGuard混淆配置:全项目各模块路径下model类的保留方法

原规则的实际生效范围判断

你写的配置没法完全实现跨模块所有model包类不混淆的预期效果,虽然核心匹配逻辑方向是对的,但存在会导致规则失效、范围失控的细节问题。

原规则的匹配逻辑拆解

你写的原始配置:

-keep class **.model.**{
*;
}

从ProGuard通配符的设计逻辑来看,这套写法本来就是为了覆盖多模块分散存储的model目录设计的:

  • 规则开头的** 可以匹配任意层级的前置包路径,不管你的model文件夹是直接放在类路径根目录下,还是嵌套在com.app.module.home、com.app.module.user等不同业务模块的任意层级里,只要包结构里存在一个独立的、名字叫model的包段,不管前置路径有多少层都能被识别匹配
  • 规则中.model.**部分的后置**,可以匹配model包下的任意层级子包,也能匹配直接放在model包根目录下的类——ProGuard的**通配符本身支持匹配单段类名,不会出现“漏掉model包根目录下直接存放的类”的常见误区
  • 大括号内的*;配置,代表对匹配到的类,保留全部字段、方法、内部类等成员,不对这些成员做重命名、移除处理
无法达到预期的具体问题
  1. 存在无差别误匹配
    规则只靠包段名做匹配,不区分包的实际用途。只要项目任意位置存在独立命名为model的包段,包内的所有类都会被强制保留。比如工具包路径com.app.util.model.JsonConverter,虽然根本不是需要保护的POJO数据目录,也会被这条规则强制keep,平白增加混淆后的包体积。
  2. 存在格式导致的解析失效风险
    规则里的类匹配段和大括号之间没有加空格分隔,虽然多数新版构建插件可以正常解析,但低版本ProGuard、AGP插件会出现解析截断,直接导致整条规则不生效;加上成员块没有统一缩进,后续维护时容易出现符号写错、规则被意外删除的问题,进一步降低规则可靠性。
可稳定生效的优化配置

针对分散在各模块的model目录保护需求,调整后的可直接使用的配置如下:

# 补充分隔空格修复解析问题,统一代码块缩进
-keep class **.model.** {
    *;
}

如果需要减少误匹配范围,可以在规则基础上补充排除配置,跳过model包下不需要保护的非POJO类。

内容的提问来源于stack exchange,提问作者Android Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 14:54:08