Jetpack SceneCore

Создавать граф сцены Android XR с 3D-контентом и управлять им.
Последнее обновление Основная версия Релиз-кандидат Бета-версия Альфа-версия
21 октября 2026 г. 1.0.0 - - 1.1.0-alpha01

Объявление зависимостей

Чтобы добавить зависимость от XR SceneCore, добавьте в проект репозиторий Google Maven. Подробную информацию можно найти в статье Репозиторий Google Maven.

Добавьте зависимости для нужных артефактов в файл build.gradle приложения или модуля:

классный

dependencies {
    implementation "androidx.xr.scenecore:scenecore:1.0.0-rc01"

    // Use to write unit tests
    testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-rc01"
}

Котлин

dependencies {
    implementation("androidx.xr.scenecore:scenecore:1.0.0-rc01")

    // Use to write unit tests
    testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-rc01")
}

Подробнее о добавлении зависимостей сборки…

Отзыв

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

Создать новую проблему

Дополнительную информацию можно найти в документации по системе отслеживания ошибок.

Версия 1.1

Версия 1.1.0-alpha01

21 октября 2026 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.1.0-alpha01". Версия 1.1.0-alpha01 содержит эти коммиты.

Изменения в API

  • Добавлены API для динамического обновления сеток (MeshBuffer.createDynamic, MeshBuffer.updateVertexData, MeshBuffer.updateIndexData и динамический конструктор CustomMesh.BuilderFromMeshData), которые позволяют обновлять данные вершин и индексов во время выполнения. (Ia1ecb)
  • Добавлены вспомогательные методы VertexLayout.getBufferIndex, позволяющие легко получить индекс буфера для заданного VertexAttribute или VertexBufferLayout. (I1a9e3)
  • Сделали CustomMesh.bounds переменной, чтобы граничная рамка могла динамически обновляться во время выполнения. (Ib0397)
  • glTF API анимации (GltfAnimation, GltfModelEntity.getAnimations и GltfModelEntity.stopAllAnimations) стали общедоступными и стабильными. Сеттер GltfAnimation.loop остался экспериментальным, а GltfAnimationStartOptions и start(options) – экспериментальными и устаревшими. (Iacdae)
  • Добавлен параметр stopAllAnimations() в GltfModelEntity, удалены параметры из GltfAnimation.start(), добавлены свойства loop и speed в GltfAnimation, а также объявлены устаревшими GltfAnimationStartOptions, start(options) и seekTo(Duration). (I53105)
  • Обновлены API GltfModelEntity, чтобы задокументировать IllegalStateException (в частности, Entity.DisposedException) при вызове удаленных объектов. I65a76f

Исправление ошибок

  • Зависимость androidx.lifecycle:lifecycle-runtime обновлена до версии 2.10.0. Эта версия необходима для запуска встроенных проверок времени выполнения жизненного цикла с AGP версии 9.5.0-alpha04 или более поздней. (I99bfd, b/556807521)
  • Улучшены kdocs, связанные с AudioOutputProvider, чтобы подчеркнуть, что его не следует повторно использовать с несколькими экземплярами ExoPlayer (I6b18e).
  • Удалены ненужные зависимости от impress в различных модулях XR. I84636c

Версия 1.0

Версия 1.0.0

21 октября 2026 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0". Версия 1.0.0 содержит эти коммиты.

Основные функции версии 1.0.0:

  • Вышла стабильная версия Jetpack XR SceneCore SceneCore позволяет размещать и упорядочивать 3D-контент, определяемый объектами, относительно друг друга и вашего окружения. С помощью SceneCore вы можете создавать, размещать и изменять 2D-панели и 3D-модели в сценах виртуальной и смешанной реальности, указывать пространственные среды и источники пространственного звука, а также привязывать виртуальный контент к реальному миру.
  • Дополнительную информацию можно найти на обзорной странице и в документации по API.

Версия 1.0.0-rc02

7 октября 2026 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-rc02". Версия 1.0.0-rc02 содержит эти коммиты.

Исправление ошибок

  • Устранена потенциальная утечка памяти: удален метод perceptionRuntimeCache в SessionExt и выполнен рефакторинг для получения PerceptionRuntime непосредственно из экземпляра Session. (Ie35b1)
  • Устранена потенциальная утечка контекста. Для этого в нативных дескрипторах OpenXR используется applicationContext, чтобы нативная среда выполнения не содержала ссылок на контекст Activity. (Ie35b1)
  • Устранено состояние гонки в XrInstanceManager за счет внедрения надлежащей синхронизации и блокировки инициализации. (Ie35b1)
  • Исправлена ошибка в ReferenceCleaner, чтобы поддерживать отмену регистрации действий по очистке, и обеспечено явное выполнение действий по очистке Entity во время dispose(), что предотвращает повторное выполнение при сборке мусора. (Ie35b1)
  • Устранена утечка памяти в Scene. Для этого мы удалили sceneCache в SessionExt и провели рефакторинг Scene, чтобы получать экземпляр непосредственно из sessionConnectors. (Ie35b1)

Версия 1.0.0-rc01

9 сентября 2026 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-rc01". Версия 1.0.0-rc01 содержит эти коммиты.

Изменения в API

  • Добавлено в библиотеку (xr:scenecore:scenecore-openxr). (Ic49f2)
  • Удалены несколько устаревших API перед стабильным выпуском 1.0.0.

Исправление ошибок

  • Устранена утечка памяти, из-за которой система могла сохранять ссылку на действие после его удаления. (I6dcd7)

Изменения в поведении

  • Удален вывод logcat из SceneCore. (I10c3c)

Версия 1.0.0-beta02

12 августа 2026 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-beta02". Версия 1.0.0-beta02 содержит эти коммиты.

Исправление ошибок

  • toMoveEvent() возвращает null, если родительский объект был удален сборщиком мусора. (Ia7a1b)

Версия 1.0.0-beta01

15 июля 2026 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-beta01". Версия 1.0.0-beta01 содержит эти коммиты.

