После того ��ак вы установите и настроите Android Studio, создадите проект и настроите Jetpack XR SDK, вы сможете начать создавать иммерсивные возможности для таких устройств, как XR-шлемы и проводные XR-очки.
Прежде чем начать изучать все способы создания приложений, ознакомьтесь с информацией и выполните все задачи в следующих разделах, чтобы убедиться, что ваше приложение настроено для разработки иммерсивной 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_HOME_SPACE(только Jetpack XR SDK)XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED(только Jetpack XR SDK)
XR_ACTIVITY_START_MODE_HOME_SPACE
Используйте этот режим, чтобы запустить приложение в главном пространстве. В главном пространстве можно запускать несколько приложений одновременно. В главном пространстве могут работать любые приложения для Android для мобильных устройств и больших экранов, а также XR-приложения, созданные с помощью Jetpack XR SDK.
<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
Используйте этот режим, чтобы запустить приложение в полном пространстве. В полном пространстве одновременно работает только одно приложение, у которого нет границ, а все остальные приложения скрыты.
<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>
Свойство 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>
Функции PackageManager для XR-приложений
При распространении приложений через Google Play вы можете указать в манифесте приложения требования к аппаратному или программному обеспечению. Элемент uses-feature позволяет Google Play фильтровать приложения, которые показываются пользователям.
Следующие функции доступны только для приложений, оптимизированных для XR.
android.software.xr.api.spatial
Приложения, созданные с помощью Jetpack XR SDK, должны включать эту функцию в манифест приложения. Значение атрибута android:required зависит от типа версии приложения.
Если ваше приложение содержит функции или контент для XR в существующем APK-файле для мобильных устройств и опубликовано через тип версии для мобильных устройств, задайте для атрибута android:required значение false:
<!-- If you are publishing an existing mobile APK using the mobile release track, set android:required to false.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="false" />
Если ваше приложение создано специально для устройств с поддержкой XR и опубликовано через отдельный тип версии для Android XR, задайте для атрибута android:required значение true:
<!-- If you are publishing a separate APK for XR using the dedicated Android XR release track, set android:required to true.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="true" />
android.hardware.xr.input.controller
Эта функция указывает, что для правильной работы приложения требуется ввод данных от высокоточного контроллера движения с шестью степенями свободы. Если приложение поддерживает контроллеры и не может работать без них, установите значение 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" />
android.hardware.xr.input.face_tracking
Этот флаг указывает, что для корректной работы приложения требуется оборудование для отслеживания лица. Если ваше приложение поддерживает отслеживание лиц и не может работать без него, задайте значение true. Если приложение поддерживает отслеживание лица, но может работать и без него, задайте значение false.
<!-- Sets android:required to true, indicating that your app can't function on devices without face tracking. -->
<uses-feature android:name="android.hardware.xr.input.face_tracking" android:required="true" />
Особенности совместимости манифеста приложения для мобильных устройств и устройств с большим экраном
Как описано в разделе Функции PackageManager для приложений XR, приложения заявляют, что они используют функцию, объявляя ее в элементе <uses-feature> в манифесте приложения. Некоторые функции, например телефония или GPS, могут быть совместимы не со всеми устройствами.
Чтобы получить список функций, включенных для устройства, выполните команду adb
shell pm list features.
Неподдерживаемые функции
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
Местоположение
Связь малого радиуса действия (NFC)
Настройки безопасности и аппаратное обеспечение
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
Виджеты
Дальнейшие действия
Вы настроили манифест приложения и ознакомились с важной информацией. Теперь узнайте, как создавать иммерсивные возможности.
- Как перенести приложение Android в 3D с помощью XR
- Разработка пространственного интерфейса с помощью Jetpack Compose для XR
- Как реализовать Material Design в пространственном интерфейсе
- Как добавить пространственные среды в приложение
- Создание объектов и управление ими