You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YGuard <keep>标签多class配置失效,指定子包类仍被混淆

解决YGuard 规则无法匹配子包类的问题

核心问题

你配置的com.example.protocol.*仅匹配com.example.protocol包下的直接类,无法匹配该包下的子包(比如com.example.protocol.inner)中的类,这就是子包类依然被混淆的原因。

修复方案

1. 用双通配符匹配所有子包层级

YGuard的patternset支持**通配符,可匹配当前包及所有嵌套子包的类,修改include的name配置:

<include name="com.example.protocol.**"/>

2. 完善标签的保留规则

如果需要完整保留这些类的名称、方法和字段,需给标签明确指定保留属性,避免仅保留类结构但名称仍被混淆:

<keep>
   <class classes="protected"
       methods="protected"
       fields="protected">
   </class>

   <!-- 修正后的子包保留规则 -->
   <class classes="*" methods="*" fields="*">
       <patternset>
           <include name="com.example.protocol.**"/>
       </patternset>
   </class>
</keep>
  • classes="*":保留匹配类的完整类名,不被混淆
  • methods="*":保留类的所有方法
  • fields="*":保留类的所有字段
    你可以根据实际API需求调整这些属性(比如改成public仅保留公共成员)。

3. 检查规则顺序与冲突

  • YGuard的规则执行顺序会影响结果,确保<keep>规则放在<rename>规则之前,先定义要保留的内容再执行混淆操作
  • 排查是否有其他<patternset>的<exclude>规则意外排除了这些子包类

验证方法

混淆完成后,反编译输出的JAR包,检查com.example.protocol及其子包下的类名、方法名是否未被混淆,以此确认规则生效。

内容的提问来源于stack exchange,提问作者Androiduser14919 Starters

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:35:01