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

修改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模式运行:

  1. 用openssl生成Metro专用的SSL证书(PEM格式)
  2. 启动Metro时指定HTTPS参数:
npx react-native start --https --key ./path/to/your/ssl-key.pem --cert ./path/to/your/ssl-cert.pem
  1. 将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:40:11