使用Kotlin为Meta Quest构建你的第一个Android应用
Kotlin
(映维网Nweon 2025年12月26日)Meta一直在积极邀请开发者为Meta Horizon OS打造创新、沉浸式的体验。例如,Horizon Start开发者大赛就提供了总金额达150万美元的奖金。然而,开发者斯里扬克·悉达塔(Sriyank Siddhartha)认为目前市场缺乏使用Kotlin为Quest设备开发应用的优质系统教程。大多数相关教程都是基于其他技术栈,所以他希望填补Android/Kotlin开发者进入VR领域的教程空白,并在分享相关的知识:

灵感来源:我看到Meta正在举办一场开发者竞赛,特别为Android开发者提供了150万美元的现金奖励。然而,当时没有很好的使用Kotlin为Quest开发的教程。因此,我决定花时间进行实验,开发一个能在模拟器和Quest设备运行的简单Android应用。希望你会喜欢。
想象一下,如果你的下一个Android应用不仅能运行在手机上,还能悬浮在虚拟现实的3D空间中,会怎样?
你是一名Android开发者。你懂Kotlin,精通Jetpack Compose,而且Android Studio已经在你的屏幕打开。令人兴奋的地方来了:你已经掌握了为Meta Quest开发VR应用所需技能的80%。无需游戏引擎,无需学习C++,无需从零开始。我们可以利用现有的Android开发技能为Quest构建应用。
Meta Quest设备采用基于Android开源项目直接构建的HorizonOS。这意味着你现有的技能、工具甚至代码库,只需进行极少的改动,就可以部署给数百万的Quest用户。进入门槛?比你想象的要低。
为什么Android开发者应该关注Quest
熟悉的领域,新的前沿:使用你每天都在用的Jetpack Compose框架,用Kotlin编写应用。通过ADB部署,用Android Studio调试,打包成APK。Meta的Spatial SDK本身就是基于Kotlin的,让VR开发感觉像在家一样熟悉。
即时应用移植性:将你现有的移动应用作为2D浮动面板在Quest运行。然后,再按照自己的节奏,用VR功能逐步增强它:空间音频、手部追踪、3D环境。
未开发的受众:Quest生态系统正在快速增长,通过Meta Horizon商店、应用内购、订阅和广告提供了新的营收机会。你的Android应用可以在一个全新的计算范式中触达用户。
在本教程中你将实现的目标
完成本教程后,你将:
使用Android Studio和Meta的官方工具设置完整的Quest开发环境。
使用Jetpack Compose构建并部署你的第一个“Hello Quest”应用。
在模拟器和(可选的)物理Quest设备,看到你的Android代码在VR中运行。
了解如何针对VR面板显示优化2D Android应用。
获得基础,以便在后续教程中探索空间功能和沉浸式3D体验。
时间投入:45–60分钟
设备要求:我们将使用模拟器。作为福利,我会展示应用在Meta Quest头戴设备的效果。
我们开始吧。
设置你的开发环境
已经安装了Android Studio?太好了!你已经完成了一半。只需添加Meta插件,你就能在VR中编码了。
步骤0:安装Android Studio
所需条件:Android Studio Narwhal Feature Drop 2025.1.2。
Android Studio依然是你的主要IDE;这一点没有变化。你将使用你已熟悉的相同SDK管理器、AVD模拟器和调试工具。
如果尚未安装,请从developer.android.com/studio下载并运行安装程序。
步骤1:安装Meta Horizon Android Studio插件
这是关键所在。Meta的官方插件添加了Quest专用模板、兼容性检查,并对不支持的库提出主动警告,为你节省大量后续调试时间。
如何安装:
在Android Studio中,转到文件>设置>插件。
在Marketplace中搜索”Meta Horizon”。
点击带有Meta徽标的插件进行安装。
重启Android Studio。
或者,你也可以直接从JetBrains Marketplace一键安装。

为什么Android开发者喜欢它:这个插件会自动flag头显无法使用的Google Play依赖项(如地图、位置服务)和不支持的权限。不再有运行时意外。
你会看到什么:重启后,会出现一个欢迎对话框,并且在右侧边栏会出现一个新的Meta Horizon工具窗口。

