React Native Android 模拟器打开 DevTools 时应用退出怎么办?
结论
Ctrl + M 和 adb shell input keyevent 82 都可以尝试打开 React Native Android 开发菜单。npx react-native log-android 显示 Running "ReactNativeProject",只能说明 React Native JS 曾经启动,无法据此判断应用退出的原因,因为这条输出没有提供足够的原生崩溃信息。
先确认应用是否确实崩溃,再查看 Android 日志。你提供的 package.json 中,react-native 版本是 ^0.83.1,多个 @react-native/* 包和 @react-native/new-app-screen 则是 0.82.1。版本不一致不一定会导致应用退出,但建议确认这些包是否与项目使用的 React Native 版本兼容。
先确认菜单按键是否触发退出
启动应用,让它保持在模拟器前台,然后在终端执行:
adb devices
adb shell input keyevent 82
82 是 Android 的菜单键。如果执行命令后应用回到桌面或消失,记下时间并继续抓取原生日志。如果只有 Ctrl + M 会导致应用退出,先单独用 adb shell input keyevent 82 复现,以便区分模拟器快捷键和应用本身的问题。
抓取 Android 原生日志
在 Windows 命令提示符中,清空旧日志后复现问题,再筛选崩溃信息:
adb logcat -c
adb shell input keyevent 82
adb logcat -d -v time | findstr /i "AndroidRuntime FATAL EXCEPTION ReactNative"
查看 FATAL EXCEPTION、AndroidRuntime 和 Caused by 后面的异常信息。也可以在 Android Studio 的 Logcat 中选择对应的模拟器和应用进程,然后复现问题并查看错误。
如果没有崩溃堆栈,检查应用是否只是退到了后台,并确认复现时目标模拟器已连接、应用处于前台:
adb devices
npx react-native log-android 显示的 JS 启动信息不足以代替 adb logcat 提供的原生日志。
核对 React Native 相关依赖
检查实际安装的版本,而不只是 package.json 中的版本范围:
npm ls react-native @react-native/babel-preset @react-native/metro-config @react-native/typescript-config @react-native/eslint-config @react-native/new-app-screen
如果项目使用 React Native 0.83.x,请核对 Babel preset、Metro 配置、TypeScript 配置、ESLint 配置和新应用示例包是否与该版本匹配。根据项目模板和包的兼容要求调整依赖后,重新安装依赖并构建 Android 应用。版本号不同本身不能确定根因,还需要结合 Logcat 中的异常判断。
如果 Logcat 没有明确异常,请进一步检查复现时的 FATAL EXCEPTION 或相关原生错误日志,并结合模拟器的 Android 版本排查。现有信息不足以确定是哪项配置导致应用退出。
备注:内容仅供参考。
