Administrator
发布于 2026-08-25 / 29 阅读
0
0

系列文章《Android 工程师的 100 篇进阶笔记》第 81 篇:Android XR:扩展现实的应用形态与开发入门

前言

2024 年底开始,Android XR(基于 OpenXR 与 Android XR Platform)开始在三星、vivo、Lenovo 等 Android XR 头显上商用。Apple Vision Pro 把 XR 推到了消费品高地,Android 阵营必须有自己的形态。本篇聊 XR 的工程基线、ARCore 与 XR 工程的差异,以及 App 工程师如何开始上手。

一、XR 的形态划分

类型

设备

显示方式

用途

VR

Quest、Vision Pro

全封闭头显

沉浸游戏、3D 建模

AR

手机、平板眼镜

透明或半透明

现实增强、导航

MR

Vision Pro、Quest 3

内外混合

虚拟与现实融合

Spatial

Galaxy XR、Spatial Computing

三维多屏

跨设备空间延伸

Android XR 主要支持前三种。第一阶段对应手机和平板,第二阶段对应头显。

二、Android XR Platform 是什么

Google 在 2024 年末推出的统一 XR 平台:

  • 承接 Android XR SDK

  • 包含 Spatial UI 框架(空间界面设计系统)

  • 兼容 OpenXR 应用

  • 与 Android 14+ 设备深度集成

开发者写一次代码,可以跑在手机、平板、XR 头显上——前提是用 Android XR 框架的 API。

三、ARCore:手机端 XR 的基础

ARCore 是 Google 的 AR SDK,Android XR Platform 的"低配版本"。它做:

  • 平面检测(Plane Detection)

  • 运动跟踪(Motion Tracking)

  • 环境理解(Environment Understanding)

  • 图像识别(Augmented Images)

  • 光照估计(Light Estimation)

  • 深度感知(Depth)

// build.gradle.kts
implementation("com.google.ar:core:1.50.0")

ARCore 在 Android 上通过 GL / Sceneform / Filament 三种方式渲染。

3.1 Sceneform 已停止维护

Sceneform 在 2021 年停止维护。现在主流用:

方案

适合

难度

Filament

高级 3D 场景渲染

中

SceneView (Khronos Group)

Sceneform 替代品

中

Direct OpenGL ES

极致自定义

高

AR Sceneform-EQR

社区 fork

低

新工程强烈推荐 SceneView——它是 Sceneform 的现代开源继任者。

3.2 ARCore 入门示例:平面检测

class ArActivity : AppCompatActivity() {
    private lateinit var glSurfaceView: GLSurfaceView
    private val session: Session by lazy {
        Session(this)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_ar)

        glSurfaceView = findViewById(R.id.gl_view)
        glSurfaceView.preserveEGLContextOnPause = true

        if (!ArCoreApk.getInstance().checkAvailability(this).isSupported) {
            finish()
            return
        }

        session.configure(
            Config(session).apply {
                planeFindingMode = Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL
                lightEstimationMode = Config.LightEstimationMode.AMBIENT_INTENSITY
                updateMode = Config.UpdateMode.LATEST_CAMERA_IMAGE
            }
        )
    }

    override fun onResume() {
        super.onResume()
        try {
            session.resume()
        } catch (e: CameraNotAvailableException) {
            finish()
        }
    }
}

这个 Activity 还不能看到东西——还需要渲染层(Renderer)。

3.3 Renderer 与 OpenGL 渲染

完整示例需要:

  • BackgroundRenderer:渲染相机画面

  • PlaneRenderer:渲染检测到的平面

  • ObjectRenderer:放置 3D 模型

class ArRenderer(val activity: Activity) : GLSurfaceView.Renderer {
    private val session = ArCoreSessionHelper(activity)
    private val backgroundRenderer = BackgroundRenderer()
    private val planeRenderer = PlaneRenderer()

    override fun onSurfaceCreated(gl: GL10?, config: EGLConfig?) {
        GLES20.glClearColor(0f, 0f, 0f, 1f)
        backgroundRenderer.createOnGlThread(session.session!!)
        planeRenderer.createOnGlThread(session.session!!)
    }

