React Native 正式支持 Meta Quest
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
React Native 始终致力于帮助开发者跨平台复用知识。从最初的 Android 和 iOS 支持开始,逐步扩展到 Apple TV、Windows、macOS,甚至通过 react-strict-dom 支持了 Web 平台。2021 年发布的《多平台愿景》文章勾勒了 React Native 的未来:在不分裂生态系统的前提下,适配各种新设备和形态。
在 React Conf 2025 上,我们通过宣布 React Native 官方支持 Meta Quest 设备向这一愿景迈出了关键一步。本文将重点介绍如何在 Meta Quest 上开始使用 React Native、当前支持的功能,以及开发者如何利用熟悉的工具和模式构建并发布 VR 应用。
重点详解
Meta Quest 上的 React Native

React Native apps running on Meta Quest.
Meta Quest 设备运行基于 Android 的操作系统 Meta Horizon OS。从 React Native 视角看,这意味着现有 Android 工具链、构建系统和调试工作流只需少量修改即可使用。对于已在 Android 平台开发 React Native 应用的开发者,大部分现有开发模型可直接沿用。
这与 React Native 逐步扩展到其他 Android 环境的演进路径一致。Meta Quest 并非引入新运行时或开发模型,而是基于相同的 Android 基础架构,并与 React Native 现有抽象层集成。这使得添加平台特定功能时,不会造成框架分裂或要求独立的开发方式。
Meta Quest 入门指南
本节将引导您完成 Meta Quest 上的基本开发工作流,从 Expo Go 开始,逐步过渡到开发构建和平台特定配置。
分步指南:在 Meta Quest 上运行 Expo 应用
要在 Meta Quest 上运行 Expo 应用,请创建标准 Expo 项目、启动开发服务器,并通过头戴设备上的 Expo Go 打开应用。除少量 Meta Horizon OS 特定要求外,工作流与 Android 平台完全一致。
-
在头戴设备上安装 Expo Go
Expo Go 已在 Meta Horizon Store 上架,可直接在 Meta Quest 设备安装。该工具用于开发期间的快速迭代。
-
创建(或使用)Expo 项目
如果是全新项目,请创建标准 Expo 应用,无需特殊模板:
npx create-expo-app@latest my-quest-app
cd my-quest-app -
启动开发服务器
npx expo start -
通过 Expo Go 连接 Quest
在头戴设备上打开 Expo Go,用设备摄像头扫描 Expo CLI 显示的二维码。应用将在设备的新窗口中启动,支持实时重载和快速迭代。
-
照常迭代开发
代码更改会立即反映在设备上,遵循与 Android 和 iOS 相同的编辑-刷新循环。
开发构建与原生功能
Expo Go 足以胜任早期开发和 UI 工作。当需要访问原生模块或更深度的平台集成时,则需改用开发构建。这些构建遵循标准的 Expo 开发构建流程,并直接在 Quest 设备上运行。
平台特定设置及与移动端的差异
尽管整体工作流程保持不变,但 Meta Quest 需要一些平台特定的调整。
Meta Horizon OS 项目配置
Meta Quest 应用必须满足特定要求才能正常运行并符合商店上架资格。这些要求包括平台特定的 Android 配置、产品变体(product flavors)和应用元数据。
Expo 提供了针对 Meta Horizon OS 的插件,可在构建时自动应用这些要求。使用该插件可确保项目配置符合 Meta Quest 预期,无需手动修改原生文件。
安装 expo-horizon-core 并添加到 app.json 或 app.config.js:
{
"expo": {
"plugins": [
[
"expo-horizon-core",
{
"horizonAppId": "your-horizon-app-id",
"defaultHeight": "640dp",
"defaultWidth": "1024dp",
"supportedDevices": "quest2|quest3|quest3s",
"disableVrHeadtracking": false,
"allowBackup": false
}
]
]
}
}
同时修改 orientation 值:
{
...
"orientation": "default",
...
}
在 package.json 中添加 Quest 专用脚本:
{
"scripts": {
"android": "expo run:android --variant mobileDebug",
"quest": "expo run:android --variant questDebug",
"android:release": "expo run:android --variant mobileRelease",
"quest:release": "expo run:android --variant questRelease"
}
}
在不使用 Expo 的情况下使用 React Native
Expo 是在 Meta Quest 上开始使用 React Native 的最简方式。若倾向不使用框架构建,也可直接在 Android 项目中应用所需的 Meta Horizon OS 配置。
这至少包括:
-
在
android/app/build.gradle中创建 Meta Quest 专属构建变体 -
设置
horizonAppId -
在 Android 清单文件中定义默认面板尺寸
-
声明支持的设备(例如:
quest2|quest3|quest3s) -
移除被禁止的权限
-
调整最低支持的 Android SDK 版本
-
添加运行时检查如
isHorizonDevice()和isHorizonBuild()
要了解完整变更集,可参考 expo-horizon-core 插件实现并手动复制相同配置。
无 Google Play Services 的 Android
Meta Horizon OS 基于 Android 开源项目 (AOSP) 构建,提供核心 Android 平台而不含 Google 专有服务。这意味着应用可运行在标准 Android API 上,但无法访问 Google 移动服务(如 Play Services)或 Play Store 特定集成。
针对 Meta Quest 开发时,应用应避免直接依赖 Google 服务,或在需要时提供平台特定的替代方案。
不受支持的依赖项列表详见 Meta Horizon OS 文档。
权限与设备功能
移动设备常见的某些 Android 权限和硬件假设不适用于 VR 头显。蜂窝功能(如 SMS)、特定传感器(如 GPS)以及受限权限 均不可用或被禁止。项目设置时必须显式处理这些差异。
评估库兼容性
多数 React Native 库可在 Meta Quest 上运行,但兼容性取决于库对底层平台的假设。尤其需注意依赖移动端专属硬件、触摸输入或 Horizon OS 不可用服务 的库。
通用准则如下:
-
自包含且仅依赖标准 React Native 和 Android API 的库通常无需修改即可运行
-
假设仅支持触摸输入、移动端专属硬件或 Google 移动服务的库需要适配或条件化使用
-
依赖受限权限或不可用设备功能的库不受支持
针对定位和通知等常见场景,Expo 提供了 Meta Horizon OS 的即插即用替代方案。其他库可能无需修改即可运行,或根据依赖关系需要平台特定处理。
平台感知的代码路径
同时面向 Meta Quest 和其他平台的应用应隔离平台特定行为。Meta Horizon OS 提供了运行时工具来检测应用是否在 Quest 设备上运行,从而在必要时禁用或替换不支持的功能。
import ExpoHorizon from 'expo-horizon-core';
// Check if running on a Horizon device
if (ExpoHorizon.isHorizonDevice) {
console.log('Running on Meta Horizon OS!');
}
// Check if this is a Horizon build
if (ExpoHorizon.isHorizonBuild) {
console.log('This is a Horizon build variant');
}
// Access the Horizon App ID
const appId = ExpoHorizon.horizonAppId;
console.log('Horizon App ID:', appId ?? 'Not configured');
VR 设计与用户体验考量
为头戴式显示设备设计引入了与触控移动设备不同的限制:界面在空间中渲染、需远距离观看,且交互方式涵盖更广泛的输入方法。
UI 元素通常需要更大的点击目标、增加间距以及在不同观看距离下保持可读性的排版。这些挑战类似于桌面、平板和折叠设备场景——应用在可调整大小的窗口中运行,布局需动态适应。
Meta Quest 与 Android 移动设备的主要区别在于输入方式。不同于主要依赖触摸,Meta Quest 应用通常通过控制器、手势追踪及可选键鼠控制。控制器更接近指针设备特性,其交互模式更贴近 Web 和桌面 UI,包括悬停和焦点导航机制。
React Native 的事件系统和组件模型支持这些交互模式,但应用应避免仅考虑触摸场景,需确保 UI 元素在通过指针设备控制时提供清晰焦点状态和可预测的导航路径。
综合以上考量,响应式布局和输入无关的交互成为优选方案。React Native 的布局系统和组件模型为构建舒适易用的 VR 界面奠定了坚实基础。
更多细节请查阅官方设计指南。
示例与参考资源
参考项目
延伸阅读
致谢
将 React Native 引入新平台远不止代码开发。我们衷心感谢所有贡献时间、提供反馈和支持的同行。


