Android XR — это расширение платформы и экосистемы Android. Android XR SDK разработан для того, чтобы вы могли создавать приложения 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 позволяет создавать захватывающие впечатления для веба. Он обеспечивает доступ к устройствам VR и AR в совместимых веб-браузерах, таких как Chrome на Android XR.
Начните с этого варианта, если вы хотите создать опыт XR для веба или добавить возможности XR в веб-приложение. Существующие опыты WebXR также будут работать на Android XR.
Узнайте больше о создании веб-приложений с помощью WebXR .
Дизайн для 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"
сообщает системе, что при запуске действия оно должно быть запущено в определенном режиме.
Для этого свойства возможны три значения:
-
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 несколько приложений могут работать бок о бок, поэтому пользователи могут выполнять несколько задач одновременно. Любое мобильное или широкоэкранное приложение Android может работать в Home Space, а также приложения 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>
<использует-родную-библиотеку> OpenXR
(Приложения, созданные только с помощью OpenXR)
Приложения OpenXR должны объявить об использовании собственной библиотеки OpenXR для успешной загрузки среды выполнения. Без этого объявления среда выполнения не сможет загрузиться.
<manifest ... >
<application ... >
<uses-native-library android:name="libopenxr.google.so" android:required="true" />
<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
. Если ваше приложение создано специально для устройств с поддержкой XR и публикуется в специальной версии Android XR, то вам следует установить атрибут android:required
на 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
Эта функция указывает, что для корректной работы приложению требуется ввод с высокоточного контроллера движения с 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" />
Вопросы совместимости манифеста приложения для мобильных и больших экранов
Как описано в разделе Функции 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.разрешение.FACE_TRACKING
Отслеживание и визуализация выражений лица.
Jetpack XR SDK
н/д
Расширения OpenXR
Возможности Unity
android.разрешение.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. и зарегистрированы в качестве товарного знака в Китае, Европейском Союзе, Японии и Великобритании.