Android XR — это расширение платформы и экосистемы Android. Пакет SDK для Android XR предназначен для разработки XR-приложений с использованием привычных фреймворков и инструментов Android или открытых стандартов, таких как OpenXR и WebXR. Все совместимые мобильные или широкоэкранные приложения будут доступны для установки на гарнитуры XR из Play Store. Ознакомьтесь с разделом «Совместимость», чтобы убедиться, что ваше приложение совместимо.
В этом руководстве объясняются следующие области:
- Выбор инструментов и технологий разработки
- Разработка приложений для Android XR
- Настройка файла манифеста вашего приложения
- Вопросы совместимости манифеста приложения
- Понимание разрешений для Android XR
- Проверка качества приложения Android XR
- Упаковка и распространение вашего приложения для Android XR
Выберите инструменты и технологии разработки
При создании приложения для Android XR вы можете выбрать одну из следующих платформ и технологий разработки:
Jetpack XR SDK
Jetpack XR SDK содержит библиотеки Android XR Jetpack , созданные для использования уникальных возможностей устройств XR. Начните с этого SDK, если вы хотите выполнить одно из следующих действий:
- Оптимизируйте или улучшите существующее мобильное или планшетное приложение Android
- Создайте новое приложение Android XR с помощью Android Studio и Jetpack
Если вы уже освоили разработку с помощью Android Jetpack, то Jetpack XR SDK — идеальный выбор. Он легко интегрируется с этими фреймворками и библиотеками и позволяет использовать имеющиеся знания для создания захватывающих XR-приложений.
Узнайте больше о разработке с помощью Jetpack XR SDK .
Единство
Unity Engine — это движок для разработки 3D-контента в реальном времени, позволяющий художникам, дизайнерам и разработчикам совместно создавать захватывающие и интерактивные проекты. Поддержка Android XR в Unity обеспечивает высокий уровень контроля над создаваемыми 3D-контентом, а также позволяет использовать преимущества развитой экосистемы разработки и поддержки OpenXR в Unity.
Если у вас уже есть опыт XR, созданный с помощью Unity, или вы знакомы с разработкой в Unity, то начните с этого варианта.
Узнайте больше о разработке с помощью Unity для Android XR .
OpenXR
OpenXR — это бесплатный открытый стандарт, который можно использовать для создания высокопроизводительных кроссплатформенных XR-приложений. Android XR поддерживает OpenXR 1.0 и 1.1, и мы расширяем спецификацию новыми расширениями для Android XR. Поскольку Android XR основан на открытых стандартах, инструменты разработки, поддерживающие OpenXR и Android, должны быть совместимы с Android XR.
Узнайте больше о поддержке OpenXR для Android XR .
WebXR
WebXR позволяет создавать захватывающие веб-приложения. Он обеспечивает доступ к устройствам виртуальной и дополненной реальности в совместимых веб-браузерах, таких как Chrome на Android XR.
Начните с этого варианта, если вы хотите создать XR-приложение для веба или добавить возможности XR в веб-приложение. Существующие WebXR-приложения также будут работать на Android XR.
Узнайте больше о создании веб-приложений с помощью WebXR .
Дизайн для XR
XR расширяет возможности дизайна за пределы традиционных плоских экранов; вы можете создавать захватывающие приложения, сочетающие физическую и виртуальную реальность. Независимо от того, разрабатываете ли вы совершенно новый интерфейс или добавляете иммерсивные элементы в существующее приложение, руководство по дизайну для Android 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_FULL_SPACE_UNMANAGED
(только OpenXR)
XR_ACTIVITY_START_MODE_HOME_SPACE
(Только приложения, созданные с помощью Jetpack XR SDK)
Используйте этот режим запуска для запуска вашего приложения в Home Space. В Home Space несколько приложений могут работать одновременно, что позволяет пользователям выполнять несколько задач одновременно. В 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
(Только приложения, созданные с помощью Jetpack XR SDK)
Используйте этот режим запуска для запуска приложения в режиме Full Space. В режиме Full Space одновременно работает только одно приложение, без ограничений по пространству, а все остальные приложения скрыты.
<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, запускаются в режиме 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 должны декларировать использование собственной библиотеки OpenXR для успешной загрузки своей среды выполнения. Без этого декларации среда выполнения не загрузится.
<manifest ... >
<application ... >
<uses-native-library andro id: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.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.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" />
Вопросы совместимости манифеста приложения для мобильных приложений и приложений с большими экранами
Как описано в разделе «Функции PackageManager для приложений XR» , приложения заявляют об использовании той или иной функции, указывая её в элементе <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 могут использовать следующие разрешения. Все разрешения в этом разделе считаются опасными, поэтому их необходимо объявить в манифесте приложения и запрашивать во время выполнения.
android.permission.EYE_TRACKING_COARSE
Отображает положение глаз пользователя, его статус и ориентацию, например, для использования в аватарах. Используйте это разрешение, когда требуются данные отслеживания движения глаз с низкой точностью.
Jetpack XR SDK
н/д
Расширения OpenXR
Возможности Unity
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_COARSE
Оценка освещенности; проецирование сквозного луча на поверхности сетки; выполнение лучевых передач по отслеживаемым объектам в окружающей среде; отслеживание плоскости; отслеживание объекта; постоянные якоря.
Jetpack XR SDK
Расширения OpenXR
Возможности Unity
android.permission.SCENE_UNDERSTANDING_FINE
Глубинная текстура.
Jetpack XR SDK
н/д
Расширения OpenXR
Возможности Unity
Проверьте качество приложения Android XR
Чтобы убедиться, что ваше приложение обеспечивает отличный пользовательский опыт, ознакомьтесь с нашими рекомендациями по качеству приложений для Android XR .
Упакуйте и распространите свое приложение для Android XR
Android XR предлагает широкий выбор приложений и возможностей для гарнитур XR через Google Play. В руководстве по упаковке и распространению приложений для Android XR вы найдете информацию о начале работы с Play Store и Play Console, публикации треков, подготовке наборов приложений для Android и ограничениях на размер приложений.
OpenXR™ и логотип OpenXR являются товарными знаками компании Khronos Group Inc. и зарегистрированы в качестве товарных знаков в Китае, Европейском Союзе, Японии и Великобритании.