修改AndroidManifest.xml后React Native加载脚本失败求助
问题根源
你的网络安全配置里设置了cleartextTrafficPermitted="false",完全禁用了明文流量,但React Native调试阶段,Metro打包服务器默认通过**明文HTTP(8081端口)**向App提供JS脚本,这直接被你的安全规则拦截,导致脚本加载失败。
解决方法
方案1:给调试相关域名添加明文流量例外(推荐调试阶段使用)
修改network_security_config.xml,针对Metro调试用到的本地域名放行明文流量,不影响业务接口的HTTPS配置:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <!-- 全局默认禁用明文流量,信任自定义CA和系统CA --> <base-config cleartextTrafficPermitted="false"> <trust-anchors> <certificates src="@raw/test_rootca_certificate"/> <certificates src="system"/> </trust-anchors> </base-config> <!-- 允许调试用的本地域名使用明文流量 --> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">localhost</domain> <domain includeSubdomains="true">10.0.2.2</domain> <!-- 安卓模拟器访问宿主机的默认地址 --> <domain includeSubdomains="true">127.0.0.1</domain> </domain-config> </network-security-config>
方案2:配置Metro使用HTTPS服务(适合全链路HTTPS场景)
如果不想放行明文流量,可以让Metro以HTTPS模式运行:
- 用openssl生成Metro专用的SSL证书(PEM格式)
- 启动Metro时指定HTTPS参数:
npx react-native start --https --key ./path/to/your/ssl-key.pem --cert ./path/to/your/ssl-cert.pem
- 将Metro的SSL证书也添加到
network_security_config.xml的trust-anchors中,确保设备能信任该证书。
额外注意事项
- 你之前执行的
adb reverse tcp:8081 tcp:80181是端口映射错误,正确的反向代理命令应为adb reverse tcp:8081 tcp:8081 - 确认
test_rootca_certificate.crt是PEM格式,Android网络安全配置仅支持PEM编码的证书文件 - 打包Release版本时,可移除调试相关的明文放行规则,单独配置生产环境的网络安全策略
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

