'Network unreachable' 在 Play 商店发布的应用上,但调试版本有效

'Network unreachable' on Play Store published app, but debug version works

我无法使用我的应用程序的 Play 商店发布版本连接到我的 Chromecast Audio,但我可以在同一个 phone 上使用 USB 调试版本。两个版本都可以访问网络,即都成功找到了Chromecast设备的IP地址。

相同 phone、Chromecast、网络和代码。只是 Play 商店发布 APK/Bundle 无法连接。

在 Logcat 我看到:

2019-05-27 11:05:12.753 9203-9370/? W/System.err: java.net.ConnectException: failed to connect to /192.168.100.109 (port 8009) from /:: (port 0): connect failed: ENETUNREACH (Network is unreachable)
2019-05-27 11:05:12.753 9203-9370/? W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:138)
2019-05-27 11:05:12.753 9203-9370/? W/System.err:     at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:129)
2019-05-27 11:05:12.753 9203-9370/? W/System.err:     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:357)
2019-05-27 11:05:12.753 9203-9370/? W/System.err:     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:201)
2019-05-27 11:05:12.753 9203-9370/? W/System.err:     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:183)
2019-05-27 11:05:12.753 9203-9370/? W/System.err:     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
2019-05-27 11:05:12.753 9203-9370/? W/System.err:     at java.net.Socket.connect(Socket.java:616)
2019-05-27 11:05:12.753 9203-9370/? W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.connect(OpenSSLSocketImpl.java:263)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.connect(OpenSSLSocketImpl.java:250)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at f.a.a.a.a.y.connect(Unknown Source:55)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at f.a.a.a.a.y.d(Unknown Source:4)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at f.a.a.a.a.z.a(Unknown Source:28)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at f.a.a.a.a.z.j(Unknown Source:5)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at f.a.a.a.a.z.e(Unknown Source:0)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at [my app's name].j.e(Unknown Source:29)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at [my app's name].j.b(Unknown Source:0)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at [my app's name].f.run(Unknown Source:3)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at java.lang.Thread.run(Thread.java:784)
2019-05-27 11:05:12.754 9203-9370/? W/System.err: Caused by: android.system.ErrnoException: connect failed: ENETUNREACH (Network is unreachable)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at libcore.io.Linux.connect(Native Method)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:126)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at libcore.io.IoBridge.connectErrno(IoBridge.java:152)
2019-05-27 11:05:12.754 9203-9370/? W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:130)

显然,我的应用可以访问网络,因为它找到 AVR/Chromecast 音频的 IP 地址 (192.168.100.109)。我还在清单中授予它 INTERNET 权限。我也在我的 build.gradle 文件中使用 minifyEnabled trueshrinkResources true

我正在使用 ChromeCast Java API v2 for convenience, rather than the official Cast SDK,如果这有什么不同的话。

编辑:已解决。这是 build.gradle (Module: app) 文件(即 ProGuard)中的选项 minifyEnabled true 不喜欢 ChromeCast Java API v2 库。

build.gradle (Module: app) 文件中启用选项 minifyEnabled true 是问题所在。 ProGuard 和 ChromeCast Java API v2 库不能很好地协同工作,因此如果想使用 minifyEnabled 选项,需要将排除项添加到 proguard-rules.pro 文件中:

-keep class su.litvak.chromecast.**
-keepclassmembers class su.litvak.chromecast.** {*;}

非常感谢 by user random 的回答。