Изменения в API

  • API GltfAnimation и SpatialGltfModelAnimation помечены как экспериментальные. Некоторые свойства были преобразованы в геттеры. (I8d689, b/524771027)
  • Удален общедоступный фабричный метод MovableComponent.createTrackingMovable. (I00912, b/477169015)
  • Функция Session.create преобразована в функцию приостановки. (I5d27f)
  • ActivitySpace и AnchorSpace теперь расширяют общий класс SpaceEntity, который содержит общее поведение для объектов, чьи позиции контролируются системой (I506ec, b/513619219).
  • AnchorEntity переименован в AnchorSpace (Ifa95e, b/513619219).
  • Предоставляет общедоступный тестовый API SoundEffectPoolComponentTester. (I87df7, b/498104417)
  • В конструктор SurfaceEntity.Shape.Quad добавлен необязательный параметр cornerRadius, а свойство cornerRadius сделано общедоступным. Теперь разработчики могут указывать радиус угла при создании четырехугольника, чтобы отображать холсты SurfaceEntity со скругленными углами, а также запрашивать радиус существующих четырехугольников. (Ia7809, b/474681085)
  • Предоставляет общедоступные тестовые перегрузки API SpatialAudioTrackBuilderTester, SpatialAudioTrackTester и SceneCoreTestRule.getTester. (I378c6, b/496333938)
  • Добавьте специализированные переопределения toString() для ряда типов ARCore. Эти типы предназначены для предоставления разработчикам дополнительной информации в целях отладки и не должны использоваться в рабочей среде или поставляемых приложениях.

Версия 1.0.0-alpha16

17 июня 2026 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-alpha16". Версия 1.0.0-alpha16 содержит эти коммиты.

Изменения в API

  • Добавлены перегрузки для addVertexData, setIndexData и addSubset в CustomMesh.BuilderFromMeshData и CustomMesh.BuilderFromMeshBuffer. Эти перегрузки позволяют разработчикам передавать необработанные данные и параметры напрямую (например, ByteBuffer, offset, size, topology, indexOffset, indexCount), не упаковывая их в промежуточные объекты, такие как ByteBufferRegion или MeshSubset. (I84d5c)
  • Scene.requestFullSpaceMode() и Scene.requestHomeSpaceMode() переименованы в requestFullSpace() и requestHomeSpace() соответственно. Другие методы и документация, в которых упоминаются стандартный режим и режим полного пространства, были обновлены аналогичным образом. (I45751)
  • Добавлены общедоступные тестовые API PanelEntityTester и MainPanelEntityTester (I961e4).
  • Добавление свойства pointSourceParams в SoundEffectPoolComponent (I4a750)
  • Добавлен общедоступный тестовый API MovableComponentTester (I0c972).
  • Добавлен общедоступный тестовый API PointerCaptureComponentTester (Ic0d4f).
  • Добавлен общедоступный тестовый API ActivityPanelEntityTester (I837c4).
  • Добавлен общедоступный тестовый API ResizableComponentTester (I0a3a4).
  • Добавлен общедоступный тестовый API BoundsComponentTester. (Iefd53).
  • Добавлен общедоступный тестовый API SpatialMediaPlayerTester (Ia3e09).
  • Добавлен общедоступный тестовый API SpatialEnvironmentTester (Icf60f).
  • Предоставляет общедоступные тестовые API GltfModelTester и SceneCoreTestRule.getGltfModelTester. (I33fcb)
  • Предоставляет общедоступный тестовый API InteractableComponentTester. (Ia7096)
  • Предоставляет общедоступный тестовый API SurfaceEntityTester. (Ic0740)
  • Предоставляет общедоступные тестовые API GltfModelEntityTester, TestGltfModelNode и TestGltfAnimation. (I72c4d)
  • Предоставляет общедоступные тестовые API SceneTester и SceneCoreTestRule.sceneTester. (Ib4ec5)
  • Предоставляет общедоступные тестовые API PerceptionSpaceTester и SceneCoreTestRule.perceptionSpaceTester. (Icf739)
  • Предоставляет общедоступный тестовый API MeshEntityTester. (I63801)
  • Предоставляет общедоступные перегрузки тестовых API ImageBasedLightingAssetTester и SceneCoreTestRule.getTester. (I57ec4)
  • Добавлен общедоступный тестовый API TextureTester (Ia865b).
  • Добавлен общедоступный тестовый API PositionalAudioComponentTester (Icd96e).
  • Добавлен общедоступный тестовый API SpatialSoundPoolTester (Ia3531).
  • Добавлен общедоступный тестовый API SoundEffectPoolTester (If349a).
  • Предоставляет общедоступные тестовые API ActivitySpaceTester и SceneCoreTestRule.activitySpaceTester. (I2d5c2)
  • Добавлен общедоступный тестовый API SpatialWindowTester (I41837).
  • Добавлен общедоступный тестовый API AnchorEntityTester (I68404).
  • Предоставляет общедоступный интерфейс тестового API SceneCoreTestRule. (Ic72d3)
  • Добавлен класс PixelDensity, который доступен через Scene#virtualPixelDensity. Он позволяет получить аппаратное соотношение пикселей на метр для точного сопоставления физических размеров в ActivitySpace. (I0e3ac)
  • Добавлены общедоступные API для создания и рендеринга пользовательских сеток. (I7ad2f)
  • API VertexLayout был обновлен и теперь использует список VertexBufferLayout, каждый VertexBufferLayout из которых описывает атрибуты в одном буфере вершин. Это позволяет более гибко упорядочивать данные вершин, включая чередующиеся атрибуты с настраиваемыми шагами и смещениями. (Ic426b)
  • Предоставляет MovableComponent.createTrackingMovable для преобразования отслеживаемого объекта ARCore в позу относительно пространства активности. (I12249)
  • Значение по умолчанию для родительского элемента в Entity.create изменено на null. (Ic3145)
  • Entity теперь является классом, а не интерфейсом, и базовым классом для всех типов Entity. В результате этого изменения BaseEntity был удален. (I7fbc9)
  • GltfModel, ExrImage и ImageBasedLightingAsset теперь реализуют AutoCloseable, чтобы обеспечить идиоматическое управление ресурсами с помощью блока use Kotlin. (I1ac79)
  • Добавлен класс ImageBasedLightingAsset, который заменяет ExrImage для определения пространственного освещения. ExrImage больше не поддерживается и удален из общедоступного API. Вместо SpatialEnvironmentPreference теперь используется ImageBasedLightingAsset. (I6c92a)
  • Параметр skybox в SpatialEnvironment переименован в imageBasedLightingAsset, чтобы лучше отражать его назначение. Уточнено, что текстуры скайбокса должны быть включены в параметр геометрии. (I24d4a)
  • Пространственные объекты теперь используют стабильную плотность устройства для вычислений пикселей на метр на уровнях Spatial API 1 и 2, обеспечивая согласованный размер независимо от изменений плотности системного дисплея. (I37051)

