
问题我的项目是Android嵌H5的方案 Vite Vue 3 构建的 H5 应用通过 Capacitor 打包为 Android APK本地启了一套 websocket 服务后npm run dev在 PC 浏览器上 WebSocket 连接正常消息收发正常打包为 APK 后在 Android 真机上运行WebSocket 握手阶段失败提示网络连接异常但是下载了ping网络的工具netcheck网络检测IP和端口都是可以正常 ping 通的分析根因一Android 9 明文流量限制主因Android 9API 28起系统默认禁止所有未加密的明文流量。影响范围包括http://请求ws://未加密 WebSocket连接项目中WebSocket 地址为ws://192.168.3.132:50000使用的是未加密的ws://协议capacitor.config.ts中androidScheme: httpWebView 加载页面也是http://AndroidManifest.xml的application标签上没有声明允许明文流量因此 Android 系统在网络层直接拦截了 WebSocket 握手请求导致连接在握手阶段即失败。根因二网络可达性【不考虑】192.168.3.132是局域网 IP 地址手机连接同一个 WiFi时可以访问手机使用4G/5G 移动数据时无法访问手机连接其他 WiFi不同网段时无法访问修复方案方案 A全局放行明文流量立即生效在AndroidManifest.xml的application标签上添加android:usesCleartextTraffictrue告知 Android 系统允许应用发送明文 HTTP/WebSocket 流量。方案 B细粒度网络安全策略更安全创建network_security_config.xml仅对指定的 WebSocket 服务端 IP 放行明文流量其他域名仍受 Android 默认安全策略保护。修改的文件1.android/app/src/main/AndroidManifest.xmlapplicationandroid:allowBackuptrueandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:roundIconmipmap/ic_launcher_roundandroid:supportsRtltrueandroid:themestyle/AppThemeandroid:usesCleartextTraffictrue!--新增--android:networkSecurityConfigxml/network_security_config!-- 新增 --2.android/app/src/main/res/xml/network_security_config.xml新文件?xml version1.0 encodingutf-8?network-security-configdomain-configcleartextTrafficPermittedtruedomainincludeSubdomainstrue192.168.3.132/domaindomainincludeSubdomainstruelocalhost/domain/domain-config/network-security-config重新打包后成功能访问到了这样既能绕过 Android 明文限制又能保证数据传输安全。