Android平台下刚eject的create-react-native-app启用远程调试报错
我之前在处理Expo eject后的项目时,也遇到过远程调试失败的情况,结合你的描述(eject前正常、adb reverse已执行、新旧导出项目都有问题),给你整理了几个针对性的排查和修复步骤,应该能解决问题:
排查与修复远程调试失败问题
1. 确认Metro Bundler是否正常启动
Eject之后,Expo的内置调试服务会切换为React Native原生的Metro Bundler,必须手动启动它才能进行远程调试:
- 先关闭所有后台运行的Metro进程(比如终端里的相关窗口)
- 在项目根目录执行
npm start或yarn start,等待控制台显示Loading dependency graph, done.,说明Metro已正常启动 - 重新连接设备后再尝试开启远程调试
2. 重新配置ADB反向代理并验证
有时候adb reverse命令可能没生效或者被其他操作覆盖,建议按顺序重新执行:
- 执行
adb kill-server彻底关闭ADB服务 - 重新插拔设备,执行
adb devices确认设备已被系统识别 - 执行
adb reverse tcp:8081 tcp:8081建立反向代理 - 执行
adb reverse --list查看规则列表,确保tcp:8081 tcp:8081存在其中
3. 手动指定调试服务器的局域网IP(真机调试适用)
如果是用真机调试,默认的localhost配置可能无法正确映射到你的电脑,需要手动指定局域网IP:
- 启动Metro后,按下终端里的
d键打开设备调试菜单 - 选择
Change Bundle Location,输入你的电脑局域网IP+8081端口(比如192.168.3.10:8081) - 重启远程调试功能,看是否能正常连接
4. 检查Android的明文流量配置
Android 9及以上版本默认禁止明文网络请求,而远程调试依赖明文连接,需要在配置里开启:
- 打开
android/app/src/main/AndroidManifest.xml - 在
<application>标签中添加android:usesCleartextTraffic="true",修改后如下:<application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="false" android:usesCleartextTraffic="true" android:theme="@style/AppTheme"> - 重新编译安装应用到设备上
5. 彻底清除缓存并重建项目
缓存冲突是eject后常见的问题,建议执行以下步骤清除所有缓存:
- 执行
watchman watch-del-all清除watchman缓存 - 执行
rm -rf node_modules && npm install(使用yarn的话换成rm -rf node_modules && yarn install) - 执行
npm start -- --reset-cache启动Metro并重置缓存 - 重新运行
react-native run-android安装应用
6. 检查8081端口是否被占用
如果其他程序占用了8081端口,Metro无法正常监听,会导致调试失败:
- Mac/Linux用户执行
lsof -i :8081查看占用进程 - Windows用户执行
netstat -ano | findstr :8081查看进程ID - 杀掉占用端口的进程后,重新启动Metro Bundler
内容的提问来源于stack exchange,提问作者Nathan Rice
相关产品推荐
相关产品推荐

