Обзор сборки для Android XR

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>

Свойство 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.ar

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.flash

android.hardware.camera.level.full

Связность

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Конфигурация устройства

android.hardware.ram.low

Конфигурация форм-фактора

android.hardware.type.automotive

android.hardware.type.embedded

android.hardware.type.pc

android.hardware.type.television

android.hardware.type.watch

android.software.leanback

android.software.leanback_only

android.software.live_tv

Вход

android.hardware.consumerir

android.software.input_methods

Расположение

android.hardware.location.gps

Ближняя бесконтактная связь

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Конфигурация безопасности и оборудование

android.hardware.se.omapi.ese

android.hardware.se.omapi.sd

android.hardware.se.omapi.uicc

android.hardware.biometrics.face

android.hardware.fingerprint

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.light

android.hardware.sensor.relative_humidity

android.hardware.sensor.stepcounter

android.hardware.sensor.stepdetector

Конфигурация программного обеспечения

android.software.backup

android.software.connectionservice

android.software.expanded_picture_in_picture

android.software.live_wallpaper

android.software.picture_in_picture

android.software.telecom

android.software.wallet_location_based_suggestions

Телефония

android.hardware.telephony

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.software.sip

android.software.sip.voip

Виртуальная реальность (устаревшая)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Виджеты

android.software.app_widgets

Разберитесь с разрешениями для XR

Как и в приложениях на мобильных устройствах и устройствах других форм-факторов, некоторые возможности приложений XR могут потребовать от вашего приложения декларирования разрешений в файле AndroidManifest. В случае опасных разрешений вашему приложению может потребоваться запросить разрешения во время выполнения . Подробнее см. в разделе «Разрешения на Android» и «Рекомендации по использованию разрешений» .

Приложения XR могут использовать следующие разрешения. Все разрешения в этом разделе считаются опасными, поэтому их необходимо объявить в манифесте приложения и запрашивать во время выполнения.

android.permission.EYE_TRACKING_COARSE

Отображает положение глаз пользователя, его статус и ориентацию, например, для использования в аватарах. Используйте это разрешение, когда требуются данные отслеживания движения глаз с низкой точностью.

android.permission.EYE_TRACKING_FINE

Направление взгляда для выбора, ввода и взаимодействия.

Jetpack XR SDK

н/д

Расширения OpenXR

Возможности Unity

android.permission.FACE_TRACKING

Отслеживание и визуализация выражений лица.

Jetpack XR SDK

н/д

Расширения OpenXR

Возможности Unity

android.permission.HAND_TRACKING

Отслеживание положений суставов рук, а также угловых и линейных скоростей; Использование сетчатого представления рук пользователя.

android.permission.SCENE_UNDERSTANDING_COARSE

Оценка освещенности; проецирование сквозного луча на поверхности сетки; выполнение лучевых передач по отслеживаемым объектам в окружающей среде; отслеживание плоскости; отслеживание объекта; постоянные якоря.

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. и зарегистрированы в качестве товарных знаков в Китае, Европейском Союзе, Японии и Великобритании.