Версия 1.0.0-alpha15

19 мая 2026 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-alpha15". Версия 1.0.0-alpha15 содержит эти коммиты.

Изменения в API

  • Entity.dispose() больше не является общедоступным API. Вместо вызова dispose() для экземпляров Entity приложения могут сделать экземпляры очищаемыми, установив для parent значение null и очистив все строгие ссылки на эти экземпляры. (I396c9)
  • Удалены методы set/clearOnLoadCompleteListener класса SoundEffectPool. Используйте вместо него add/removeLoadCompleteListener. (Iae78d)
  • Значение в столбце "set/clearSpatialVisibilityChangedListener" заменено на "add/removeSpatialVisibilityChangedListener". (I67dff)
  • Все методы SceneCore add/removeOnFooListener переименованы в add/removeFooListener (из названия удалено On). (Ibe50b)
  • Методы AnchorEntity.setOnOriginChangedListener и AnchorEntity.setOnStateChangedListener заменены методами add/removeFooListener, чтобы поддерживать несколько слушателей одновременно. (I13749)
  • Название "AnchorEntity.State.TIMEDOUT" изменено на "State.TIMED_OUT". (Id2b8d)
  • Мы провели рефакторинг Component API, чтобы повысить безопасность и расширяемость. Component теперь является абстрактным классом. Методы onAttach() и onDetach() теперь являются protected, чтобы предотвратить прямые вызовы. Для управления жизненными циклами компонентов используйте Entity.addComponent() и Entity.removeComponent(). (Id04e8)
  • Константы PlaneSemanticType PlaneOrientation в SceneCore перенесены из Ints в пользовательские типы. Константы ANY будут удалены. Клиентам следует явно перечислить все нужные константы или использовать новые неизменяемые константы Set .ALL. Теперь фабричный метод AnchorEntity принимает набор этих типов, а не одно значение. (Ib1033)
  • В экспериментальный Custom Mesh API добавлена поддержка скелетной анимации (скиннинга). Теперь разработчики могут анимировать пользовательские сетки, указывая boneCount при создании MeshEntity и обновляя анимацию в реальном времени с помощью MeshEntity.setBoneTransforms(). (Id8ba2, b/496692490)
  • Добавлен экспериментальный API CustomMesh. Теперь разработчики могут программно создавать и отрисовывать 3D-геометрию в своих сценах с помощью CustomMesh, MeshBuffer и MeshEntity. (I94617)
  • Контакт (androidx.xr.scenecore.SpatializerConstants.SourceType.SOURCE_TYPE_SOUND_FIELD) удален. Используйте вместо него SourceType.SOUND_FIELD. (Ia68b9)
  • Добавление компонентов пространственного звучания: PositionalAudioComponent, SoundEffectPoolComponent и SoundFieldAudioComponent (Ieda89)
  • Функция AnchorEntity.getAnchor заменена на AnchorEntity.anchor и теперь возвращает Anchor, если AnchorEntity создан из Anchor ARCore (I5c7c8).
  • Значение по умолчанию для параметра parent в фабричных методах ActivityPanelEntity, GltfModelEntity, GroupEntity, PanelEntity и SurfaceEntity изменено с ActivitySpace на null. Чтобы прикрепить объект к графу сцены и сделать его видимым, разработчики теперь должны явно задать его родительский объект во время создания экземпляра или с помощью Entity.parent = ... (Ie7cc1).

Исправление ошибок

  • SceneCore теперь автоматически возвращает экземпляры Entity, когда они становятся фантомно достижимыми. Разработчикам больше не нужно явно вызывать dispose(), чтобы освободить ресурсы. Чтобы обеспечить правильное освобождение экземпляра [Entity], разработчикам следует:
    • Отсоедините его от графа сцены, установив для parent значение null.
    • Удалить из кода все строгие ссылки на экземпляр.
    • Примечание об особых типах объектов. Для объектов, которые не могут быть родительскими (например, AnchorEntity), разработчики должны поддерживать строгую ссылку, пока экземпляр используется. Если все ссылки будут удалены, эти экземпляры станут фантомно достижимыми и будут автоматически удалены. (I83fe4)
  • Сужены правила сохранения Proguard для всех библиотек SceneCore. (I98447)

Известные проблемы

  • Если прикрепить PositionalAudioComponent к Entity с неактивным экземпляром ExoPlayer, произойдет сбой. Не вызывайте setPointSourceParams и не подключайте/отключайте компоненты пространственного звучания, когда ExoPlayer остановлен. В следующей версии проблема будет устранена.

Версия 1.0.0-alpha14

6 мая 2026 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-alpha14". Версия 1.0.0-alpha14 содержит эти коммиты.

Изменения в API

  • Типы TrackingState и VpsAvailabilityResult перенесены в androidx.xr.arcore package, а типы в androidx.xr.runtime теперь не поддерживаются. (Ic7930, b/480462213)
  • Название "Plane.Type" изменено на "PlaneType". (I8c90c, b/482675376)
  • Название "Plane.Label" изменено на "PlaneLabel". (Ic6b67, b/482675376)
  • Поддержка androidx.xr.runtime.FieldOfView прекращена. Используйте вместо него androidx.xr.runtime.math.FieldOfView. (Ia01a0, b/480233045)
  • Сервисный аккаунт Matrix4.pose переименован. Новое название: Matrix4.toPose(). Свойство pose больше не поддерживается. (I329b4, b/493383490)
  • Переименованы значения перечисления HandJointType. (Ifbc83, b/482670596)
  • Сделайте Component.onAttach и onDetach общедоступными API, чтобы разрешить пользовательские реализации Component. (I0ca1f)
  • Добавлены компоненты пространственного звучания (I39ddd, b/489421980, b/436642086, b/436642499).
  • Удалить объект из PointSourceParams. Вместо этого Entity будет использоваться напрямую с SpatialAudioTrack, SpatialSoundPool и SpatialMediaPlayer (Ib3685, b/489421980, b/436634048).
  • DeviceTrackingMode.LAST_KNOWN переименован в SPATIAL_LAST_KNOWN (с устаревшим резервным вариантом), добавлен INERTIAL_LAST_KNOWN для отслеживания 3DoF, а также добавлен TRACKING_DEGRADED в TrackingState. (Ie661c, b/445466590)
  • Прекращена поддержка функции GroupEntity. Чтобы получить объект только с базовыми функциями, вызовите Entity.create, который вернет интерфейс объекта. (I4c450, b/473867483)
  • Добавлен XrLog API. Чтобы включить ведение журнала в JetpackXR, задайте для XrLog.isEnabled значение true, а для настройки уровня ведения журнала используйте XrLog.Level. (I76a1f, b/463460895, b/487378441)

