已部署的React Native安卓应用无法通过IP地址调用本地网络服务
问题结论
该需求完全可行,安卓系统从未禁止应用调用本地局域网IP地址,问题出在release版本和debug版本的默认配置差异上。
常见原因及修复方案
- 明文HTTP访问限制
安卓9(API 28)及以上系统默认禁止应用使用明文HTTP通信,debug模式下AndroidManifest.xml默认开启usesCleartextTraffic权限,release模式默认关闭,这是绝大多数同类问题的诱因。
修复方式:
在android/app/src/main/AndroidManifest.xml的application标签中添加属性:
<application ... android:usesCleartextTraffic="true" ...>
如果需要更安全的配置(仅开放指定内网IP的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="false">192.168.88.39</domain> <!-- 可添加更多内网IP段 --> <domain includeSubdomains="false">192.168.0.0/16</domain> </domain-config> </network-security-config>
- 在
application标签中引用该配置:
<application ... android:networkSecurityConfig="@xml/network_security_config" ...>
- 权限缺失
确认AndroidManifest.xml中已添加必要权限:
<!-- 基础网络访问权限 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 安卓12及以上访问本地WiFi设备所需权限 --> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" /> <!-- 低版本安卓识别局域网状态所需权限 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
网络环境异常
确认测试手机和IoT设备连接在同一个局域网子网下,手机未开启VPN、全局代理、网络分流工具,否则会导致路由不到内网IP地址。打包配置错误
检查release模式下的JS代码配置:
- 确认请求的完整地址未被错误拼接,可临时添加日志弹窗输出完整请求URL,确认和测试阶段的
http://192.168.88.39:8080/version一致 - 确认未配置全局代理、HTTPS强制跳转等逻辑
- Charles抓包失败原因
安卓7及以上系统默认不信任用户安装的CA证书,因此release版本默认无法抓取HTTPS请求,HTTP请求抓包失败通常是因为没有配置网络安全规则信任用户证书,可临时在网络安全配置中添加以下规则抓包,测试完成后及时删除避免安全风险:
<debug-overrides> <trust-anchors> <certificates src="user" /> </trust-anchors> </debug-overrides>
内容的提问来源于stack exchange,提问作者Nishant Mehta
相关产品推荐
相关产品推荐

