Реактивный ранец SceneCore
Последнее обновление | Стабильный релиз | Кандидат на релиз | Бета-версия | Альфа-релиз |
---|---|---|---|---|
7 мая 2025 г. | - | - | - | 1.0.0-альфа04 |
Объявление зависимостей
Чтобы добавить зависимость от XR SceneCore, необходимо добавить репозиторий Google Maven в свой проект. Подробнее см. в репозитории Google Maven .
Добавьте зависимости для необходимых артефактов в файл build.gradle
вашего приложения или модуля:
классный
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha04" // Required for Java implementation "com.google.guava:listenablefuture:1.0" // Required for Kotlin implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04" }
Котлин
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha04") // Required for Java implementation("com.google.guava:listenablefuture:1.0") // Required for Kotlin implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04") }
Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .
Обратная связь
Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с уже существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав на кнопку со звёздочкой.
Более подробную информацию см. в документации по системе отслеживания проблем .
Версия 1.0
Версия 1.0.0-альфа04
7 мая 2025 г.
Выпущены androidx.xr.scenecore:scenecore:1.0.0-alpha04
и androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04
. Версия 1.0.0-alpha04 содержит эти коммиты .
Новые функции
- Обратный доступ теперь будет работать с сущностями панели без встроенных действий. Для этого необходимо указать
android:enableOnBackInvokedCallback= "true"
в манифесте Android. -
StereoSurfaceEntity
теперь поддерживает воспроизведение MV-HEVC с помощью двух новых значенийStereoMode
: MULTIVIEW_LEFT_PRIMARY и MULTIVIEW_RIGHT_PRIMARY. -
PanelEntity.setSize
иPanelEntity.getSize
теперь возвращают размеры в родительском пространстве. -
Entity.setPose
,Entity.getPose
,Entity.setScale
,Entity.getScale
,Entity.setAlpha
иEntity.getAlpha
теперь принимают новый параметрrelativeTo
, который позволяет получать/устанавливать значения относительно различных пространств. Поддерживаются значения Parent, Activity и Real World, а значение по умолчанию для этого параметра — Parent. - В
SessionExt.kt
добавлены методы расширения обратного вызова пространственной видимости для отслеживания того, когда содержимое сцены перемещается внутрь или за пределы поля зрения пользователя. - В
SpatialAudioTrack
добавленsetPointSourceParams
, позволяющий обновлять параметры после создания трека. - Добавлен новый класс Scene со ссылками на API
Scenecore
. Scene будет доступен как свойство расширения Session. Функции внутриSessionExt
перенесены в Scene, поэтому импорт потребуется скорректировать; например,SessionExt.getScene(session)
.addSpatialCapababilitiesChangedListener
вместоSessionExt.addSpatialCapabilitiesChangedListener
. - Добавлен
ActivityPose.hitTestAsync
, позволяющий проводитьhitTest
по виртуальному содержимому. - Добавлен новый тип компонента
SpatialPointerComponent
, позволяющий клиентам указывать значок, отображаемый для указателя, или отключать его. В настоящее время этот компонент можно прикрепить только к экземплярамPanelEntity
. - Представляем новую фабрику
PanelEntity
, которая принимает размеры панели в метрах или пикселях. Старая фабрикаPanelEntity
, принимавшая два параметра типа «Размер» для панели, удалена.
Изменения API
- Убрано ограничение
RequiresApi(34)
для всех пакетов Jetpack XR. Это ограничение было излишним, поскольку Jetpack XR в настоящее время доступен только на устройствах с API уровня 34 и выше. ( Iae0f8 ) - Для проектов, выпущенных с использованием Kotlin 2.0, требуется использование KGP 2.0.0 или более поздней версии ( Idb6b5 ).
- Класс
PermissionHelper
был удален. -
PanelEntity.getPixelDensity
устарел. -
PanelEntity.setPixelDimensions
иPanelEntity.getPixelDimension
удалены и заменены наsetSizeInPixels
иgetSizeInPixels
. -
Entity.getActivitySpaceAlpha
удалён. Его можно заменить наEntity.getAlpha(Space.Activity)
. -
Entity.getWorldSpaceScale
удалён. Его можно заменить наEntity.getScale(Space.REAL\_WORLD)
. - Класс Session в
SceneCore
был удален в пользу Session в XR Runtime. -
StereoSurfaceEntity
переименован вSurfaceEntity
. -
Entity.setSize
иEntity.getSize
удалены, а те же методы добавлены вPanelEntity
. -
PointSourceAttributes
был переименован вPointSourceParams
. -
SpatializerConstants.SOURCE\_TYPE\_BYPASS
переименован вSpatializerConstants.SOURCE\_TYPE\_DEFAULT
. - Доступ к сущности
PointSourceParams
был изменен с публичного на внутренний. -
AnchorEntity.create
теперь требует настройкиPlaneTrackingMode
вSession.configure()
. - Для API
SpatialUser
теперь требуется настройкаHeadTrackingMode
вSession.configure()
. - Если
ResizableComponent
не подключен, будет выдан журнал уровня INFO вместо журнала уровня ERROR. - Класс Fov теперь является обычным классом Kotlin.
- Разделите
Entity.kt
, чтобы поместить каждый конкретный тип сущности в отдельный файл. - При создании нового
PanelEntity
большинство представлений будут перенаправлены наFrameLayout
. Это упрощает использованиеLayoutInspector
с пространственными панелями. - Текущий используемый экземпляр
XrExtensions
теперь зарегистрирован на платформе, чтобы облегчить отладку приложения.
Исправление ошибок
- Добавлено исправление для предотвращения сбоя, который мог возникнуть при перемещении
PanelEntity
сMovableComponent
иAnchorPlacement
. - Исправлена ошибка, из-за которой
ResizableComponent
предоставлял устаревшие размеры в обратном вызовеonResizeStart
. - Исправлен сбой при многократном вызове метода
dispose()
JxrPlatformAdapterAxr
.
Версия 1.0.0-альфа03
26 февраля 2025 г.
Выпущены androidx.xr.scenecore:scenecore:1.0.0-alpha03
и androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03
. Версия 1.0.0-alpha03 содержит эти коммиты .
Новые функции
- Минификация Proguard теперь поддерживается для кода Jetpack XR.
Исправление ошибок
- Дополнительные исправления для поддержки минимизации Proguard для Jetpack XR SceneCore ( I4f47e )
- Обновлено правило Jetpack XR Scenecore
ProGuard
для предотвращенияAbstractMethodError
для минифицированных клиентов. ( I91a01 )
Версия 1.0.0-альфа02
12 февраля 2025 г.
Выпущены androidx.xr.scenecore:scenecore:1.0.0-alpha02
и androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02
. Версия 1.0.0-alpha02 содержит эти коммиты .
Предстоящие критические изменения, затрагивающие приложения, созданные до версии 1.0.0-alpha02
- Фабричные методы были перенесены из класса
Session
в сопутствующий метод для каждого соответствующего типа:-
Session.createActivityPanelEntity(Dimensions, String, Activity, Pose)
был удален и заменен наActivityPanelEntity.create(Session, Dimensions, String, Pose)
-
Session.createAnchorEntity(Anchor)
был удален и заменен наAnchorEntity.create(Session, Anchor)
-
Session.createAnchorEntity(Dimensions, Int, Int, Duration)
был удален и заменен наAnchorEntity.create(Session, Dimensions, Int, Int, Duration)
-
Session.createEntity(String, Pose)
был удален и заменен наContentlessEntity.create(Session, String, Pose)
-
Session.createExrImageResource(String)
был удален и заменен наExrImage.create(Session, String)
-
Session.createGltfEntity(GltfModel, Pose)
был удален и заменен наGltfModelEntity.create(Session, GltfModel, Pose)
-
Session.createGltfModelResource(String)
был удален и заменен наGltfModel.create(Session, String)
-
Session.createInteractableComponent(Executor, InputEventListener)
был удален и заменен наInteractableComponent.create(Session, Executor, InputEventListener)
-
Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean)
был удален и заменен наMovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
-
Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose)
был удален и заменен наPanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
-
Session.createResizableComponent(Dimensions, Dimensions)
был удален и заменен наResizableComponent.create(Session, Dimensions, Dimensions)
-
Session.createStereoSurfaceEntity(Int, Dimensions, Pose)
был удален и заменен наStereoSurface.create(Session, Int, Dimensions, Pose)
-
- Были удалены следующие устаревшие методы:
-
Session.canEmbedActivityPanel(Activity)
удалён. Вместо него используйтеgetSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY)
. -
Session.hasSpatialCapability(Int)
был удалён. Он был заменён на методgetSpatialCapabilities().hasCapability()
как более фрагментированный способ проверки наличия пространственных возможностей, посколькуgetSpatialCapabilities()
возвращает объектSpatialCapabilities
. -
Session.requestFullSpaceMode()
был удален и заменен наSpatialEnvironment.requestFullSpaceMode()
-
Session.requestHomeSpaceMode()
был удален и заменен наSpatialEnvironment.requestHomeSpaceMode()
-
-
Session.setFullSpaceMode(Bundle)
иSession.setFullSpaceModeWithEnvironmentInherited(Bundle)
перенесены в функции расширения. Для доступа в файлы разработчика необходимо добавить новые импорты:-
import androidx.xr.scenecore.setFullSpaceMode
-
import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
-
-
Session.setPreferredAspectRatio(Activity, Float)
перенесен в функцию расширения. Для доступа к файлам разработчика потребуется добавить новый импорт:-
import androidx.xr.scenecore.setPreferredAspectRatio
-
-
Session.getEntitiesOfType(Class<out T>)
иSession.getEntityForRtEntity(RtEntity)
перенесены в функции расширения. Для доступа к ним в файлы разработчика необходимо добавить новые импорты:-
import androidx.xr.scenecore.getEntitiesOfType
-
import androidx.xr.scenecore.getEntityForRtEntity
-
-
Session.unpersistAnchor(Anchor)
был удален -
Session.createPersistedAnchorEntity(UUID)
был удален
Известные проблемы
-
PanelEntity.setCornerRadius()
иActivityPanelEntity.setCornerRadius()
могут не вступить в силу до следующего перемещения панели. Это можно устранить, переместив панель в ее текущее положение. - При вызове
BoundsChanged
вActivitySpace
некоторыеActivityPose
могли быть обновлены неправильно. Они будут обновлены при следующем вызовеOnSpaceUpdated
вActivitySpace
Нарушения и поведенческие изменения
-
PanelEntity
иActivityPanelEntity
будут иметь радиус угла по умолчанию 32dp или меньше, если ширина или высота панели меньше 32dp.
Новые API и возможности
- Представлен
StereoSurface.CanvasShape
, который позволяет создаватьSpherical
иHemispherical
холсты для рендеринга иммерсивных медиа. -
StereoSurfaceEntity.create()
теперь принимает параметрCanvasShape
. (Этот параметр в настоящее время игнорируется, но будет использоваться в будущей версии.) -
StereoSurfaceEntity.create()
больше не принимает параметрDimensions
. Приложения должны управлять размером холста, устанавливаяCanvasShape
-
StereoSurfaceEntity
имеет элементCanvasShape
, который можно задавать динамически. -
StereoSurfaceEntity.dimensions
теперь является свойством только для чтения; для изменения размеров приложениям следует задатьCanvasShape
. -
StereoSurfaceEntity
теперь позволяет сбрасыватьStereoMode
после построения.
Другие изменения
- MinSDK для времени компиляции уменьшен до 24. Все API Jetpack XR по-прежнему требуют API 34 во время выполнения.
- Фабрика сеансов
SceneCore
(Session.create
) больше не запускает намерение получить разрешениеSCENE_UNDERSTANDING
. Вместо этого клиентское приложение должно явно запросить разрешения у пользователя, прежде чем пытаться создать якоря. Создание якоря завершится ошибкой, если пользователь не предоставит разрешение.
Исправления ошибок
-
getActivitySpacePose()
был исправлен для учета масштабаActivitySpace
путем возврата значений перевода в масштабированных метрах, а не всегда в немасштабированных метрах.transformPoseTo
теперь также использует правильные единицы для вычисления изменений координат, когдаActivitySpace
участвует в исходном или целевом объекте. - Теперь при передаче нулевого значения параметра скайбокса с помощью
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom))
скайбокс будет полностью чёрным. Чтобы вернуться к системному скайбоксу и геометрии по умолчанию, используйтеsetSpatialEnvironmentPreference(null).
Версия 1.0.0-альфа01
12 декабря 2024 г.
Выпущен androidx.xr.scenecore:scenecore-* 1.0.0-alpha01
.
Возможности первого выпуска: первый релиз Jetpack SceneCore для разработчиков, библиотеки 3D-графов сцен для создания и управления иммерсивными сценами и окружениями. Эта библиотека позволяет размещать и упорядочивать 3D-модели и панели контента относительно друг друга, а также виртуальной или реальной среды.
- SpatialEnvironment : Создавайте полностью захватывающие впечатления, используя изображение скайбокса и/или геометрию 3D-модели в качестве фона для вашей XR-сцены вашего окружения. Или включите сквозное изображение, чтобы ваша виртуальная сцена интегрировалась с реальным окружением пользователя.
- PanelEntity : добавляйте 2D-контент в 3D-сцены, встраивая стандартные макеты Android и действия в пространственные панели, которые могут перемещаться или прикрепляться к реальным поверхностям.
- GltfModelEntity : размещайте, анимируйте и взаимодействуйте с 3D-моделями в вашей сцене. SceneCore поддерживает формат файлов glTF для простой интеграции с существующими моделями.
- SpatialAudio : добавьте окружающие и точечные источники звука в вашу 3D-сцену для получения полностью иммерсивного, пространственного звука.
- StereoSurfaceEntity : SceneCore поддерживает маршрутизацию контента, отображаемого на Android Surface, для левого и правого глаза. Это может использоваться для рендеринга стереоскопического контента в формате «бок о бок» или «сверху вниз», например, стереофотографий, 3D-видео или других динамически визуализируемых пользовательских интерфейсов. Приложения должны использовать MediaPlayer или ExoPlayer для декодирования видео.
- Система компонентов: SceneCore предлагает надежную и гибкую систему компонентов для добавления возможностей к вашему XR-контенту, включая возможности для пользователей перемещать, изменять размер и взаимодействовать с моделями и панелями.
- Якорь : при включенной функции сквозного пропуска вы можете прикреплять панели и модели к реальным поверхностям, предоставляя пользователям возможность бесшовной интеграции виртуального контента в реальную среду.
- Поза пользователя: получите доступ к местоположению пользователя на виртуальной сцене, чтобы сориентировать контент относительно его положения.
- SpatialCapabilities : создавайте полностью адаптивные приложения, использующие пространственные возможности (при их наличии), такие как 3D-позиционирование содержимого пользовательского интерфейса. Более того, ваше приложение может отслеживать изменения возможностей во время выполнения, чтобы адаптировать интерфейс в зависимости от того, как пользователь использует своё устройство Android XR.
Известные проблемы
- В настоящее время для использования Jetpack SceneCore требуется minSDK 30. В качестве обходного решения добавьте следующую запись в манифест
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>
, чтобы сборка и запуск были возможны с minSDK 23. - Сеанс может стать недействительным в различных ситуациях, которые автоматически пересоздают Activity, включая изменение размера главной панели, подключение периферийных устройств и переключение между светлым и тёмным режимами. В случае возникновения проблем с недействительностью сеанса можно сделать главную панель неизменяемой, использовать динамическую панель, отключить воссоздание Activity для определённых изменений конфигурации или отключить смену тем оформления в светлом/тёмном режиме.
- Перемещаемые и изменяемые по размеру компоненты не поддерживаются в GltfEntity.
- Entity.getSize() не поддерживается в GltfEntity.
- Приложения Jetpack XR должны запрашивать разрешение
android.permission.SCENE_UNDERSTANDING
в AndroidManifest. - Создание сеанса поддерживается только на устройствах Android XR. В настоящее время при создании сеанса и попытке использовать его на устройстве, отличном от Android XR, возникнет исключение RuntimeException.
- Установка скайбокса в значение null с помощью `SpatialEnvironment.setSpatialEnvironmentPreference() не приводит к созданию сплошного чёрного скайбокса, как описано в документации. Это может привести к использованию системного скайбокса по умолчанию или отсутствию изменений в текущем скайбоксе.
- Клиентам SceneCore следует добавить
implementation(“com.google.guava:listenablefuture-1.0”)
в конфигурацию Gradle для зависимостей своего приложения. В будущем выпуске SceneCore включит эту библиотеку как зависимостьapi
поэтому клиентам не придётся явно её объявлять. - SceneCore ошибочно включает
com.google.guava:guava-31.1-android
иcom.google.protobuf:protobuf-javalite
как транзитивные зависимости. Если это приводит к ошибкам дублирования классов в вашей сборке, эти две зависимости можно безопасно исключить. - Если ваше приложение использует SceneCore и включает ProGuard, оно аварийно завершится при создании сеанса. В качестве временного решения отключите ProGuard. Подробнее о включении ProGuard см. в этом руководстве .