Исправление ошибок

  • Scene.keyEntity теперь по умолчанию mainPanelEntity. (I6a3ef)

Версия 1.0.0-alpha13

25 марта 2026 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-alpha13". Версия 1.0.0-alpha13 содержит эти коммиты.

Изменения в API

  • Из Session.create удален флаг unscaledGravityAlignedActivitySpace. ActivitySpace теперь всегда не масштабируется и выравнивается по гравитации. (If6f11, b/458173423)
  • Из GltfModelEntity удалены устаревшие функции setMaterialOverride и clearMaterialOverride, которые теперь вызываются для отдельных GltfModelNode. (I2e5d2)
  • В PanelEntity добавлены методы transformPixelCoordinatesToLocalPosition и transformNormalizedCoordinatesToLocalPosition. Удалены эквивалентные экспериментальные методы, которые возвращали позы вместо позиций Vector3. (Ib6960, b/460123106, b/458333591)
  • Добавлены API GltfAnimation для управления анимацией glTF в SceneCore. (I2c172, b/466065486, b/465819070, b/465818617)
  • ScenePose.activitySpacePose переименован в ScenePose.poseInActivitySpace (I8f175, b/427822261).
  • Добавлена реализация Scenecore Projected Runtime (I9c4ab, b/476440158).
  • При изменении размера объекта на главной панели он может переместиться в начало координат ActivitySpace. Единственный способ решения проблемы – вручную или программно вернуть панель в исходное положение. Эта ошибка будет исправлена в одном из следующих выпусков. (b/489427007).
  • В некоторых случаях кнопка MovableComponent может не показываться для SurfaceEntity и других типов объектов, не относящихся к панели. Если явно задать MovableComponent.size, то появится подсказка. Эта ошибка будет исправлена в одном из следующих выпусков (b/490983469).

Версия 1.0.0-alpha12

25 февраля 2026 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-alpha12". Версия 1.0.0-alpha12 содержит эти коммиты.

Известные проблемы

  • Закрепленные объекты могут перемещаться из закрепленного положения в начало пространства активности через несколько секунд.
  • При создании экземпляров SurfaceEntity может произойти сбой в работе приложений. Проблема устранена в версии androidx.xr.scenecore:scenecore-*:1.0.0-alpha13 и последующих выпусках. Обновите затронутые приложения до последних версий.

Изменения в API

  • ActivitySpace.addOnSpaceUpdatedListener и ActivitySpace.removeOnSpaceUpdatedListener переименованы в addOnOriginChangedListener и removeOnOriginChangedListener. Вместо AnchorEntity.setOnSpaceUpdatedListener теперь используется setOnOriginChangedListener. (I5d8fb)
  • В FakeEntity добавлено свойство общедоступного названия, а FakePanelEntity сделано общедоступным. (Ifa1f9)

Исправление ошибок

  • Исправлены расчеты плотности пикселей в новых образах системы (I57d04).

Версия 1.0.0-alpha11

28 января 2026 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-alpha11". Версия 1.0.0-alpha11 содержит эти коммиты.

Изменения в API

  • PerceivedResolutionResult.InvalidCameraView переименован в PerceivedResolutionResult.InvalidRenderViewpoint, так как API getPerceivedResolution теперь используют API RenderViewpoint ARCore вместо CameraViewScenePose. Это название лучше отражает новую реализацию. (I8c967, b/446989745, b/419311998)
  • Методы PanelEntity/SurfaceEntity.getPerceivedResolution теперь принимают в качестве аргумента RenderViewpoint, предоставленный разработчиком. Раньше среда выполнения произвольно выбирала RenderViewpoint, используемый при расчете воспринимаемого разрешения. (I8c967, b/446989745, b/419311998)
  • Удалены: SpatialUser, ScenePose.Head и ScenePose.CameraView. Функциональность этих API охватывается API ArDevice и RenderViewpoint в ARCore для Jetpack XR. Чтобы получить ScenePose, соответствующий голове или левому или правому глазу пользователя, разработчики могут использовать PerceptionSpace.getScenePoseFromPerceptionPose с соответствующей позой, полученной с помощью API ARCore. (I2f69c, b/446989745)

Версия 1.0.0-alpha10

3 декабря 2025 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-alpha10". Версия 1.0.0-alpha10 содержит эти коммиты.

Изменения в API

  • Добавлены transformPixelCoordinatesToPose и transformNormalizedCoordinatesToPose в PanelEntity (I462b3)
  • Добавлен вспомогательный класс Utils в среду выполнения SceneCore на основе логики в SceneCore (I570b9).

Исправление ошибок

  • Исправлена ошибка, из-за которой мог происходить сбой, когда сеанс уничтожался и получался SpatialModeChangeEvent (If44e8).
  • Исправлена ошибка, из-за которой при выходе из Activity или повторном входе в нее могло возникать исключение IllegalStateException. (Ibff1c)

Версия 1.0.0-alpha09

19 ноября 2025 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-alpha09". Версия 1.0.0-alpha09 содержит эти коммиты.

