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
相关产品推荐
相关产品推荐

