You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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快速入门指南,执行以下命令创建项目:
    npx create-expo-app AwesomeProject
    cd AwesomeProject
    
    成功创建新的React Native项目。
  • 在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

  1. 执行命令更新项目依赖:
    npm install
    
  2. 在Expo终端按下r键,重新将Expo Go安装到AVD中,确保设备中的Expo Go版本与项目依赖兼容。

方案4:检查AVD系统版本

确保AVD使用的Android系统版本为API 30(Android 11)或更高版本,过旧的系统镜像可能存在权限兼容问题,建议更换符合要求的系统镜像重新创建AVD。

内容的提问来源于stack exchange,提问作者swbergmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:01:28