Новые функции

  • Добавляет API для получения ScenePose, который представляет собой композицию исходного положения пространства восприятия и положения относительно исходного положения пространства восприятия. (I5b50a)
  • Добавлена функция getGravityAlignedPose. Поза, выровненная по силе тяжести, игнорирует тангаж и крен вращения. (I5ae21)
  • Типы констант AnchorEntity.State изменены с Ints на подтипы State. (Ib0c49)
  • В интерфейс Entity добавлено свойство getChildren(). Обновлен жизненный цикл MainPanelEntity. (Ia69d6)

Изменения в API

  • Типы констант PointerCaptureComponent.PointerCaptureState изменены с Ints на подтипы PointerCaptureState. (Ic888a)
  • Scene.spatialCapabilities теперь имеет тип Set<SpatialCapability> вместо поля Int. Константы SpatialCapability были переименованы. (I9c109)
  • Типы констант SurfaceEntity переименованы и изменены с Ints на подтипы SurfaceEntity. (I419ed)
  • Типы констант SpatializerConstant переименованы и изменены с Ints на подтипы SpatializerConstant. (Ia0e18)
  • Типы констант TextureSampler переименованы и изменены с Ints на подтипы TextureSampler. (I44078)
  • Типы констант SpatialVisibility изменены с Ints на подтипы SpatialVisibility. (I70739)
  • Типы констант ResizeEvent.ResizeState переименованы и изменены с Ints на подтипы ResizeState. (I384d5)
  • Типы констант InputEvent переименованы и изменены с Ints на наследуемые от соответствующего включающего типа. (I82817)
  • Типы констант GltfModelEntity.AnimationState изменены с Ints на подтипы AnimationState. (I24f4e)
  • Типы констант AlphaMode переименованы и изменены с Ints на подтипы AlphaMode. (I27b56)
  • Типы констант Space изменены с Ints на подтипы Space. (I9255b)
  • ScenePose.hitTest и связанные методы теперь возвращают null, если пересечение не найдено, вместо HitTestResult с нулевым hitPosition. HitTestResult.hitPosition больше не может иметь значение NULL. (I1400a)
  • Упоминания ActivityPose заменены на ScenePose. (I7fe43)

Версия 1.0.0-alpha08

22 октября 2025 г.

Выпущены данные "androidx.xr.scenecore:scenecore-*:1.0.0-alpha08". Версия 1.0.0-alpha08 содержит эти коммиты.

Изменения в API

  • ActivityPanelEntity.moveActivity переименован в transferActivity (I273c5, b/430332856).

Исправление ошибок

  • :xr:scenecore:scenecore-spatial-rendering и :xr:scenecore:scenecore-spatial-core добавлены как зависимости реализации :xr:scenecore:scenecore (I6ab65, b/447000520).
  • Если обратиться к session.scene после завершения сеанса, возникнет исключение. (I77e6f)

Версия 1.0.0-alpha07

24 сентября 2025 г.

Выпущены androidx.xr.scenecore:scenecore:1.0.0-alpha07, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07 и androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07. Версия 1.0.0-alpha07 содержит эти коммиты.

Изменения в API

  • Свойство fixedAspectRatio переименовано в isFixedAspectRatioEnabled и стало логическим (I5c4e8, b/440588971).
  • Scenecore Имитации теперь находятся в модуле xr:scenecore:scenecore-testing. (Idd951)
  • Переименованы shouldAutoHideContent в isAutoHideContentWhileResizingEnabled и shouldAlwaysShowOverlay в isAlwaysShowOverlayEnabled (I97c36, b/432335421).
  • Обновлены константы SceneCore TextureSampler для удобства чтения, например TextureSampler.MinFilter.LINEAR теперь TextureSampler.MIN_FILTER_LINEAR (Ib159c).
  • Сеттер setKeyEntity сцены объединен с переменной keyEntity. Если задать для keyEntity объект, который нельзя переместить, например AnchorEntity, будет возвращена ошибка IllegalArgumentException, а не логическое значение false. (I62080, b/428721695, b/422215745)
  • Переменная SpatialModeChangeListener сцены заменена на setSpatialModeChangedListener. Она принимает Consumer<SpatialModeChangeEvent> вместо SpatialModeChangedListener. Теперь setSpatialModeChangedListener может принимать Executor. (I62080, b/428721695, b/422215745)
  • Удален параметр bundle из ActivityPanelEntity.startActivity (I64344, b/430332856, b/430333040).
  • Название "SpatializerConstants.SOURCE_TYPE_BYPASS" изменено на "SpatializerConstants.SOURCE_TYPE_DEFAULT". (Ifc7fe, b/422215565)
  • Добавлена константа SpatialSoundPool.PLAY_FAILED. (Ifc7fe, b/422215565)
  • В методы SpatialSoundPool.play добавлены аргументы по умолчанию. (Ifc7fe, b/422215565)
  • Удалено возвращаемое значение сеттеров в SpatialAudioTrackBuilder. (Ifc7fe, b/422215565)
  • Изменения в SurfaceEntity
    • Пользователь SurfaceEntity.CanvasShape переименовал файл "Shape"
    • Пользователь SurfaceEntity.CanvasShape.Vr180Hemisphere переименовал файл "Hemisphere"
    • Пользователь SurfaceEntity.CanvasShape.Vr360Sphere переименовал файл "Sphere"
    • Пользователь SurfaceEntity.EdgeFeatheringParams.SmoothFeather переименовал файл "RectangleFeather"
    • Пользователь SurfaceEntity.EdgeFeathingParams.SolidEdge переименовал файл "NoFeathering"
    • Пользователь SurfaceEntity.ContentSecurityLevel переименовал файл "SurfaceProtection"
    • Пользователь SurfaceEntity.ContentSecurityLevel.{values} добавил префикс SURFACE_PROTECTION_.
    • Пользователь SurfaceEntity.SuperSampling.{$values} добавил префикс SUPER_SAMPLING_.
    • Пользователь SurfaceEntity.StereoMode.{values} добавил префикс STEREO_MODE_.
    • SurfaceEntity.ContentColorMetadata.maxCLL переименован в maxContentLightLevel (I7eb5f, b/422216050, b/427529950).
  • launchActivity переименован в startActivity (I7db90, b/430332856).
  • Контакт (Scene.activitySpaceRoot) удален. Используйте вместо него Scene.activitySpace. (I05ee8, b/378706624, b/422215745)
  • configureBundleForFullSpaceModeLaunch и configureBundleForFullSpaceModeLaunchWithEnvironmentInherited переименованы в createBundleForFullSpaceModeLaunch и createBundleForFullSpaceModeLaunchWithEnvironmentInherited соответственно, перемещены в файл LaunchUtils.kt как методы верхнего уровня и принимают Session в качестве первого параметра (I64a2c, b/437186050).
  • Фабрика GroupEntity теперь возвращает тип GroupEntity вместо Entity. (I66042)

