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

Android Kotlin开启Proguard后SignalR发布版无法接收推送求助

SignalR Android Kotlin Release版无法接收推送(Proguard混淆导致)

问题原因

Debug模式下接收正常,但开启Proguard的Release版本出现java.lang.NullPointerException: Attempt to invoke virtual method 'void java.lang.reflect.Method.setAccessible(boolean)' on a null object reference,核心原因是Proguard混淆了SignalR SDK内部依赖反射实现的类和方法,导致推送事件触发时反射无法找到对应的处理逻辑。

解决步骤

在项目的proguard-rules.pro文件中添加以下防混淆规则:

1. 完整保留SignalR SDK结构

# 适配你依赖的旧版SignalR SDK
-keep class microsoft.aspnet.signalr.** { *; }
-dontwarn microsoft.aspnet.signalr.**

# 若使用新版SignalR可添加此规则(按需启用)
-keep class com.microsoft.signalr.** { *; }
-dontwarn com.microsoft.signalr.**

2. 保留订阅处理器类

SignalR的SubscriptionHandler1等处理器依赖反射实例化,必须防止被混淆:

# 保留SignalR订阅处理器及其子类
-keep class * extends microsoft.aspnet.signalr.client.SubscriptionHandler1 { *; }
-keep class * extends microsoft.aspnet.signalr.client.SubscriptionHandler2 { *; }
# 若使用更多参数的处理器,按此格式补充对应规则

3. 保留反射必要属性

确保反射所需的签名、注解信息不被Proguard移除:

-keepattributes Signature
-keepattributes *Annotation*

验证

添加规则后重新构建Release包,测试推送接收功能:

  • 日志不再输出NullPointerException错误
  • serverSentEvents - Trigger onData能正常显示非空的推送数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:45:42