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

如何在ProGuard中保留JedisPubSub抽象类以避免代码丢失

解决ProGuard混淆JedisPubSub匿名内部类逻辑丢失的问题

你的问题核心是ProGuard误删了继承自JedisPubSub的匿名内部类的重写方法,并且将该匿名类混淆成了Object,之前的配置仅保留了JedisPubSu父类本身,没有覆盖到子类(你的匿名内部类)的方法保留规则。

正确的ProGuard配置方案

添加以下规则到你的proguard.cfg文件中:

# 保留JedisPubSu父类的所有公共/保护方法,确保回调接口结构完整
-keep class redis.clients.jedis.JedisPubSub {
    public protected *;
}

# 关键规则:保留所有继承自JedisPubSub的类(包括你的匿名内部类)及其重写方法
# 防止子类被混淆成Object,同时避免重写的onMessage等方法被删除
-keep class * extends redis.clients.jedis.JedisPubSub {
    public protected *;
}

# 可选:如果你的匿名内部类引用了外部类的成员(比如示例中的this),需保留外部类对应成员
# 替换your.package.YourOuterClass为实际的外部类全限定名
-keepclassmembers class your.package.YourOuterClass {
    public protected *;
}

配置说明

  1. 第一条规则:确保JedisPubSu父类的方法结构不被混淆或删除,为子类提供正确的继承基础。
  2. 第二条规则:这是解决问题的核心,它覆盖了所有继承自JedisPubSub的子类(包括你编写的匿名内部类),强制ProGuard保留这些类的结构以及它们的公共/保护方法,这样onMessage方法就不会被误删,匿名类也不会被混淆成Object。
  3. 第三条规则:如果你的匿名内部类依赖外部类的变量或方法(比如示例代码中的this),需要保留外部类的对应成员,避免混淆后出现引用缺失的问题。

配置完成后重新执行混淆,你的subscribe方法内的匿名内部类结构和onMessage方法逻辑会被完整保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:20:21