React Native Android真机启动崩溃:Fatal signal 11问题求助
以下是针对你遇到的物理设备启动崩溃(Logcat显示A/libc: Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR))但模拟器正常的常见排查方向:
NDK版本不兼容
React Native 0.64.x对NDK版本有明确要求(官方推荐21.4.7075529)。物理设备的CPU架构(如arm64-v8a、armeabi-v7a)若与当前NDK编译的库不匹配,会导致JS线程访问非法内存。检查android/build.gradle中的ndkVersion配置,确保和官方推荐版本一致,重新编译后测试。Hermes引擎缓存或编译问题
0.64.x默认启用Hermes引擎,物理设备上的Hermes字节码缓存可能损坏,或者预编译的字节码与设备架构不兼容。可以先尝试禁用Hermes:在android/app/build.gradle中设置enableHermes: false,重新打包运行。如果禁用后正常,再删除android/app/build/intermediates/hermes目录清理缓存,重新启用Hermes编译。第三方Native模块架构冲突
部分第三方依赖的Native模块可能仅针对模拟器的x86架构编译,未适配物理设备的arm架构,导致加载时内存访问错误。排查近期新增的Native依赖,逐一移除并测试,定位出问题的库后,查看该库是否提供了全架构支持,或尝试升级库版本。JS Bundle损坏
打包生成的JS bundle文件可能存在损坏,在物理设备上加载时引发内存异常。执行以下命令重新生成bundle:npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/生成完成后重新编译安装应用。
设备系统版本或硬件限制
React Native 0.64.x最低支持Android 6.0(API 23),若物理设备系统版本低于该要求,可能出现兼容性问题。另外,部分低内存物理设备在启动时内存分配不足,也会触发SIGSEGV错误,尝试在内存充足的物理设备上测试,或优化应用启动逻辑减少内存占用。
内容的提问来源于stack exchange,提问作者Oneeb Asad

