Android XR 是 Android 平台和生态系统的扩展。Android XR SDK 旨在让您能够使用熟悉的 Android 框架和工具或使用 OpenXR 和 WebXR 等开放标准构建 XR 应用。所有兼容的移动设备或大屏幕应用都将可从 Play 商店安装到 XR 头显上。查看兼容性注意事项,了解您的应用是否兼容。
本指南介绍了以下方面:
- 选择开发工具和技术
- 为 Android XR 设计应用
- 配置应用的清单文件
- 应用清单兼容性注意事项
- 了解 Android XR 的权限
- 确保 Android XR 应用质量
- 打包和分发适用于 Android XR 的应用
选择您的开发工具和技术
构建 Android XR 应用时,您可以从以下开发平台和技术中进行选择:
Jetpack XR SDK
Jetpack XR SDK 包含 Android XR Jetpack 库,旨在充分利用 XR 设备的独特功能。如果您要执行以下任一操作,请先使用此 SDK:
- 优化或增强现有的 Android 移动应用或平板电脑应用
- 使用 Android Studio 和 Jetpack 构建新的 Android XR 应用
如果您已经熟悉使用 Android Jetpack 进行开发,那么 Jetpack XR SDK 非常适合您。它旨在与这些框架和库无缝集成,让您能够利用现有知识构建沉浸式 XR 体验。
Unity
Unity Engine 是一款实时 3D 开发引擎,可让艺术家、设计师和开发者协作打造沉浸式互动体验。借助 Unity 的 Android XR 支持,您可以对自己开发的 3D 体验进行高度控制,同时受益于 Unity 成熟的 OpenXR 支持和开发者生态系统。
如果您已经使用 Unity 构建了 XR 体验,或者熟悉 Unity 开发,请先从此选项开始。
详细了解如何使用 Unity for Android XR 进行开发。
OpenXR
OpenXR 是一项免版税的开放标准,可用于构建高性能的多平台 XR 体验。Android XR 支持 OpenXR 1.0 和 1.1,我们正在通过为 Android XR 添加新扩展来扩展该规范。由于 Android XR 基于开放标准构建,因此支持 OpenXR 和 Android 的开发工具应与 Android XR 兼容。
WebXR
借助 WebXR,您可以为 Web 构建沉浸式体验。它可让您在兼容的网络浏览器(例如 Android XR 上的 Chrome)中访问 VR 和 AR 设备。
如果您想为 Web 构建 XR 体验,或者想向 Web 应用添加 XR 功能,请先从此选项开始。现有的 WebXR 体验也适用于 Android XR。
针对 XR 进行设计
XR 将设计表面扩展到了传统平面屏幕之外;您可以设计融合了真实和虚拟现实的沉浸式体验。无论您是构建全新体验,还是向现有应用添加沉浸式元素,Android XR 设计指南都可以帮助您入门。
配置应用的清单文件
与其他 Android 应用项目一样,您的 Android XR 应用必须包含具有特定清单设置的 AndroidManifest.xml 文件。该清单文件会向 Android 构建工具、Android 操作系统和 Google Play 描述有关应用的基本信息。如需了解详情,请参阅应用清单概览指南。
对于差异化 XR 应用,您的清单文件必须包含以下元素和属性:
PROPERTY_ACTIVITY_XR_START_MODE 属性
android:name="android.window.PROPERTY_ACTIVITY_XR_START_MODE"
属性可让系统知道在启动 activity 时应以特定模式启动 activity。
此属性有以下三个可能的值:
XR_ACTIVITY_START_MODE_HOME_SPACE
(仅限 Jetpack XR SDK)XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED
(仅限 Jetpack XR SDK)XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
(仅限 OpenXR)
XR_ACTIVITY_START_MODE_HOME_SPACE
(仅限使用 Jetpack XR SDK 构建的应用)
使用此启动模式可在 Home Space 中启动应用。在主屏幕空间中,多个应用可以并排运行,以便用户同时处理多项任务。任何移动设备或大屏 Android 应用都可以在 Home Space 中运行,使用 Jetpack XR SDK 构建的 XR 应用也可以。
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_HOME_SPACE" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED
(仅限使用 Jetpack XR SDK 构建的应用)
使用此启动模式可在全屏模式下启动应用。在全空间模式下,一次只能运行一个应用,没有空间边界,所有其他应用都会隐藏。
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
(仅限使用 OpenXR 构建的应用)
使用 OpenXR 构建的应用会在全空间中启动,并且必须使用 XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
启动模式。向 Android XR 发送的未管理全空间信号,应用使用 OpenXR。
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
适用于 XR 应用的 PackageManager 功能
通过 Google Play 商店分发应用时,您可以在应用清单中指定所需的硬件或软件功能。借助 uses-feature
元素,Play 商店可以适当地过滤向用户显示的应用。
以下功能仅适用于 XR 应用。
android.software.xr.immersive
如果您的应用以 Android XR 平台为目标平台,并且仅在支持 XR 的平台上运行,请将此值设置为 true。如果您的应用具有一些针对 XR 设备进行了优化的功能,但也可以在非 XR 设备上运行,请将此值设为 false。
使用 OpenXR 或 Unity 构建的应用必须将此值设置为 true。
<uses-feature android:name="android.software.xr.immersive" android:required="true" />
android.hardware.xr.input.controller
此功能表示应用需要高精度 6DoF(自由度)动作控制器的输入才能正常运行。如果您的应用支持控制器,并且无法在没有控制器的情况下正常运行,请将此值设置为 true。如果您的应用支持控制器,但无需控制器即可正常运行,请将其设置为 false。
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />
android.hardware.xr.input.hand_tracking
此标志表示应用需要高保真度手部跟踪才能正常运行,包括用户手部关节的位置、方向和速度。如果您的应用支持手部跟踪,并且无法在没有手部跟踪的情况下正常运行,请将该值设置为 true。如果您的应用支持手部跟踪,但无需手部跟踪也可以正常运行,请将其设为 false。
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />
android.hardware.xr.input.eye_tracking
此标志表示应用需要高保真度眼动跟踪,才能正常运行输入功能。如果您的应用支持使用眼动跟踪进行输入,并且无法在没有眼动跟踪的情况下正常运行,请将该值设置为 true。如果您的应用支持使用眼动跟踪进行输入,但无需眼动跟踪也能正常运行,请将其设置为 false。
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />
移动应用和大屏设备应用的应用清单兼容性注意事项
如适用于 XR 应用的 PackageManager 功能部分所述,应用通过在应用清单的 <uses-feature>
元素中声明功能来声明其使用该功能。某些功能(例如电话或 GPS)可能不适用于所有设备。
不支持的功能
Google Play 商店会使用以下 Android 功能声明过滤可在设备上安装的应用。
相机硬件
android.hardware.camera.autofocus
android.hardware.camera.capability.manual_post_processing
android.hardware.camera.capability.manual_sensor
android.hardware.camera.capability.raw
android.hardware.camera.concurrent
android.hardware.camera.external
android.hardware.camera.level.full
连接
android.hardware.ipsec_tunnel_migration
设备配置
外形规格配置
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
输入
android.software.input_methods
位置信息
近距离无线通信
安全配置和硬件
android.hardware.se.omapi.uicc
android.hardware.biometrics.face
android.hardware.identity_credential
android.hardware.identity_credential_direct_access
android.hardware.keystore.limited_use_key
android.hardware.keystore.single_use_key
android.hardware.strongbox_keystore
传感器
android.hardware.sensor.accelerometer_limited_axes
android.hardware.sensor.accelerometer_limited_axes_uncalibrated
android.hardware.sensor.ambient_temperature
android.hardware.sensor.barometer
android.hardware.sensor.gyroscope_limited_axes
android.hardware.sensor.gyroscope_limited_axes_uncalibrated
android.hardware.sensor.heading
android.hardware.sensor.heartrate
android.hardware.sensor.heartrate.ecg
android.hardware.sensor.hinge_angle
android.hardware.sensor.relative_humidity
android.hardware.sensor.stepcounter
android.hardware.sensor.stepdetector
软件配置
android.software.connectionservice
android.software.expanded_picture_in_picture
android.software.live_wallpaper
android.software.picture_in_picture
android.software.wallet_location_based_suggestions
电话
android.hardware.telephony.calling
android.hardware.telephony.cdma
android.hardware.telephony.data
android.hardware.telephony.euicc
android.hardware.telephony.euicc.mep
android.hardware.telephony.gsm
android.hardware.telephony.ims
android.hardware.telephony.mbms
android.hardware.telephony.messaging
android.hardware.telephony.radio.access
android.hardware.telephony.subscription
虚拟现实(旧版)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
微件
了解 XR 的权限
与移动设备和其他类型设备上的应用一样,XR 应用提供的某些功能可能需要您的应用在其 AndroidManifest 文件中声明权限。对于危险权限,您的应用可能需要请求运行时权限。如需了解更深入的信息,请参阅 Android 中的权限和权限最佳实践。
XR 功能的权限
XR 应用可能会使用以下权限。本部分中的所有权限都属于危险权限,因此您必须在应用清单中声明这些权限,并在运行时请求这些权限。
android.permission.EYE_TRACKING
需要此权限的用例
表示用户的眼部姿势和方向,以便创建头像
需要此权限的 Jetpack XR SDK 功能
不适用
需要此权限的 OpenXR 扩展程序
需要此权限的 Unity 功能
Android XR:AR 人脸
android.permission.EYE_TRACKING_FINE
需要此权限的用例
凝视输入和互动
需要此权限的 Jetpack XR SDK 功能
不适用
需要此权限的 OpenXR 扩展程序
需要此权限的 Unity 功能
android.permission.FACE_TRACKING
需要此权限的用例
跟踪和渲染面部表情
需要此权限的 Jetpack XR SDK 功能
不适用
需要此权限的 OpenXR 扩展程序
需要此权限的 Unity 功能
android.permission.HAND_TRACKING
需要此权限的用例
跟踪手关节姿势以及角速度和线速度;使用网格表示用户的手
需要此权限的 Jetpack XR SDK 功能
不适用
需要此权限的 OpenXR 扩展程序
需要此权限的 Unity 功能
android.permission.SCENE_UNDERSTANDING
需要此权限的用例
光照估算;将透视图投影到网格表面;对环境中的可跟踪对象执行光线投射;平面跟踪;对象跟踪;使用深度进行遮挡和点击测试;持久锚点。
需要此权限的 Jetpack XR SDK 功能
飞机跟踪
点击测试
锚点持久性
需要此权限的 OpenXR 扩展程序
需要此权限的 Unity 功能
确保 Android XR 应用质量
为确保您的应用提供出色的用户体验,请查看我们的 Android XR 应用质量指南。
打包和分发适用于 Android XR 的应用
Android XR 通过 Google Play 将各种应用和体验引入 XR 头戴设备。在适用于 Android XR 的应用打包和分发指南中,您可以找到有关开始使用 Play 商店和 Play 管理中心、发布轨道、准备 Android App Bundle 以及应用大小限制的信息。