如何在同一安卓设备运行多个React Native应用?实操报错求助
解决同一安卓设备运行两个React Native应用的端口冲突问题
我之前也碰到过一模一样的场景——要在同一台安卓设备上跑两个RN应用,分别用不同端口启动Metro,但执行react-native run-android时总是出问题。以下是我亲测有效的解决方案:
第一步:确认Metro服务的端口绑定(你已完成,但再核对下)
确保两个应用的Metro服务分别稳定绑定到指定端口:
- 第一个应用终端执行:
npm start -- --port=8080 - 第二个应用终端执行:
npm start -- --port=8081
确认两个终端都显示Metro服务正常启动,没有端口占用报错。
第二步:启动安卓应用时明确指定对应端口
默认的react-native run-android会自动尝试连接8080端口,但如果启动命令没和对应Metro端口关联,就会出现连接失败。所以启动时要加上端口参数:
- 启动第一个应用:
react-native run-android --port 8080 - 启动第二个应用:
react-native run-android --port 8081
第三步:手动配置ADB端口转发(关键修复步骤)
有时候设备无法自动完成端口映射,需要手动执行转发命令,让设备能访问电脑上的Metro服务:
# 为第一个应用转发8080端口 adb reverse tcp:8080 tcp:8080 # 为第二个应用转发8081端口 adb reverse tcp:8081 tcp:8081
执行完这两个命令后,设备就能正确连接到对应端口的Metro服务了。
第四步:如果仍无法加载JS Bundle,手动指定地址
如果应用启动后显示“无法加载JS bundle”,可以摇晃设备打开开发者菜单,选择「Change Bundle Location」,然后输入对应端口的地址:
- 第一个应用输入:
localhost:8080/index.bundle - 第二个应用输入:
localhost:8081/index.bundle
额外注意事项
- 务必保证两个应用的包名(package name)完全不同,安卓系统不允许同一包名的应用共存,这也是容易被忽略的启动失败原因。
- 检查电脑上的8080、8081端口是否被其他进程占用,可以用
lsof -i :8080(Mac/Linux)或netstat -ano | findstr :8080(Windows)排查。
内容的提问来源于stack exchange,提问作者Vasim
相关产品推荐
相关产品推荐

