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

Expo新项目在Android模拟器运行报错:未注册main及权限问题

Expo新项目Android14模拟器报错原因分析与解决办法

问题概况

新初始化的Expo应用在Android 14模拟器运行时触发两个错误:

  1. Error: Exception in HostObject::get for prop 'NativeUnimoduleProxy': java.lang.SecurityException: Permission Denial: registerScreenCaptureObserver from pid=10391, uid=10192 requires android.permission.DETECT_SCREEN_CAPTURE, js engine: hermes
  2. ERROR Invariant Violation: "main" has not been registered

对比表现:

  • Android 11物理设备通过Expo App扫码可正常运行
  • 旧Expo项目在Android 14模拟器和Android 11真机均正常
  • 仅新项目在Android 14模拟器出现报错

核心原因分析

  1. Android14权限限制引发Native层异常
    Android 14新增了DETECT_SCREEN_CAPTURE权限的强制校验,Expo新版本模板默认集成了涉及屏幕捕获检测的模块(如expo-screen-capture或依赖它的基础模块),但模拟器环境下权限申请流程未被正确处理,导致Native层初始化失败,抛出SecurityException。

  2. Native层异常连锁导致JS层注册失败
    第一个错误中断了NativeUnimoduleProxy的初始化,进而导致JS侧模块加载流程异常,最终无法完成AppRegistry.registerComponent("main")的调用,触发"Invariant Violation"错误——这是Native层问题引发的连锁反应,并非单纯的Metro目录或代码调用错误。

旧项目能正常运行,是因为使用的Expo SDK版本较低,未引入需要DETECT_SCREEN_CAPTURE权限的模块,避开了Android14的权限校验限制。

解决步骤

  1. 适配Expo SDK版本
    如果使用的最新版SDK存在适配bug,可降级到对Android14支持稳定的版本(如SDK 49):
npx expo install expo@^49.0.0

或升级到最新修复版SDK,确保官方已修复Android14权限适配问题。

  1. 手动添加权限到AndroidManifest
    生成原生项目文件后手动声明权限:
  • 执行npx expo prebuild生成Android原生目录
  • 打开android/app/src/main/AndroidManifest.xml,添加权限声明:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
  • 重新运行npx expo run:android
  1. 移除不必要的屏幕捕获模块
    如果项目不需要防截屏功能,直接卸载相关模块:
npx expo uninstall expo-screen-capture

之后清理缓存重新启动项目:npx expo start --clear

  1. 清理缓存与模拟器状态
  • 清理Metro缓存:npx expo start --clear
  • 在Android模拟器中卸载应用,进入应用信息页面清除缓存,重启模拟器后重新安装运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:37:24