使用tabs@50模板的Expo项目运行npm run Android时崩溃报错
问题原因与解决方案
核心原因
报错中的java.lang.SecurityException: Permission Denial: registerScreenCaptureObserver requires android.permission.DETECT_SCREEN_CAPTURE是触发崩溃的根因:Expo SDK 50的tabs模板里,某个内置模块(如屏幕捕获相关模块)需要检测屏幕录制的权限,但默认配置未在AndroidManifest.xml中声明该权限,导致Native层抛出权限异常,进而阻断了JS层的组件注册流程,最终出现"main"未注册的连锁报错。
解决步骤
1. 添加缺失的权限声明
- 先运行
npx expo prebuild生成Android原生项目目录(如果尚未生成); - 打开
android/app/src/main/AndroidManifest.xml,在<manifest>标签内新增权限:<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
2. 清理缓存并重启服务
- 关闭当前运行的Metro服务器和安卓模拟器;
- 执行命令清理缓存并重启开发服务:
npx expo start --clear - 重新启动安卓模拟器,再运行
npm run android。
3. 验证Expo版本兼容性
- 检查本地Expo CLI版本是否与SDK 50匹配:
npx expo --version - 如果版本不匹配,安装对应版本的Expo CLI:
npm install -g expo-cli@^5.0.0
内容的提问来源于stack exchange,提问作者demodogo
相关产品推荐
相关产品推荐