    override fun onDrawFrame(gl: GL10?) {
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT or GLES20.GL_DEPTH_BUFFER_BIT)
        session.setCameraTextureName(backgroundRenderer.textureId)
        val frame = session.update()
        backgroundRenderer.draw(frame)
        // 渲染平面、放置物体
    }
}

完整代码大约 300-500 行。

四、Android XR 与 Jetpack Compose XR

Google 正在把 XR 集成到 Compose 生态。Compose XR 提供:

  • Spatializer:自适应布局

  • SpatialPanel:把 Compose UI 渲染到 3D 空间

  • SpatialPointer / SpatialDraggable:三维手势识别

@Composable
fun SpatialScreen() {
    SpatialBox {
        SpatialPanel(
            position = Vec3(0f, 0f, -2f),
            size = DpSize(300.dp, 200.dp)
        ) {
            Text("Hello XR", fontSize = 28.sp)
        }
    }
}

虽然现在还是实验性 API,但是 Compose 工程师转 XR 的桥梁已经搭好。

五、XR 开发关键挑战

5.1 性能优化

XR 应用对帧率要求 90fps(VR)或 60fps(AR):

  • 避免主线程 I/O

  • 模型压缩到 5MB 以内

  • 用 LOD(Level of Detail)

  • 减少 OpenGL 切换

5.2 设备碎片

设备

支持特性

备注

ARCore supported phones

平面检测、图像识别

90% Android 旗舰

Galaxy XR

全部 XR 特性

头显专用

Quest 3

独立头显

与 Android XR 兼容

App 要在"普通 Android 设备"和"XR 头显"之间切换能力。用 PackageManager.hasSystemFeature("android.hardware.xr") 检查。

5.3 UX 设计

XR 应用的 UX 与 2D 完全不同:

  • 不要做过多点击——手势操作比触控舒服

  • 距离屏幕 1.5-3 米最舒适

  • 字体比普通 App 大 2-3 倍

  • 减少动态效果——容易引发眩晕

六、XR 应用的实际落地场景

场景

典型 App

收益

室内导航

AR 实景导航

用户体验提升

远程协作

跨设备协作(多人共看)

远程办公刚需

商品展示

商品 3D 旋转展示

转化率 +20%

工业培训

设备操作模拟

培训成本减半

沉浸游戏

VR/AR 游戏

用户黏性

如果要落地商业项目,建议从"室内导航"或"3D 商品展示"这种小闭环场景开始。

七、Android XR 未来的能力

  1. AI 物体识别:通过 LLM/VLM 实时识别摄像头里的物体

  2. 多模态输入:语音 + 眼动 + 手势

  3. 跨设备 Continuity:从手机继续到 XR 头显

  4. 真实感渲染:基于 Filament 的 PBR 渲染 + 实时全局光照

  5. Spatial Audio:3D 空间音频与虚拟声源

  6. Holographic Note:把信息悬浮在物理空间中

八、App 工程师上手 XR 的三个步骤

  1. 跑通官方示例:Google 的 ARCore Samples(GitHub)有 Java / Kotlin / ComposeXR / SceneView 多种版本

  2. 挑一个应用场景:比如"试鞋 AR"、"眼镜试戴",先做一个能跑的 demo

  3. 熟悉 Filament 或 SceneView:3D 渲染的引擎

不要直接上手头显开发——从手机 AR(用 ARCore)开始,迁移成本低很多。

小结

Android XR 2026 年还在早期,但已经具备开发能力。对工程师来说:会 Compose、有 3D 基础、懂一点图像学,就能开始上手。商业收益最大的方向是 AR 导航、AR 试穿、AR 协作这几个具体场景。

下一篇聊应用市场审核——App 上架这件事的完整流程,包括国内和海外市场差异、被拒原因、紧急应对策略。

参考阅读

  • ARCore 官方文档

  • Filament / SceneView 文档

  • Android XR 开发者论坛


评论