前言
2024 年底开始,Android XR(基于 OpenXR 与 Android XR Platform)开始在三星、vivo、Lenovo 等 Android XR 头显上商用。Apple Vision Pro 把 XR 推到了消费品高地,Android 阵营必须有自己的形态。本篇聊 XR 的工程基线、ARCore 与 XR 工程的差异,以及 App 工程师如何开始上手。
一、XR 的形态划分
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 年停止维护。现在主流用:
新工程强烈推荐 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 设备碎片
App 要在"普通 Android 设备"和"XR 头显"之间切换能力。用 PackageManager.hasSystemFeature("android.hardware.xr") 检查。
5.3 UX 设计
XR 应用的 UX 与 2D 完全不同:
不要做过多点击——手势操作比触控舒服
距离屏幕 1.5-3 米最舒适
字体比普通 App 大 2-3 倍
减少动态效果——容易引发眩晕
六、XR 应用的实际落地场景
如果要落地商业项目,建议从"室内导航"或"3D 商品展示"这种小闭环场景开始。
七、Android XR 未来的能力
AI 物体识别:通过 LLM/VLM 实时识别摄像头里的物体
多模态输入:语音 + 眼动 + 手势
跨设备 Continuity:从手机继续到 XR 头显
真实感渲染:基于 Filament 的 PBR 渲染 + 实时全局光照
Spatial Audio:3D 空间音频与虚拟声源
Holographic Note:把信息悬浮在物理空间中
八、App 工程师上手 XR 的三个步骤
跑通官方示例:Google 的 ARCore Samples(GitHub)有 Java / Kotlin / ComposeXR / SceneView 多种版本
挑一个应用场景:比如"试鞋 AR"、"眼镜试戴",先做一个能跑的 demo
熟悉 Filament 或 SceneView:3D 渲染的引擎
不要直接上手头显开发——从手机 AR(用 ARCore)开始,迁移成本低很多。
小结
Android XR 2026 年还在早期,但已经具备开发能力。对工程师来说:会 Compose、有 3D 基础、懂一点图像学,就能开始上手。商业收益最大的方向是 AR 导航、AR 试穿、AR 协作这几个具体场景。
下一篇聊应用市场审核——App 上架这件事的完整流程,包括国内和海外市场差异、被拒原因、紧急应对策略。
参考阅读
ARCore 官方文档
Filament / SceneView 文档
Android XR 开发者论坛