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

React Native WebSocket调试模式正常但打包APK后无法工作求助

解决React Native打包APK后WebSocket失效的问题

1. 确认WebSocket服务端URL与证书配置

  • Android 9及以上版本的生产APK默认拦截HTTP请求,调试模式下的ws://协议在打包后会失效,必须切换为wss://(HTTPS)协议。
  • 若使用自签名HTTPS证书,调试时DevSettings的"Allow Insecure HTTP"会跳过证书验证,但打包后需配置网络安全策略信任该证书:
    在android/app/src/main/res/xml/network_security_config.xml中添加:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">你的WebSocket服务域名</domain>
            <trust-anchors>
                <certificates src="@raw/你的自签名证书文件名"/>
            </trust-anchors>
        </domain-config>
    </network-security-config>
    
    然后在AndroidManifest.xml的<application>标签中添加android:networkSecurityConfig="@xml/network_security_config",并将证书文件放入android/app/src/main/res/raw目录。

2. 检查ProGuard混淆规则

打包APK时开启混淆可能破坏WebSocket相关代码,在android/app/proguard-rules.pro中添加保留规则:

# 保留OkHttp相关类(React Native默认依赖OkHttp处理网络)
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }

# 保留React Native WebSocket模块
-keep class com.facebook.react.modules.websocket.** { *; }
-keep class okio.** { *; }

3. 验证生产环境URL是否正确

调试时可能使用测试环境地址,打包前需确认代码中生产环境的WebSocket URL是否正确:

const WS_URL = __DEV__ ? 'ws://localhost:8080' : 'wss://prod.yourdomain.com/ws';

检查生产URL是否存在拼写错误、端口不匹配或域名无法访问的情况。

4. 确认Android权限配置

确保AndroidManifest.xml中添加了必要的网络权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

5. 抓取日志定位具体错误

用Android Studio的Logcat打包后的APK日志,过滤WebSocket相关关键词(如WebSocket、OkHttp、SSL),查看是否有连接错误码、证书验证失败或网络拦截的提示,这些日志能精准定位问题根源。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:02:17