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

Android原生模块(Rust开发)无法访问10.0.2.2以外网络的问题

排查方案:Rust原生模块接入Expo Android后无法访问外部站点

1. 确认Network Security Config配置生效

先检查Android原生项目的配置文件是否正确部署:

  • 查看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">10.0.2.2</domain>
        <domain includeSubdomains="true">your-target-domain.com</domain>
        <!-- 添加所有需要访问的外部域名 -->
    </domain-config>
</network-security-config>
  • 核对AndroidManifest.xml的application标签,确保android:networkSecurityConfig="@xml/network_security_config"的路径和文件名无拼写错误。

2. 排查Rust原生模块的请求实现

请求由Rust模块发起,重点检查以下内容:

  • 确认使用的Rust网络库(如reqwest、hyper)没有硬编码代理或请求地址限制,比如是否默认仅允许访问10.0.2.2;
  • 给Rust请求添加日志输出,打印具体错误信息(如连接超时、DNS解析失败、证书校验错误),直接定位问题根源;
  • 检查Cargo.toml的依赖配置,部分Rust网络库在Android环境下需要启用特定特性(如reqwest的native-tls或rustls-android)才能正常访问外部网络。

3. 同步Expo项目的权限配置

确保Expo配置与Android原生配置同步:

  • 在app.json/app.config.js中声明网络权限:
{
  "expo": {
    "android": {
      "permissions": ["INTERNET"]
    }
  }
}
  • 修改配置后执行expo prebuild(预构建模式)或重新构建项目,确保Expo将权限配置同步到Android原生工程。

4. 验证设备/模拟器的网络环境

  • 用模拟器自带浏览器打开目标外部站点,确认设备本身能正常访问外部网络;
  • 检查模拟器是否设置了代理,或真实设备是否开启VPN/代理工具,这类配置会拦截外部请求。

5. 区分HTTP与HTTPS请求场景

  • 若为HTTP明文请求:确认network security config中的域名拼写正确,includeSubdomains参数是否符合需求;
  • 若为HTTPS请求:检查目标站点证书是否被Android系统信任,部分Rust库默认严格校验证书,证书异常会直接导致请求失败。可临时关闭证书校验(仅用于测试)确认问题,再通过导入自定义证书等方式解决。

内容的提问来源于stack exchange,提问作者Ohad Dahan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:15:07