Исправление ошибок

  • Выдавать ошибку IllegalStateException, если экземпляр объекта используется после удаления. (I90990, b/427314036, b/432063442)

Версия 1.0.0-alpha06

13 августа 2025 г.

Выпущены androidx.xr.scenecore:scenecore:1.0.0-alpha06, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha06 и androidx.xr.scenecore:scenecore-testing:1.0.0-alpha06. Версия 1.0.0-alpha06 содержит эти коммиты.

Изменения в API

  • Снятие ограничений с API BaseEntity и BaseScenePose для SceneCore (88c0ff6)

Версия 1.0.0-alpha05

30 июля 2025 г.

Выпущены androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05, androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05 и androidx.xr.scenecore:scenecore:1.0.0-alpha05. Версия 1.0.0-alpha05 содержит эти коммиты.

Новые функции

  • В Panel Entities и SurfaceEntities добавлен Perceived Resolution API. (I118f6)
  • PerceivedResolution В Scene.kt добавлены методы обратного вызова, позволяющие отслеживать воспринимаемое разрешение основной панели действия в HSM. (I58084)
  • SurfaceEntity – добавлена поддержка приложения для запроса суперсемплинга во время создания. Это позволяет приложениям использовать фильтр суперсемплинга для сглаживания. (I06913)
  • В ActivitySpace добавлено свойство recommendedContentBoxInFullSpace. Она возвращает рекомендуемую область для размещения контента в режиме полного пространства. (I4cd6f)
  • Добавлен перегруженный конструктор для модификатора перемещения, который позволяет выполнять привязку. (Ic0c70)

Изменения в API