如果已经打开任何项目,你还会注意到Android Studio右侧有一个新的Meta Horizon工具窗口(或工具栏图标)。这表示插件已激活。如果需要,以后可以通过插件菜单启用/禁用它。

步骤2:设置Meta Quest开发者中心
可以把MQDH看作是功能更强大的、专为VR设计的ADB。尽管你可以使用命令行ADB,但MQDH为你提供了可视化的设备管理、实时logcat、屏幕投射和一键应用部署功能。
MQDH是一个非常方便的工具,可以在工作时与Android Studio一起打开。例如,你可以从Android Studio运行应用,同时通过MQDH查看日志输出或投射屏幕。这个中心使Quest的开发比单独使用命令行工具方便得多,同时更“开发者友好”。
MQDH能做什么:
将Quest的显示画面投射到你的显示器上(无需佩戴头戴设备进行测试)
实时查看设备日志(比命令行logcat更好)
为演示捕获截图和录制VR会话
拖放式APK安装(无需输入adbinstall命令)
准备就绪后,直接将构建版本上传到Meta Horizon商店
如何安装:
从developers.meta.com/horizon/downloads下载。
选择Windows或macOS版本并运行安装程序。
启动MQDH并使用你的Meta开发者帐户登录(使用Facebook登录是免费的)。

启动时,MQDH窗口应如下所示:

Android开发者视角:如果你曾将Firebase Console或Play Console与Android Studio一起使用,这就是相同的工作流程。MQDH处理设备管理,而你在Android Studio中编码。
步骤3:为Quest测试设置Android模拟器
没有Quest头戴设备?没问题。Android XR模拟器允许你无需硬件即可测试Quest 2D应用。尽管它无法模拟完整的VR沉浸感,但对于测试布局、交互和基本功能而言足够完美。
设置步骤:
A.安装所需的SDK工具:
在Android Studio中,转到工具>SDK管理器。
切换到SDK工具标签页。
勾选以下框:
AndroidSDK构建工具
Android模拟器(v36.2.12或更高版本)
AndroidSDK平台工具
点击确定安装。

B.安装XR系统镜像:
切换到SDK平台标签页。
勾选显示包详细信息。
在Android14.0下,选择:
GooglePlayXRIntelx86_64SystemImage(Windows)
GooglePlayXRARM64v8aSystemImage(macOS)
点击确定安装。

C.创建XR模拟器:
打开AVD管理器(工具>设备管理器)。
点击创建设备。
选择XR外形规格,然后选择XRHeadset配置文件。
选择你刚刚安装的GooglePlayXR系统镜像。
点击完成。


很好,模拟器准备好了!
免责声明:Meta Quest设备不支持Google API功能。任何使用了谷歌地图、位置或分析API的Quest应用在实际Quest设备都将无法运行;它会崩溃并迫使你使用Meta推荐的替代解决方案。所以,我们在这个XR头戴设备模拟器上测试应用时,会避免使用相关的API。
重要提示:在特定Windows配置,模拟器可能会导致系统变慢。启动模拟器前请保存你的工作。
构建并运行一个Hello Quest应用
我们的时刻到了!你将编写标准的Kotlin代码,使用Jetpack Compose,像部署任何其他Android应用一样部署它,并看到它悬浮在VR头戴设备内部的3D空间中。纯粹的Android开发。
你将构建什么
一个显示带有表情符号和变化背景颜色的趣味知识的“Fun Facts”应用。每次点击都会循环显示不同的事实并随机改变背景颜色;简单、直观,非常适合测试VR交互。这是我们将要构建的内容。
步骤1:创建一个新项目
启动Android Studio并点击新建项目。
选择你的模板:
从手机和平板电脑类别中选择空活动。
点击下一步。

配置你的项目:
名称:Hello Quest
包名:com.droidcon.helloquest(或你自己选择)
最低SDK:API26(Android8.0Oreo)或更高
构建配置语言:KotlinDSL(build.gradle.kts)—推荐

