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

Expo Go中Axios请求正常,打包成APK后无法连接FastAPI服务器

解决Expo打包APK后无法连接本地FastAPI服务器的问题

1. 确认网络权限配置

  • 检查app.json里有没有正确声明网络权限,Expo默认会加INTERNET权限,但显式指定更保险:
{
  "expo": {
    "android": {
      "permissions": ["INTERNET", "ACCESS_NETWORK_STATE"]
    }
  }
}
  • ACCESS_NETWORK_STATE不是必须,但能帮应用检测网络状态,避免因为没网导致的静默失败。

2. 验证usesCleartextTraffic的配置位置

别把usesCleartextTraffic直接放在android节点下,必须放到android.config里,不然打包后不生效:

{
  "expo": {
    "android": {
      "config": {
        "usesCleartextTraffic": true
      }
    }
  }
}

3. 配置Android网络安全策略(进阶)

如果只开usesCleartextTraffic还是不行,就自定义网络安全配置,专门允许你的服务器IP走明文流量:

  1. 在项目根目录建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">192.168.1.233</domain>
        <!-- 要覆盖整个本地网段的话,加个192.168.0.0/16 -->
    </domain-config>
</network-security-config>
  1. 在app.json里引用这个配置:
{
  "expo": {
    "android": {
      "networkSecurityConfig": "@xml/network_security_config",
      "config": {
        "usesCleartextTraffic": true
      }
    }
  }
}

4. 确认请求URL没写错

  • 代码里必须用局域网内服务器的IP(比如http://192.168.1.233:8000),绝对不能用localhost或127.0.0.1——APK里的localhost指的是设备自己,不是你的电脑服务器。
  • 可以在代码里加个日志输出,确认请求的URL是不是正确的。

5. 检查服务器端的防火墙和绑定设置

  • 运行FastAPI的电脑要开放8000端口的入站连接,防火墙别拦着。
  • 启动FastAPI的时候要绑定0.0.0.0,而不是默认的127.0.0.1,命令改成:
uvicorn main:app --host 0.0.0.0 --port 8000

不然局域网里的设备根本访问不到服务器。

6. 排查设备端的限制

  • 把应用加到电池优化白名单里,别让系统在后台限制它的网络访问。
  • 看看设备有没有开VPN或代理,这些可能会拦截本地网络请求。

7. 用日志找隐藏错误

用adb logcat命令看应用的详细日志,过滤你的应用包名,能找到没显示出来的错误(比如权限被拒、连接超时):

adb logcat | grep "你的应用包名"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:30:20