React Native无法通过Metro运行Android应用,求配置排查方法
React Native Metro 连接问题排查与配置说明
一、先排查基础操作问题
- 确认Metro服务器正常运行:启动后看终端是否有
Metro is running on port 8081的提示,要是没启动或中途崩溃,肯定连不上 - 重置adb反向代理:先执行
adb reverse --remove-all清空旧代理,再重新跑adb reverse tcp:8081 tcp:8081,有时候代理会莫名失效 - 测试网络连通性:在模拟器里打开浏览器,访问
http://localhost:8081/debugger-ui,能打开说明设备和Metro网络通,打不开先解决网络问题
二、build.gradle 核心配置检查
1. 项目根目录 build.gradle
确认React Native版本和本地安装的一致,版本不匹配也会导致连接异常:
buildscript { ext { buildToolsVersion = "33.0.0" minSdkVersion = 21 compileSdkVersion = 33 targetSdkVersion = 33 // 这里的版本号要和本地package.json里的react-native版本对应 reactNativeVersion = "0.72.0" } // 其他配置... }
2. app模块下的 build.gradle
重点检查debug构建变体的配置,确保调试模式没被禁用:
android { buildTypes { debug { // 必须设为true,否则原生层不会开启调试连接逻辑 debuggable true // 用Hermes的话,debug模式加这个参数开启源码映射,方便调试 hermesFlags = ["-O", "-output-source-map"] } } dependencies { implementation "com.facebook.react:react-native:${reactNativeVersion}" // 其他依赖... } }
3. 配置的运作逻辑
React Native在debug模式下启动时,原生代码会自动尝试连接本地8081端口的Metro服务器:
debuggable true是核心开关,开启后才会触发调试连接逻辑- adb反向代理是把设备的8081端口映射到电脑的8081端口,让设备能访问电脑上的Metro服务
- 如果修改了默认Metro端口,还要同步修改adb反向代理的端口,以及原生代码里的端口配置
三、其他可能影响的文件
- 删除
android/app/src/main/assets/index.android.bundle:这个是离线bundle包,要是存在,debug模式下App会直接加载本地bundle,不会去连Metro,debug环境下删掉即可 - 暂时禁用Flipper:如果集成了Flipper调试工具,部分版本可能拦截Metro连接,先注释掉
ReactNativeFlipper.java里的相关配置试试
内容的提问来源于stack exchange,提问作者Fapi
相关产品推荐
相关产品推荐

