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

LinuxMint下Expo+Android Studio配置问题:未知事件与Metro连接失败

解决Linux Mint下Expo无法连接Metro服务器的问题

我来帮你分析下这些问题的可能原因和对应的解决办法,毕竟我之前在Linux环境折腾Expo也踩过类似的坑:

问题根源梳理

从你给出的日志来看:

  • 第一个Unrecognized event提示是Expo客户端和Metro服务器之间的通信格式不匹配,大概率是隧道模式下的网络传输异常导致的(看manifest里的hostType":"tunnel");
  • 后续的Network Error和Cannot connect to the Metro server则直接指向网络连通性问题。
    而且你提到Windows下正常、新建RN项目能运行,说明Android Studio和React Native的基础环境是没问题的,问题就出在Expo的网络配置或者Linux的网络限制上。

具体解决步骤

1. 优先切换到LAN模式(替代Tunnel模式)

Tunnel模式依赖Expo的远程中转服务器,Linux下的网络环境(比如防火墙、代理)很容易干扰这种连接,换成LAN模式直接走本地局域网会稳定很多:

  • 关闭当前运行的Expo服务,重新启动时执行:
    expo start --lan
    
  • 启动后复制终端里显示的LAN地址(比如exp://192.168.1.100:19000),在Android模拟器的Expo Go app里输入这个地址尝试连接。

2. 开放Linux Mint防火墙的Metro端口

Linux默认的ufw防火墙可能拦截了Metro使用的端口(默认19000、19001,同时需要TCP和UDP协议),手动开放这些端口:

# 临时开放端口(重启后失效)
sudo ufw allow 19000/tcp
sudo ufw allow 19001/tcp
sudo ufw allow 19000/udp
sudo ufw allow 19001/udp

# 如果需要永久生效,加上--permanent参数
sudo ufw allow 19000/tcp --permanent
sudo ufw allow 19001/tcp --permanent
sudo ufw allow 19000/udp --permanent
sudo ufw allow 19001/udp --permanent

# 重启防火墙使设置生效
sudo ufw reload

3. 检查并释放Metro端口占用

有时候其他程序会占用19000端口,导致Metro无法正常启动:

  • 查看端口占用情况:
    lsof -i :19000
    # 或者用netstat
    netstat -tulpn | grep 19000
    
  • 如果查到占用的进程,用PID杀掉它:
    kill -9 <进程PID>
    
  • 或者直接指定其他端口启动Expo:
    expo start -p 19002
    

4. 修复Android模拟器的网络映射

如果模拟器和主机的局域网连通有问题,可以用adb做端口映射绕开网络限制:

  • 确保adb已经连接上模拟器,执行:
    adb reverse tcp:19000 tcp:19000
    
  • 然后在Expo Go里输入exp://localhost:19000尝试连接。

5. 更新依赖并清除缓存

版本兼容问题也可能导致这类异常,更新Expo CLI和项目依赖,同时清除Metro缓存:

# 更新全局Expo CLI
npm install -g expo-cli@latest

# 进入项目目录更新依赖
npm install

# 清除Metro缓存后重启服务
expo start --clear

额外提示

先从切换LAN模式开始尝试,这个操作最简单,也是解决这类问题最有效的方法。如果还是不行,再依次检查防火墙、端口和模拟器配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:17:30