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

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

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

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

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

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