点击完成。
Android Studio会使用MainActivity.kt文件和基本的Compose设置来搭建你的项目。
Android开发者视角:这与创建任何其他Android应用完全相同;不需要特殊的VR模板。魔法发生在部署到Quest时,而不是在项目创建期间。
步骤2:编写FunFacts应用代码
打开MainActivity.kt并用以下完整实现替换所有模板代码:
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { // (1) super.onCreate(savedInstanceState) setContent { FunFactApp() // Set the content of this Activity to our composable UI } }}@Composablefun FunFactApp() { // (2) // Lists of emojis and facts to display val emojis = listOf("🧽", "🤖", "🎮", "🧠") val facts = listOf( "Quest has a built-in web browser for surfing in VR.", "You can sideload custom apps on Quest using ADB.", "The Guardian system maps your play area.", "Quest supports hand tracking without controllers!" ) // Remember the current index and background color as state var index by remember { mutableStateOf(0) } var bgColor by remember { mutableStateOf(randomColor()) } // Main UI container: full-screen box with dynamic background color Box( // (3) modifier = Modifier .fillMaxSize() .background(bgColor), contentAlignment = Alignment.Center ) { // Column to hold emoji, fact text, and button, centered with spacing Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(24.dp) ) { // Emoji text (large) Text( text = emojis[index % emojis.size], fontSize = 64.sp ) // Fun fact text Text( text = facts[index], fontSize = 22.sp, fontWeight = FontWeight.Bold, color = Color.White, modifier = Modifier.padding(horizontal = 24.dp) ) // Next Fact button Button(onClick = { // (4) // On button click, show next fact and change background color index = (index + 1) % facts.size bgColor = randomColor() }) { Text("Next Fun Fact") } } }}// Helper function to pick a random color from a set of predefined colorsfun randomColor(): Color { // (5) val colors = listOf( Color(0xFF673AB7), // Purple Color(0xFF009688), // Teal Color(0xFFFF5722), // Orange Color(0xFF607D8B) // Blue Gray ) return colors[Random.nextInt(colors.size)]}我们来理解一下它的作用:
在(1)处:在onCreate中,我们调用setContent { FunFactApp() }。这告诉Android使用可组合函数FunFactApp()来设置Activity的UI。
在(2)处:在FunFactApp()内部,我们以声明方式定义UI。我们准备了两个列表:emojis和facts,每个包含四个项目。应用将显示一个表情符号和一个对应的事实(两者索引相同)。
在(3)处:我们使用一个Box,它占据整个屏幕(fillMaxSize())并将其背景设置为当前的bgColor。在方框内,我们居中放置一个Column。该列将其子项垂直排列,水平居中,每个子项之间有24dp的间距。这为我们提供了一个间距良好的堆栈:表情符号、事实文本和按钮。
在(4)处:最后一个子项是Button。当用户点击它时(onClicklambda),我们更新状态:增加索引(使用模运算在最后一个事实后回到0)并将bgColor设置为新的随机颜色。
在(5)处:在底部,我们定义了randomColor(),它只是从一小组预定义颜色值中随机选择一种颜色返回。
现在你已经用我们的应用代码替换了模板代码,下面我们运行应用程序。
步骤3:在Android模拟器运行
启动你的应用:
在Android Studio的工具栏中,点击设备选择下拉菜单(运行按钮旁边)。
选择你之前创建的XR头戴设备模拟器。
点击绿色的运行按钮(▶)。
你的应用现在正在模拟器运行。预期结果:你应该看到一个彩色屏幕,包含:
顶部一个大表情符号。
下面有一段白色趣味事实文本:“Quest has a built-in web browser for surfing in VR/Quest有一个用于在VR中冲浪的内置网络浏览器”
底部有一个“Next Fun Fact/下一个有趣事实”按钮。
一个随机选择的彩色背景。
启用鼠标和键盘控制
XR模拟器目前仅支持鼠标和键盘输入。在你与应用交互之前,需要激活输入控制。XR模拟器目前仅支持鼠标和键盘;不支持触摸或控制器模拟。
如何启用:
在模拟器窗口右侧寻找工具栏。
点击键盘和鼠标图标以启用鼠标和键盘输入。
键盘图标应高亮显示,表示控件已激活。

现在你可以交互了:将鼠标移到模拟器窗口;你会看到指针出现在虚拟空间中。
点击“Next FunFact”按钮多次。查看表情符号和文本在所有4个事实中循环,同时背景颜色随机变化。
福利:像在Quest头戴设备中一样环顾四周
AndroidXR模拟器将你的应用呈现在3D虚拟空间中,模拟它如何出现在Quest头戴设备内部。你可以使用右侧工具栏中的控件模仿自然的头部运动:

平移:点击十字箭头图标并拖动鼠标来上下左右移动视图。
推拉:使用带箭头的放大镜图标进行缩放。
旋转:点击旋转图标模拟向左或向右转头。
重置视图:使用全屏箭头图标立即返回到默认的正面视图。
在XR模拟器中启用模拟透视模式
为了模拟Meta Quest设备可用的混合现实体验,AndroidXR模拟器包含一个透视模式开关。你可以从模拟器的侧边工具栏激活它。

当启用时,模拟器会将默认背景替换为模拟的室内房间环境,帮助你预览你的面板在混合现实设置中(即真实世界背景+虚拟面板)的外观。

如果模拟器感觉卡顿,这是正常的;Quest物理硬件设备运行要流畅得多。如果你使用的是Windows,请在运行模拟器之前保存你的工作。
步骤4:部署到你的Quest头戴设备
现在是真正的VR体验。在实际的Quest硬件上运行能揭示你应用的真正潜力。
A.在Quest启用开发者模式
先决条件:
已与Meta Quest手机应用配对的Quest设备。
Meta开发者帐户(免费)。
步骤:
在你的手机打开Meta Quest手机应用。
点击☰汉堡菜单→设备。
选择你的Quest头戴设备。
进入头戴设备设置→开发者模式。
将开发者模式切换为开启。
B.将你的Quest设备接到电脑
插入USB-C线:将Quest连接到你的开发机器。
戴上头戴设备:你会看到一个提示:“允许USB调试吗?”
点击始终允许从此计算机调试。

验证连接:你的Quest现在应该出现在Android Studio的设备选择下拉菜单中。
故障排除:如果设备未出现,请在终端中运行adbdevices以确认ADB识别。
C.在Quest运行应用
在Android Studio中,从设备下拉菜单中选择你的Quest设备。
点击运行按钮(▶)。Android Studio将通过ADB安装APK。
戴上你的头戴设备。

你应该会看到你的应用面板漂浮在Quest主环境的你面前。
如何交互?你可以指向你的Quest控制器(或使用手部追踪)与应用交互,就像在触摸屏上一样。
你会看到什么:
你的应用显示为一个狭窄的、纵向定向的面板,漂浮在Quest主环境中。它看起来局促且像手机,尚未针对VR优化。
为什么?Android应用默认使用手机尺寸(360dp x 640dp),这在VR中感觉很小。
步骤5:为VR优化面板尺寸
令这个应用适应VR。Meta建议设置明确的面板尺寸:高度640dp×宽度1024dp。这能创造舒适、横向的浏览体验。
如何设置面板尺寸:
打开AndroidManifest.xml。
找到你的标签(应该是MainActivity)。
在activity内部添加这个子标签:
...
再次在你的Meta Quest头戴设备运行应用。
变化:
你的应用现在显示为更宽、横向的面板;更容易阅读和交互。表情符号更大,文本更易读,按钮的位置感觉更自然。
专业功能:
你可以并排启动应用的多个实例。尝试从Quest主菜单打开两次你的应用;你会看到两个面板独立漂浮,就像在桌面上进行多任务处理一样。
福利:将你的Quest显示画面投射到电脑
厌倦了每次测试都要戴上头戴设备吗?使用Meta Quest开发者中心将你的Quest显示画面投屏到你的电脑。这允许你直接在PC看到头戴设备的屏幕。
如何投屏:
启动Meta Quest开发者中心。
点击左侧边栏中的设备管理器。
确保你的Quest显示为“活动”状态。

在设备操作部分,点击投屏。

这将打开一个新窗口,显示你的Quest屏幕。你可以使用键盘环顾四周。
好处:
无需持续佩戴头戴设备进行测试。
更容易为文档截取截图。
非常适合向同事或客户演示。
注意:你依然需要使用Quest控制器或手部追踪与应用交互;投屏仅用于显示。
你已经取得的成就
恭喜你!你刚刚利用标准的Android开发技能,为Meta Quest构建并部署了一个功能完整的VR应用。VR开发的世界现在已向你敞开,你不必为了进入这个世界而学习游戏引擎或重新发明轮子。


