用途:在 Meta VR / Horizon OS 上用 Expo 开发 React Native 应用。Meta VR 上的 RN 应用以 2D 面板形式渲染,本质是 Android 开发;设备设置、ADB 等基础在其他技能中说明。
两种运行方式:Expo Go(从 Meta Horizon Store 一键安装,最快循环,纯 JS 与标准 Expo 模块迭代)与开发构建(用 expo run:android --variant questDebug 构建,应用 expo-horizon-core 配置、Horizon 分支原生库与自定义原生模块)。两者都从 Metro 加载 bundle URL 并支持保存后 Fast Refresh。经验法则:先用 Expo Go 做 UI/逻辑循环,一旦加入 expo-horizon-core、Horizon 分支库或自定义原生模块就切换到开发构建。
前置条件:头显开启开发者模式与 USB/Wi-Fi 调试,Node.js 20+,用 npx expo 调用 Expo CLI,metavr 用于设备/ADB/截图/日志。先验证设备:metavr device list。
路径 A:在头显安装 Expo Go,运行 npx expo start(Metro 在 :8081,输出 exp:// bundle URL;跨网段可用 npx expo start --tunnel),再通过深链 metavr adb shell am start -a android.intent.action.VIEW -d "exp://<LAN-IP>:8081"、手动输入 URL 或扫码打开。注意 Expo Go 要求 SDK 匹配,配置插件设置不生效,不支持 Horizon 分支/自定义原生模块。
路径 B:安装 expo-horizon-core 与 expo-dev-client,在 app.json 添加配置插件(horizonAppId、defaultHeight、defaultWidth、supportedDevices 等),执行 npx expo prebuild --clean,配置 quest/mobile 产品风味构建脚本,用 yarn quest 构建安装 dev client。Horizon 分支库包括 expo-horizon-location、expo-horizon-notifications、expo-iap,平台代码用 isHorizonDevice() 判断。
调试可用 metavr adb logcat --follow --tag ReactNative 与 metavr capture screenshot -o screen.png。发布时 questRelease 为普通签名 Android 应用,提交 Meta Horizon Store;生产 OTA JS 更新用 EAS Update。常见问题:Expo Go SDK 不匹配、对 Expo Go 期望过高、LAN 不通、Fast Refresh 不更新、风味选错、包名不可更改。