问题
SignalR依赖:
implementation 'com.microsoft.signalr:signalr:5.0.3'
使用SignalR进行实时通讯时,在调试安装模式下,程序运行正常。而在打包发布后,运行报错:
03-06 15:02:50.504 13121-13158/? I/c.e.a.z1: WebSocket transport connected to: ws://192.168.1.137:8066/messagehub?id=2--aL0lysu5pheJNLJuC6w.
03-06 15:02:50.510 13121-13158/? I/c.e.a.v0: HubConnection started.
03-06 15:02:50.511 13121-13158/? I/c.e.a.l1: WebSocket closing with status code '1000' and reason ''.
03-06 15:02:50.512 13121-13158/? I/c.e.a.v0: HubConnection stopped.
03-06 15:02:50.514 13121-13522/? E/c.e.a.l1: WebSocket closed from an error.
java.net.SocketException: sendto failed: ECONNRESET (Connection reset by peer)
at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:549)
at libcore.io.IoBridge.sendto(IoBridge.java:518)
at java.net.HwPlainSocketImpl.write(HwPlainSocketImpl.java:1129)
at java.net.HwPlainSocketImpl.access$1500(HwPlainSocketImpl.java:63)
at java.net.HwPlainSocketImpl$PlainSocketOutputStream.write(HwPlainSocketImpl.java:887)
at okio.Okio$1.write(Okio.java:5)
at okio.AsyncTimeout$1.write(AsyncTimeout.java:6)
at okio.RealBufferedSink.emit(RealBufferedSink.java:3)
at f.i0.m.d.a(WebSocketWriter.java:35)
at f.i0.m.d$a.close(WebSocketWriter.java:2)
at okio.RealBufferedSink.close(RealBufferedSink.java:4)
at f.i0.m.a.d(RealWebSocket.java:29)
at f.i0.m.a$a.run(RealWebSocket.java:1)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:154)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:833)
Caused by: android.system.ErrnoException: sendto failed: ECONNRESET (Connection reset by peer)
at libcore.io.Posix.sendtoBytes(Native Method)
at libcore.io.Posix.sendto(Posix.java:211)
at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:278)
at libcore.io.IoBridge.sendto(IoBridge.java:516)
at java.net.HwPlainSocketImpl.write(HwPlainSocketImpl.java:1129)
at java.net.HwPlainSocketImpl.access$1500(HwPlainSocketImpl.java:63)
at java.net.HwPlainSocketImpl$PlainSocketOutputStream.write(HwPlainSocketImpl.java:887)
at okio.Okio$1.write(Okio.java:5)
at okio.AsyncTimeout$1.write(AsyncTimeout.java:6)
at okio.RealBufferedSink.emit(RealBufferedSink.java:3)
at f.i0.m.d.a(WebSocketWriter.java:35)
at f.i0.m.d$a.close(WebSocketWriter.java:2)
at okio.RealBufferedSink.close(RealBufferedSink.java:4)
at f.i0.m.a.d(RealWebSocket.java:29)
at f.i0.m.a$a.run(RealWebSocket.java:1)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:154)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:833)
03-06 15:02:50.514 13121-13522/? E/c.e.a.v0: 'stopConnection' called with a null ConnectionState. This is not expected, please file a bug. https://github.com/dotnet/aspnetcore/issues/new?assignees=&labels=&template=bug_report.md
原因
打包发布的过程中,对SignalR的库文件 com.microsoft.signalr 进行了混淆,进而导致运行中出现了异常。
解决办法
在proguard的混淆规则中添加:
-keep class com.microsoft.**{*;}
问题得到解决!