Прежде чем приступить к сборке с использованием поддерживаемых расширений 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" сообщает системе, что при запуске действия оно должно запускаться в определенном режиме.
Это свойство имеет следующие значения:
-
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED(только OpenXR)
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
Приложения, созданные с помощью OpenXR, запускаются в режиме Full Space и должны использовать режим запуска 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>
недвижимость PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED
Свойство 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>
Функции PackageManager для приложений XR
При распространении приложений через Google Play Store вы можете указать требуемые аппаратные или программные функции в манифесте приложения. Элемент uses-feature позволяет Play Store соответствующим образом фильтровать приложения, показываемые пользователям.
Следующие функции характерны для приложений, дифференцированных по XR.
android.software.xr.api.openxr
Приложения, предназначенные для платформы Android XR и созданные с использованием OpenXR или Unity, должны включать эту функцию в манифест приложения, при этом атрибут android:required должен быть установлен в true .
Приложениям, использующим пакет Android XR Extensions Package для 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
Эта функция указывает, что для корректной работы приложению требуются входные данные от высокоточного контроллера движения с шестью степенями свободы (DoF). Если ваше приложение поддерживает контроллеры и не может работать без них, установите значение 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: