Jetpack SceneCore

Создавать и изменять граф сцены Android XR с помощью 3D-контента.
Последнее обновление Основная версия Release Candidate Бета-версия Альфа-версия
7 октября 2026 г. - 1.0.0-rc02 - -

Как объявлять зависимости

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

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

Groovy

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

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

Kotlin

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

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

Подробнее о зависимостях приведено в статье Добавление зависимостей сборки.

Отзыв

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

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

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

Версия 1.0

Версия 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.

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

  • Исправлена ошибка утечки памяти, из-за которой система могла сохранять ссылку на объект Activity после его удаления. (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 преобразована в функцию suspend. (I5d27f)
  • ActivitySpace и AnchorSpace теперь используют общий класс SpaceEntity, который содержит общее поведение для объектов, положение которых контролируется системой (I506ec, b/513619219).
  • Обновлено AnchorEntity до AnchorSpace (Ifa95e, b/513619219)
  • Предоставляет общедоступный тестовый API SoundEffectPoolComponentTester. (I87df7, b/498104417)
  • Добавлен необязательный параметр cornerRadius в конструктор SurfaceEntity.Shape.Quad, а свойство 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 теперь не интерфейс, а класс, который является базовым классом для всех типов объектов. В результате этого изменения BaseEntity был удален. (I7fbc9)
  • GltfModel, ExrImage и ImageBasedLightingAsset теперь реализуют AutoCloseable, чтобы обеспечить идиоматическое управление ресурсами с помощью блока use в Kotlin. (I1ac79)
  • Добавлен класс ImageBasedLightingAsset, который заменяет класс ExrImage для определения освещения пространственной среды. ExrImage больше не поддерживается и удален из общедоступного API. Вместо SpatialEnvironmentPreference теперь используется ImageBasedLightingAsset. (I6c92a)
  • Параметр skybox в SpatialEnvironment переименован в imageBasedLightingAsset, чтобы лучше отражать его назначение. Также добавлено уточнение о том, что текстуры скайбокса должны быть включены в параметр geometry. (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 были перенесены из типа Int в специальные типы. Их константы ANY будут удалены, поэтому клиентам следует явно перечислять все нужные константы или использовать новые неизменяемые константы .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. Вместо этого объект будет использоваться напрямую с 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, который вернет интерфейс Entity. (I4c450, b/473867483)
  • Добавлен API XrLog. Установите для XrLog.isEnabled значение true, чтобы включить ведение журнала в JetpackXR, и используйте 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

  • Флажок "unscaledGravityAlignedActivitySpace" удален из Session.create. ActivitySpace теперь всегда не масштабируется и выравнивается по гравитации. (If6f11, b/458173423)
  • Удалены устаревшие функции setMaterialOverride и clearMaterialOverride из GltfModelEntity, которые теперь вызываются в отдельных GltfModelNode. (I2e5d2)
  • В PanelEntity добавлены методы transformPixelCoordinatesToLocalPosition и transformNormalizedCoordinatesToLocalPosition. Удалены экспериментальные методы, которые возвращали позы вместо позиций Vector3. (Ib6960, b/460123106, b/458333591)
  • В SceneCore добавлены API GltfAnimation для управления анимацией в формате glTF. (I2c172, b/466065486, b/465819070, b/465818617)
  • Переименован источник "ScenePose.activitySpacePose" в "ScenePose.poseInActivitySpace" (I8f175, b/427822261)
  • Добавлена реализация прогнозируемого времени выполнения Scenecore (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 Runtime на основе логики в SceneCore (I570b9)

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

  • Исправлена потенциальная причина сбоя, который мог возникать при уничтожении сеанса и получении SpatialModeChangeEvent (If44e8).
  • Исправлена ошибка, из-за которой при выходе из действия или возвращении к нему мог возникать сбой 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 и shouldAlwaysShowOverlay в isAutoHideContentWhileResizingEnabled и 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. Вместо SpatialModeChangedListener используется Consumer<SpatialModeChangeEvent>. Теперь в 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 SceneCore's BaseEntity и BaseScenePose (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 содержит эти коммиты.

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

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

Изменения в API

В этом выпуске мы внесли значительные изменения в API SceneCore. Некоторые классы были переименованы и/или перенесены в другие модули, а большинство методов получения и установки были заменены свойствами 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)
  • В объекте "Изменено на следующие свойства": 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 в раздел "Сцена". Например, используйте 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)
  • В методе создания параметр windowBoundsPx был изменен на pixelDimensions, а его тип – с Rect на IntSize2d. (I1926e)
  • Конструктор SpatialEnvironment теперь внутренний (I75a51)
  • Классы SpatialPointerIconNone и SpatialPointerIconCircle заменены на сопутствующие объекты SpatialPointerIcon.NONE и SpatialPointerIcon.CIRCLE (I416d2).
  • Поле SpatialPointerIcon в SpatialPointerComponent больше не может быть пустым. Чтобы указать, что нужно использовать значок указателя по умолчанию, вместо значения null используйте SpatialPointerIcon.DEFAULT. (I416d2)
  • Значение в ячейке androidx.xr.scenecore.AnchorEntity.getState() заменено на свойство, доступное только для чтения. Переименованы параметры метода AnchorEntity.create() для ясности. В методах AnchorEntity для настройки и добавления прослушивателей прослушиватель был перемещен в последний аргумент, чтобы включить конечные лямбда-выражения. Значение "androidx.xr.scenecore.OnStateChangedListener" для "AnchorEntity" заменено на "Consumer<AnchorEntity.State>". (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 в SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW и SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW соответственно (Ie7e8c).SpatialVisibility
  • Класс SpatialVisibility заменен на общедоступный объект с постоянными целочисленными значениями. setSpatialVisibilityChangedListener теперь принимает Consumer<Int> вместо Consumer<SpatialVisibility> (Ie7e8c)
  • PointerCaptureComponent констант переименованы и перемещены в объект PointerCaptureComponent.PointerCaptureState (I9c7ac)
  • Значение в ячейке PointerCaptureComponents' StateListener заменено на "Consumer<Int>". (I9c7ac)
  • Значение в ячейке InputEventListener заменено на "Consumer<InputEvent>" (I9c7ac).
  • setPreferredAspectRatio перенесен из класса Scene в объект SpatialWindow и принимает сеанс в качестве первого параметра. (I7b717)
  • Entity.setHidden() заменено на Entity.setEnabled(), а Entity.isHidden() – на Entity.isEnabled(). setHidden(false) равно setEnabled(true) и isHidden() == !isEnabled(). (Icf0de)
  • Тип параметра Entity.contentDescription изменен со String на 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 для проверки на наличие нулевых значений, которые применяются к типам. Разработчикам на Kotlin следует использовать следующий аргумент компилятора, чтобы обеспечить правильное использование: -Xjspecify-annotations=strict (это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin) (Ia8420).
  • Все асинхронные методы, возвращающие ListenableFuture, заменены на функции Kotlin suspend. Разработчики на Java, которые хотят использовать асинхронные методы на основе ListenableFuture вместо функций Kotlin suspend, теперь должны использовать функции расширения в :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).
  • Значения режима конфигурации были переименованы, чтобы лучше отражать их поведение. (I6d247)
  • Исправлены проблемы с полем зрения и HitTest в приложении SceneCore TestApp. (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 необходимо указать android:enableOnBackInvokedCallback= "true".
  • 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 spaces. Значение по умолчанию – Parent.
  • Методы расширения обратного вызова пространственной видимости добавлены в SessionExt.kt, чтобы отслеживать, когда контент сцены перемещается в поле зрения пользователя или за его пределы.
  • В 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 содержит эти коммиты.

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

  • Теперь для кода Jetpack XR поддерживается минификация Proguard

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

  • Дополнительные исправления для поддержки минимизации 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 и возможности

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

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

  • Минимальная версия SDK для компиляции снижена до 24. Для всех Jetpack XR API по-прежнему требуется API 34 во время выполнения.
  • Фабрика сеансов SceneCore (Session.create) больше не запускает намерение получить разрешение SCENE_UNDERSTANDING. Вместо этого клиентское приложение должно явно запросить у пользователя разрешения, прежде чем пытаться создать якоря. Если пользователь не предоставит разрешение, создать якорь не получится.

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

  • В методе getActivitySpacePose() исправлена ошибка, из-за которой возвращались значения в метрах, а не в масштабированных метрах, как должно быть при использовании масштаба ActivitySpace. Теперь параметр transformPoseTo также использует правильные единицы измерения для вычисления изменений координат, когда параметр ActivitySpace используется в источнике или пункте назначения.
  • Теперь, если с помощью setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)) передается нулевое значение для параметра skybox, будет использоваться черный фон. Чтобы вернуться к стандартному небу и геометрии, используйте setSpatialEnvironmentPreference(null)..

Версия 1.0.0-alpha01

12 декабря 2024 г.

Выход androidx.xr.scenecore:scenecore-* 1.0.0-alpha01.

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

  • SpatialEnvironment. Создавайте полностью иммерсивные среды с помощью изображений скайбокса и/или геометрии 3D-моделей в качестве фона для сцены XR. Или включите сквозную передачу, чтобы виртуальная сцена могла интегрироваться с реальным окружением пользователя.
  • PanelEntity: добавляйте 2D-контент в 3D-сцены, встраивая стандартные макеты и действия Android в пространственные панели, которые могут быть плавающими или прикрепленными к реальным поверхностям.
  • GltfModelEntity – размещайте 3D-модели на сцене, добавляйте анимацию и взаимодействуйте с ними. SceneCore поддерживает формат файлов glTF, чтобы упростить интеграцию с существующими моделями.
  • SpatialAudio – добавьте в 3D-сцену источники окружающего и точечного звука, чтобы создать эффект полного погружения.
  • StereoSurfaceEntity: SceneCore поддерживает маршрутизацию контента, отрисованного на поверхности Android, для левого и правого глаза. Его можно использовать для отрисовки стереоскопического контента в формате "бок о бок" или "сверху вниз", например стереофотографий, 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.
  • Сеанс может стать недействительным в различных ситуациях, которые автоматически воссоздают действие, включая изменение размера основной панели, подключение периферийных устройств и переключение между светлой и темной темами. Если вы столкнулись с проблемами аннулирования сеанса, попробуйте сделать основную панель не изменяемой по размеру, использовать динамическую панель, отключить воссоздание действий для определенных изменений конфигурации или отключить смену темы (светлой или темной).
  • Компоненты Movable и Resizable не поддерживаются в GltfEntity.
  • Метод Entity.getSize() не поддерживается для GltfEntity.
  • Приложения Jetpack XR должны запрашивать разрешение android.permission.SCENE_UNDERSTANDING в файле AndroidManifest.
  • Создавать сеансы можно только на устройствах Android XR. В настоящее время, если вы создадите сеанс и попытаетесь использовать его на устройстве, отличном от устройства Android XR, то получите исключение RuntimeException.
  • Если задать для параметра skybox значение 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, рассказывается в этом руководстве.