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走明文流量:
- 在项目根目录建
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>
- 在
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
相关产品推荐
相关产品推荐