В этом выпуске в SceneCore были внесены значительные изменения API. Некоторые классы были переименованы и/или перемещены в другие модули, а большинство методов получения и установки были заменены свойствами Kotlin. До выпуска первой бета-версии мы планируем внести в API ещё несколько изменений, но они не будут такими масштабными.

  • Переименованы и/или перемещены следующие классы и интерфейсы: androidx.xr.scenecore.PixelDimensions в androidx.xr.runtime.math.IntSize2d; androidx.xr.scenecore.Dimensions в androidx.xr.runtime.math.FloatSize3d; androidx.xr.scenecore.ActivityPose в ScenePose, androidx.xr.scenecore.ContentlessEntity в GroupEntity, androidx.xr.scenecore.PlaneType в PlaneOrientation; androidx.xr.scenecore.PlaneSemantic в PlaneSemanticType. (Ifd405)(I3b622) (If534d)
  • Ряд методов задания свойств Scene стали закрытыми, поскольку они не предназначены для изменения клиентами SceneCore: activitySpace, activitySpaceRoot, mainPanelEntity, perceptionSpace, spatialCapabilities, spatialEnvironment и spatialUser. (I2f506)
  • В Entity: изменены свойства get/setParent() и setContentDescription; прекращена поддержка свойства Entity.is/setHidden(), вместо него используйте Entity.is/setEnabled. (Ibc4c6)
  • Удален класс androidx.xr.scenecore.BasePanelEntity. Вместо него используйте PanelEntity. Методы получения и установки для PanelEntity заменены свойствами. Свойство PanelEntity.size изменено с Float3dSize на Float2dSize. Удален устаревший метод androidx.xr.scenecore.PanelEntity.getPixelDimensions. Вместо него используйте getSizeInPixels. (Icc174)
  • Значение в ячейке androidx.xr.scenecore.OnSpaceUpdatedListener заменено на "Runnable". (I19308)
  • Значение в ячейке SpatialUser.getCameraViews() заменено на свойство. (Ib0cc5) Для ExrImage и GltfModel: методы create изменены на функции приостановки. Параметры создания изменены так, чтобы принимать Uri или Path вместо String. (Id8883) (I0d247), (I25706)
  • SpatialEnvironment.requestFullSpaceMode и SpatialEnvironment.requestHomeSpaceMode перенесены в Scene. Например, используйте session.scene.requestFullSpaceMode() вместо session.scene.spatialEnvironment.requestFullSpaceMode(). В addOnPassthroughOpacityChangedListener и addOnSpatialEnvironmentChangedListener теперь есть переопределения, которые принимают необязательные исполнители. (I12fe0) (I6b21e)
  • Удалены следующие устаревшие методы SpatialEnvironment: togglePassthrough, setPassthrough, setPassthroughOpacity, getPassthroughMode, getPassthroughOpacity, setSkybox и setGeometry. Также удален устаревший класс SpatialEnvironment.PassthroughMode (I927bd) (I927bd) (I927bd).
  • Следующие методы получения и установки SpatialEnvironment заменены свойствами Kotlin: getCurrentPassthroughOpacity(), get/setPassthroughOpacityPreference(), get/setSpatialEnvironmentPreference(), isSpatialEnvironmentPreferenceActive() (I33a7b) (Ie06e2) (Ie06e2).
  • Тип SpatialEnvironmentPreference.preferredPassthroughOpacity изменен с Float? на Float. Оно больше не принимает нулевые значения. Вместо этого SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE используется, чтобы указать, что предпочтений по прозрачности нет. (I40107)
  • В методе create параметр windowBoundsPx изменен на pixelDimensions, а его тип – с Rect на IntSize2d. (I1926e)
  • Конструктор SpatialEnvironment теперь является внутренним (I75a51).
  • Классы SpatialPointerIconNone и SpatialPointerIconCircle заменены объектами-компаньонами SpatialPointerIcon.NONE и SpatialPointerIcon.CIRCLE (I416d2).
  • Поле SpatialPointerIcon в таблице SpatialPointerComponent больше не может иметь значение NULL. Используйте SpatialPointerIcon.DEFAULT вместо null, чтобы указать, что должен использоваться значок указателя, заданный в системных настройках по умолчанию. (I416d2)
  • Свойство androidx.xr.scenecore.AnchorEntity.getState() заменено на свойство, доступное только для чтения. Переименованы параметры метода AnchorEntity.create() во избежание неясности. В методах AnchorEntity для настройки и добавления прослушивателей прослушиватель был перемещен в последний аргумент, чтобы включить завершающие лямбда-выражения. androidx.xr.scenecore.OnStateChangedListener заменено на Consumer<AnchorEntity.State> для AnchorEntity. (I472e0)
  • GltfModelEntity.getAnimationState() теперь является ресурсом. (I10b29)
  • Значение ActivitySpace.getBounds() заменено на свойство. Название "ActivitySpace.addBoundsChangedListener" изменено на "ActivitySpace.addOnBoundsChangedListener". Метод ActivitySpace.setOnSpaceUpdatedListener заменен методами добавления и удаления. (I4c956)
  • AnchorPlacement: planeTypeFilter переименован в anchorablePlaneOrientations, planeSemanticFilter – в anchorablePlaneSemanticTypes. Добавление MovableComponent в AnchorEntity или ActivitySpace вернет значение false, MoveListener переименовано в EntityMoveListener shouldDisposeParentAnchor, переименовано в disposeParentOnReAnchor systemMovable, удалено из функции create в пользу creeateCustomMovable, createSystemMovable и createAnchorable (If11c4)
  • Удален класс SurfaceEntity.featherRadiusX/Y и добавлен класс EdgeFeatheringParams. (Ic78fc)
  • Метод PanelEntity.enablePanelDepthTest() заменен свойством panelClippingConfig. Установите значение Scene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true), чтобы включить проверку глубины, или PanelClippingConfig(isDepthTestEnabled = false), чтобы отключить ее. (I0cbe0)
  • Scene.mainPanelEntity теперь имеет тип MainPanelEntity вместо PanelEntity (I7125a)
  • Метод setFullSpaceMode класса Scene переименован в configureBundleForFullSpaceModeLaunch, а метод setFullSpaceModeWithEnvironmentInherited – в configureBundleForFullSpaceModeLaunchWithEnvironmentInherited. (I0cbe0) (I0cbe0)
  • Значения UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV и WITHIN_FOV в SpatialVisibility переименованы в SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW и SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW соответственно (Ie7e8c).
  • Класс SpatialVisibility заменен общедоступным объектом с постоянными целочисленными значениями. setSpatialVisibilityChangedListener теперь принимает Consumer<Int> вместо Consumer<SpatialVisibility> (Ie7e8c).
  • Константы PointerCaptureComponent переименованы и перемещены в объект PointerCaptureComponent.PointerCaptureState (I9c7ac).
  • Значение в ячейке PointerCaptureComponents' StateListener заменено на "Consumer<Int>". (I9c7ac)
  • InputEventListener заменено на Consumer<InputEvent> (I9c7ac)
  • setPreferredAspectRatio перемещен из класса Scene в объект SpatialWindow и принимает Session в качестве первого параметра. (I7b717)
  • Entity.setHidden() заменено на Entity.setEnabled(), а Entity.isHidden() – на Entity.isEnabled(). setHidden(false) равно setEnabled(true) и isHidden() == !isEnabled(). (Icf0de)
  • Тип Entity.contentDescription изменен со строки на CharSequence. (Ie59be)
  • Теперь Session.create и Session.configure вызывают SecurityException, если не предоставлены достаточные разрешения, вместо того чтобы возвращать SessionCreatePermissionsNotGranted или SessionConfigurePermissionsNotGranted. (I7c488)
  • ResizableComponent.create теперь требует Consumer<ResizeEvent> ResizeEventListener, заменен на Consumer<ResizeEvent> ResizableComponent.size, переименован в ResizableComponent.affordanceSize ResizableComponent.minimumSize, переименован в ResizableComponent.minimumEntitySize ResizableComponent.maximumSize, переименован в ResizableComponent.maximumEntitySize, ResizableComponent.autoHideContent переименован в ResizableComponent.shouldAutoHideContent, ResizableComponent.forceShowResizeOverlay переименован в ResizableComponent.shouldAlwaysShowOverlay (I97a2d)
  • Значение параметра "minSDK" уменьшено до 24 для androidx.xr.scenecore и androidx.xr.compose. Для пакетов XR по-прежнему требуется API 34 во время выполнения. (I17224)
  • Удалено ограничение RequiresApi(34) для всех пакетов Jetpack XR. Это ограничение было избыточным, поскольку Jetpack XR сейчас доступен только на устройствах с уровнем API 34 и выше (Iae0f8).
  • Основной артефакт SceneCore (xr:scenecore:scenecore) будет содержать только асинхронные API в стиле Kotlin. Разработчики Java могут использовать библиотеку xr:scenecore:scenecore-guava для доступа к совместимым API. (If221b)
  • Для проектов, выпущенных с Kotlin 2.0, требуется KGP 2.0.0 или более поздней версии (Idb6b5).
  • Теперь в этой библиотеке используются аннотации JSpecify nullness, которые относятся к типу type-use. Разработчикам Kotlin следует использовать следующий аргумент компилятора, чтобы обеспечить правильное использование: -Xjspecify-annotations=strict (это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin) (Ia8420).
  • Все асинхронные методы, возвращающие ListenableFuture, заменены функциями приостановки Kotlin. Разработчикам, которые пишут на Java и хотят использовать асинхронные методы на основе ListenableFuture вместо функций приостановки Kotlin, теперь нужно использовать функции расширения в :xr:scenecore-scenecore-guava. Например, GuavaExrImage содержит асинхронные функции ExrImage, эквивалентные Guava, GuavaScenePose – асинхронные функции ScenePose, эквивалентные Guava, GuavaGltfModel – асинхронные функции Guava-equivalent GltfModel и т. д. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)

Исправление ошибок

  • Обновлено правило Jetpack XR Scenecore ProGuard, чтобы предотвратить AbstractMethodError для минифицированных клиентов. (I91a01)
  • Дополнительные исправления для поддержки минификации Proguard в Jetpack XR SceneCore (I4f47e).
  • Исправлена ошибка, из-за которой InteractableComponent мог вызвать сбой, если hitPosition в HitInfo InputEvent мог вызвать сбой, если hitPosition, возвращенный системой, был нулевым (I7a695).
  • Значения Config *Mode переименованы, чтобы лучше отражать их поведение. (I6d247)
  • Исправлены проблемы с полем зрения и HitTest в тестовом приложении SceneCore. (I2c51e)
  • Исправлена ошибка в SpatialCapabilities.hasCapability(), из-за которой возвращалось значение true, если любая из возможностей, переданных с побитовым ИЛИ, была истинной, а не только если все они были истинными. (I2cd40)
  • SurfaceEntity.StereoMode.TOP_BOTTOM: верхняя карта теперь показывается левому глазу, а нижняя – правому. (I4ae68)

Версия 1.0.0-alpha04

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 добавлены методы расширения Spatial Visibility Callback, позволяющие отслеживать, когда контент сцены перемещается в зону обзора пользователя или за ее пределы.
  • В SpatialAudioTrack добавлен метод setPointSourceParams, позволяющий обновлять параметры после создания трека.
  • Добавлен новый класс Scene со ссылками на API Scenecore. Сцена будет доступна как свойство расширения сеанса. Функции из SessionExt перенесены в Scene, поэтому импорт нужно скорректировать, например SessionExt.getScene(session).addSpatialCapababilitiesChangedListener против SessionExt.addSpatialCapabilitiesChangedListener.
  • Добавлен параметр ActivityPose.hitTestAsync, позволяющий hitTest для виртуального контента.
  • Добавлен новый тип компонента SpatialPointerComponent, позволяющий клиентам указывать значок, отображаемый для указателя, или отключать значок. Этот компонент сейчас можно прикрепить только к экземплярам PanelEntity.
  • Представляем новую фабрику PanelEntity, которая принимает размеры панели в метрах или пикселях. Удалена старая фабрика PanelEntity, принимающая два параметра типа Dimension для панели.

Изменения в 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-alpha03

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

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 будут иметь радиус закругления углов по умолчанию 32 dp или меньше, если ширина или высота панели меньше 32 dp.

Новые API и возможности

  • Представлен API StereoSurface.CanvasShape, который позволяет создавать холсты Spherical и Hemispherical для отрисовки иммерсивного медиаконтента.
  • StereoSurfaceEntity.create() теперь принимает параметр CanvasShape. (В настоящее время этот параметр игнорируется, но будет использоваться в будущих выпусках.)
  • StereoSurfaceEntity.create() больше не принимает параметр Dimensions. Размер холста должен задаваться в приложении с помощью свойства CanvasShape.
  • StereoSurfaceEntity имеет элемент CanvasShape, который можно задать динамически.
  • StereoSurfaceEntity.dimensions теперь является свойством только для чтения. Чтобы изменить размеры, приложения должны задать CanvasShape.
  • Теперь StereoSurfaceEntity позволяет повторно задавать StereoMode после создания.

Другие изменения

  • Минимальная версия SDK во время компиляции снижена до 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-alpha01

12 декабря 2024 г.

Выпущены данные "androidx.xr.scenecore:scenecore-* 1.0.0-alpha01".

Функции в первом выпуске Первый выпуск Jetpack SceneCore для разработчиков. Это библиотека графов 3D-сцен, которая позволяет создавать иммерсивные сцены и среды и управлять ими. Эта библиотека позволяет размещать и упорядочивать 3D-модели и панели контента относительно друг друга и виртуальной или реальной среды.

  • SpatialEnvironment. Создавайте полностью иммерсивные среды с помощью скайбокса и/или геометрии 3D-модели в качестве фона для сцены расширенной реальности. Вы также можете включить сквозной режим, чтобы виртуальная сцена интегрировалась с реальным окружением пользователя.
  • PanelEntity. Добавляйте 2D-контент в 3D-сцены, встраивая стандартные макеты и действия Android в пространственные панели, которые могут парить или быть привязаны к реальным поверхностям.
  • GltfModelEntity. Размещайте 3D-модели в сцене, анимируйте их и взаимодействуйте с ними. SceneCore поддерживает формат файлов glTF для простоты интеграции с существующими моделями.
  • SpatialAudio. Добавляйте в 3D-сцену фоновые и точечные источники звука, чтобы создать эффект полного погружения.
  • StereoSurfaceEntity: SceneCore поддерживает маршрутизацию контента, отрисованного на Android Surface, для левого и правого глаза. Это позволяет показывать стереоскопический контент в формате "рядом" или "сверху вниз", например стереофотографии, 3D-видео или другие динамически отрисовываемые интерфейсы. Для декодирования видео в приложениях следует использовать MediaPlayer или ExoPlayer.
  • Система компонентов. SceneCore предлагает надежную и гибкую систему компонентов для добавления возможностей в контент XR, включая возможности для пользователей перемещать, изменять размер и взаимодействовать с моделями и панелями.
  • Закрепление. Если сквозной режим включен, вы можете прикреплять панели и модели к реальным поверхностям, обеспечивая пользователям тесную интеграцию виртуального контента в их реальной среде.
  • Поза пользователя. Доступ к местоположению пользователя в виртуальной сцене, чтобы ориентировать контент вокруг его положения.
  • SpatialCapabilities. Создавайте полностью адаптивные приложения, которые используют пространственные возможности, когда они доступны, например трехмерное позиционирование контента пользовательского интерфейса. Кроме того, приложение может отслеживать изменения возможностей во время работы и адаптироваться к тому, как пользователь взаимодействует с устройством Android XR.

Известные проблемы

  • В настоящее время для использования Jetpack SceneCore требуется minSDK версии 30. Чтобы обойти эту проблему, добавьте в манифест запись <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>. Это позволит вам создавать и запускать приложения с minSDK 23.
  • Сеанс может стать недействительным в различных ситуациях, которые автоматически воссоздают Activity, включая изменение размера главной панели, подключение периферийных устройств и переключение между светлым и темным режимами. Если вы столкнулись с проблемами недействительности сеанса, вы можете сделать основную панель неизменяемой, использовать динамическую панель, отключить воссоздание действий для определенных изменений конфигурации или отключить изменения темы светлого/темного режима.
  • Компоненты Movable и Resizable не поддерживаются в 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, можно найти в этом руководстве.