使用Expo测试React Native应用时AVD崩溃,报权限及main未注册错误
问题
我想要测试/模拟一个新创建的默认React Native应用,但在VS Code的Expo终端中打开Android虚拟设备(AVD)时,出现两个未捕获错误:
ERROR Error: Exception in HostObject::get for prop 'NativeUnimoduleProxy': java.lang.SecurityException: Permission Denial: registerScreenCaptureObserver from pid=7315, uid=10197 requires android.permission.DETECT_SCREEN_CAPTURE
ERROR Invariant Violation: "main" has not been registered.
错误复现步骤
- 按照React Native官方文档的Expo Go快速入门指南,执行以下命令创建项目:
成功创建新的React Native项目。npx create-expo-app AwesomeProject cd AwesomeProject - 在VS Code终端执行命令启动服务器:
服务器启动成功。npx expo start - 启动Android Studio,打开虚拟设备管理器,成功启动新建的Pixel 7设备,AVD正常显示预期界面。
- 回到VS Code的Expo终端,按下
a键通过Expo打开Android虚拟设备模拟:a - 焦点自动切换到AVD,完成“bundling 100%”后,AVD上显示上述两条未捕获错误,同时VS Code的Expo终端也显示对应错误信息。
解决方案
方案1:清除Expo缓存
在终端执行清除缓存并重启服务器:
npx expo start --clear
清除缓存后重新连接AVD,通常能解决“main未注册”这类缓存相关问题。
方案2:添加屏幕捕获权限
针对DETECT_SCREEN_CAPTURE权限错误,在项目根目录的app.json或app.config.js中添加权限声明:
{ "expo": { "android": { "permissions": ["android.permission.DETECT_SCREEN_CAPTURE"] } } }
保存配置后重启Expo服务器。
方案3:更新依赖并重新安装Expo Go
- 执行命令更新项目依赖:
npm install - 在Expo终端按下
r键,重新将Expo Go安装到AVD中,确保设备中的Expo Go版本与项目依赖兼容。
方案4:检查AVD系统版本
确保AVD使用的Android系统版本为API 30(Android 11)或更高版本,过旧的系统镜像可能存在权限兼容问题,建议更换符合要求的系统镜像重新创建AVD。
内容的提问来源于stack exchange,提问作者swbergmann
相关产品推荐
相关产品推荐

