开始使用 Android XR 的 OpenXR

适用的 XR 设备
本指南可帮助您为这些类型的 XR 设备打造体验。
XR 头戴设备
有线 XR 眼镜

在开始使用受支持的 OpenXR 扩展程序或受支持的引擎进行构建之前,请查看以下部分中的信息并完成所有任务,以确保您的应用已配置为进行沉浸式 XR 开发。

配置应用的清单文件

与其他 Android 应用项目一样,Android XR 应用必须具有包含特定清单设置的 AndroidManifest.xml 文件。清单文件会向 Android 构建工具、Android 操作系统和 Google Play 描述有关应用的基本信息。如需了解详情,请参阅应用清单概览指南

对于 XR 差异化应用,清单文件必须包含以下元素和属性:

PROPERTY_XR_ACTIVITY_START_MODE 属性

android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" 属性可让系统知道,当 activity 启动时,应以特定模式启动该 activity。

此属性具有以下值:

  • XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED(仅限 OpenXR)

XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED

使用 OpenXR 构建的应用会在全沉浸空间模式下启动,并且必须使用 XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED 启动模式。非托管 Full Space 向 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>

android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" 属性表示应用应使用特定类型的边界启动。如果您的应用旨在让用户在实体空间中四处移动,则需要指定 XR_BOUNDARY_TYPE_LARGE。指定 XR_BOUNDARY_TYPE_NO_RECOMMENDATION 不会提供有关安全边界类型的建议,因此系统会使用已在使用的类型。

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
           android:value="XR_BOUNDARY_TYPE_LARGE" />
   </application>
</manifest>

<uses-native-library> OpenXR

OpenXR 应用必须声明使用原生 OpenXR 库,才能成功加载其运行时。如果没有此声明,运行时将无法加载。

<manifest ... >

    <application ... >

    <uses-native-library android:name="libopenxr.google.so" android:required="false" />

       <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.api.openxr

以 Android XR 平台为目标平台并使用 OpenXR 或 Unity 构建的应用必须在应用清单中添加此功能,并将 android:required 属性设置为 true

如果应用使用 Android XR Extensions Package for Unity 版本 1.0.0 或更高版本或 Unity OpenXR: Android XR Package 版本 0.5.0-exp.1 或更高版本,则无需手动将此元素添加到应用清单。这两个软件包会将此元素注入到应用清单中。

设备可以为此功能指定一个版本,该版本表示设备支持的最高 OpenXR 版本。高 16 位表示主版本号,低 16 位表示次版本号。例如,如要指定 OpenXR 版本 1.1,该值应设置为 "0x00010001"

应用可以使用功能版本来指明应用所需的最低 OpenXR 版本。例如,如果您的应用需要 OpenXR 版本 1.1 支持,请声明以下功能:

<uses-feature android:name="android.software.xr.api.openxr"
    android:version="0x00010001"
    android:required="true" />

android.hardware.xr.input.controller

此功能指明应用需要来自高精度 6DoF(自由度)运动控制器的输入才能正常运行。如果您的应用支持控制器,但没有控制器便无法正常运行,请将该值设置为 true。如果您的应用支持控制器,但即使没有控制器也能运行,请将其设置为 false

<!-- Sets android:required to true, indicating that your app can't function on devices without controllers. -->
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />

android.hardware.xr.input.hand_tracking

此标志表示应用需要高保真手部追踪才能正常运行,包括用户手部关节的位置、方向和速度。如果您的应用支持手部追踪,但没有手部追踪就无法正常运行,请将该值设置为 true。如果您的应用支持手部追踪,但即使没有手部追踪也能正常运行,请将其设置为 false

<!-- Sets android:required to true, indicating that your app can't function on devices without hand tracking. -->
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />

android.hardware.xr.input.eye_tracking

此标志表示应用需要高保真眼动追踪才能正常运行。如果您的应用支持眼动追踪输入,但没有眼动追踪就无法正常运行,请将该值设置为 true。如果您的应用支持眼动追踪输入,但即使没有眼动追踪也能正常运行,请将其设置为 false

<!-- Sets android:required to true, indicating that your app can't function on devices without eye tracking. -->
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />

后续步骤

现在,您已完成应用清单的配置并查看了重要信息,接下来可以探索如何使用 OpenXR 进行构建: