Jetpack SceneCore

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

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

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

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

Groovy

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

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

Kotlin

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

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

Для получения дополнительной информации о зависимостях см. раздел «Добавление зависимостей сборки» .

Обратная связь

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

Создать новую задачу

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

Версия 1.0

Версия 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 в Scene был заменен на add/removeSpatialVisibilityChangedListener . ( I67dff )
  • Все методы SceneCore add/removeOnFooListener были переименованы в add/removeFooListener , из названия удалено On . ( Ibe50b )
  • Методы AnchorEntity.setOnOriginChangedListener и AnchorEntity.setOnStateChangedListener были заменены методами add/removeFooListener для поддержки одновременной работы нескольких слушателей. ( I13749 )
  • Переименован AnchorEntity.State.TIMEDOUT в State.TIMED_OUT . ( Id2b8d )
  • API компонентов был переработан для повышения безопасности и расширяемости. Component теперь является абстрактным классом. Методы onAttach() и onDetach() теперь protected , чтобы предотвратить прямые вызовы. Пожалуйста, используйте Entity.addComponent() и Entity.removeComponent() для управления жизненным циклом компонентов. ( Id04e8 )
  • Константы PlaneSemanticType PlaneOrientation в SceneCore были переведены из типа Int в пользовательский тип. Их константы ANY будут удалены; клиентам следует явно перечислять все необходимые константы или использовать новые неизменяемые константы типа Set с параметром .ALL . Фабричный метод AnchorEntity теперь принимает Set этих типов вместо одного значения. ( Ib1033 )
  • Добавлена ​​поддержка скелетной анимации (скиннинга) в экспериментальный 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 был создан из объекта ARCore Anchor ( 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 )
  • Удалите Entity из PointSourceParams . Вместо этого Entity будет использоваться напрямую с SpatialAudioTrack , SpatialSoundPool и SpatialMediaPlayer ( Ib3685 , b/489421980 , b/436634048 ).
  • Переименовано DeviceTrackingMode.LAST_KNOWN в SPATIAL_LAST_KNOWN (с устаревшим резервным вариантом), добавлено INERTIAL_LAST_KNOWN для отслеживания 3 степеней свободы и добавлено TRACKING_DEGRADED в TrackingState . ( Ie661c , b/445466590 )
  • Устаревшая GroupEntity . Чтобы получить сущность только с базовой функциональностью, вызовите Entity.create , которая вернет интерфейс сущности. ( 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 )
  • Добавлены transformPixelCoordinatesToLocalPosition и transformNormalizedCoordinatesToLocalPosition в PanelEntity , а также удалены эквивалентные экспериментальные методы, которые ранее возвращали позы вместо позиций 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 и других типов сущностей, отличных от Panel. Явное указание 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 ).
  • В SceneCore Runtime добавлен вспомогательный класс Utils, основанный на логике 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 были изменены с целых чисел на подтипы State. ( Ib0c49 )
  • Добавлен метод getChildren() в интерфейс Entity. Обновлен жизненный цикл MainPanelEntity . ( Ia69d6 )

Изменения в API

  • Типы констант PointerCaptureComponent.PointerCaptureState были изменены с Int на подтипы PointerCaptureState . ( Ic888a )
  • Теперь Scene.spatialCapabilities имеет тип Set<SpatialCapability> вместо поля типа Int. Константы SpatialCapability были переименованы. ( I9c109 )
  • Константные типы SurfaceEntity были переименованы и заменены с Int на подтипы SurfaceEntity . ( I419ed )
  • Константные типы SpatializerConstant были переименованы и изменены с Ints на подтипы SpatializerConstant . ( Ia0e18 )
  • Константные типы TextureSampler были переименованы и изменены с Int на подтипы TextureSampler . ( I44078 )
  • Типы констант SpatialVisibility были изменены с целых чисел на подтипы SpatialVisibility . ( I70739 )
  • Константные типы ResizeEvent.ResizeState были переименованы и изменены с Int на подтипы ResizeState . ( I384d5 )
  • Константные типы InputEvent были переименованы и изменены с типа Int на тип, наследующий от соответствующего объемлющего типа. ( I82817 )
  • Типы констант GltfModelEntity.AnimationState были изменены с Int на подтипы AnimationState . ( I24f4e )
  • Константные типы AlphaMode были переименованы и изменены с Ints на подтипы AlphaMode . ( I27b56 )
  • Типы констант Space были изменены с целых чисел на подтипы пространства. ( I9255b )
  • Методы ScenePose.hitTest и связанные с ним теперь возвращают null если пересечение не найдено, вместо HitTestResult с null 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 объекта Scene был объединен с переменной keyEntity . Установка keyEntity в неперемещаемую сущность, такую ​​как AnchorEntity приведет к возникновению исключения IllegalArgumentException вместо возврата логического значения false. ( I62080 , b/428721695 , b/422215745 )
  • Переменная SpatialModeChangeListener объекта Scene была заменена на 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 содержит следующие коммиты .

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

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

Изменения в API

В этом релизе в SceneCore были внесены существенные изменения в API. Несколько классов были переименованы и/или перемещены в другие модули, а большинство методов getter/setter были заменены свойствами 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 в раздел Scene, например, используйте session.scene.requestFullSpaceMode() вместо session.scene.spatialEnvironment.requestFullSpaceMode() . addOnPassthroughOpacityChangedListener и addOnSpatialEnvironmentChangedListener теперь имеют переопределения, принимающие необязательные Executor. ( 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 . Он больше не принимает значения null. Вместо этого используется 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 для 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 для 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 изменен со 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 для androidx.xr.scenecore и androidx.xr.compose уменьшен до 24. Пакеты 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. 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 возвращаемый системой, был равен null ( I7a695 ).
  • Значения параметров Config *Mode были переименованы в соответствии с их поведением. ( I6d247 )
  • Исправлены проблемы с FOV и HitTest в тестовом приложении SceneCore . ( I2c51e )
  • Исправлена ​​ошибка в SpatialCapabilities.hasCapability() , из-за которой она возвращала true, если хотя бы одна из возможностей, переданных с помощью побитового ИЛИ, была истинной, вместо того, чтобы возвращать 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 . Класс Scene будет доступен как свойство расширения класса Session. Функции внутри 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.
  • Класс Fov теперь является обычным классом Kotlin.
  • Разделите Entity.kt , чтобы поместить каждый конкретный тип сущности в отдельный файл.
  • При создании нового PanelEntity большинство элементов View будут переподчинены объекту FrameLayout . Это упрощает использование LayoutInspector с пространственными панелями.
  • Используемый в данный момент экземпляр XrExtensions теперь зарегистрирован на платформе, в порядке предосторожности, чтобы облегчить отладку приложения.

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

  • Внесено исправление, предотвращающее сбой, который мог произойти при перемещении PanelEntity с MovableComponent и AnchorPlacement
  • Исправлена ​​ошибка, из-за которой ResizableComponent предоставлял устаревшие размеры в функции обратного вызова onResizeStart .
  • Исправлена ​​ошибка, приводившая к сбою при многократном вызове метода dispose() класса JxrPlatformAdapterAxr .

Версия 1.0.0-alpha03

26 февраля 2025 г.

androidx.xr.scenecore:scenecore:1.0.0-alpha03 and androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03 are released. Version 1.0.0-alpha03 contains these commits .

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

  • Proguard minification is now supported for Jetpack XR code

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

  • Additional fixes to support Proguard minification for Jetpack XR SceneCore ( I4f47e )
  • Updated Jetpack XR Scenecore ProGuard rule to prevent AbstractMethodError for minified clients. ( I91a01 )

Version 1.0.0-alpha02

12 февраля 2025 г.

androidx.xr.scenecore:scenecore:1.0.0-alpha02 and androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02 are released. Version 1.0.0-alpha02 contains these commits .

Upcoming breaking change affecting apps built before 1.0.0-alpha02

  • Factory methods have been moved from the Session class to a companion method on each respective type:
    • Session.createActivityPanelEntity(Dimensions, String, Activity, Pose) has been deleted and replaced with ActivityPanelEntity.create(Session, Dimensions, String, Pose)
    • Session.createAnchorEntity(Anchor) has been deleted and replaced with AnchorEntity.create(Session, Anchor)
    • Session.createAnchorEntity(Dimensions, Int, Int, Duration) has been deleted and replaced with AnchorEntity.create(Session, Dimensions, Int, Int, Duration)
    • Session.createEntity(String, Pose) has been deleted and replaced with ContentlessEntity.create(Session, String, Pose)
    • Session.createExrImageResource(String) has been deleted and replaced with ExrImage.create(Session, String)
    • Session.createGltfEntity(GltfModel, Pose) has been deleted and replaced with GltfModelEntity.create(Session, GltfModel, Pose)
    • Session.createGltfModelResource(String) has been deleted and replaced with GltfModel.create(Session, String)
    • Session.createInteractableComponent(Executor, InputEventListener) has been deleted and replaced with InteractableComponent.create(Session, Executor, InputEventListener)
    • Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean) has been deleted and replaced with MovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
    • Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose) has been deleted and replaced with PanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
    • Session.createResizableComponent(Dimensions, Dimensions) has been deleted and replaced with ResizableComponent.create(Session, Dimensions, Dimensions)
    • Session.createStereoSurfaceEntity(Int, Dimensions, Pose) has been deleted and replaced with StereoSurface.create(Session, Int, Dimensions, Pose)
  • The following deprecated methods were removed:
    • Session.canEmbedActivityPanel(Activity) has been deleted. Use getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY) instead.
    • Session.hasSpatialCapability(Int) has been deleted. It has been replaced in favor of using getSpatialCapabilities().hasCapability() as a more compartmentalized way to check for the presence of spatial capabilities since getSpatialCapabilities() returns a SpatialCapabilities object.
    • Session.requestFullSpaceMode() has been deleted and replaced with SpatialEnvironment.requestFullSpaceMode()
    • Session.requestHomeSpaceMode() has been deleted and replaced with SpatialEnvironment.requestHomeSpaceMode()
  • Session.setFullSpaceMode(Bundle) and Session.setFullSpaceModeWithEnvironmentInherited(Bundle) have been moved to extension functions. Developer files will need to add the new imports for access:
    • import androidx.xr.scenecore.setFullSpaceMode
    • import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
  • Session.setPreferredAspectRatio(Activity, Float) has been moved to an extension function. Developer files will need to add the new import for access:
    • import androidx.xr.scenecore.setPreferredAspectRatio
  • Session.getEntitiesOfType(Class<out T>) and Session.getEntityForRtEntity(RtEntity) have been moved to extension functions. Developer files will need to add the new imports for access:
    • import androidx.xr.scenecore.getEntitiesOfType
    • import androidx.xr.scenecore.getEntityForRtEntity
  • Session.unpersistAnchor(Anchor) has been deleted
  • Session.createPersistedAnchorEntity(UUID) has been deleted

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

  • PanelEntity.setCornerRadius() and ActivityPanelEntity.setCornerRadius() may not take effect until the panel is next moved, this can be mitigated by moving the panel to its current position
  • When BoundsChanged is called on the ActivitySpace , some ActivityPose s may not have been correctly updated. It will be updated on the following OnSpaceUpdated call on the ActivitySpace

Breaking & behavioral changes

  • PanelEntity and ActivityPanelEntity will have a default corner radius of 32dp or smaller if the panel has a width or height smaller than 32dp

New APIs and capabilities

  • Introduces StereoSurface.CanvasShape , which allows for the creation of Spherical and Hemispherical canvases for rendering immersive media.
  • StereoSurfaceEntity.create() now accepts a CanvasShape parameter. (This parameter is currently ignored, but will be used in a future release)
  • StereoSurfaceEntity.create() no longer takes a Dimensions parameter. Applications should control the size of the canvas through setting the CanvasShape
  • StereoSurfaceEntity has a CanvasShape member which can be set dynamically.
  • StereoSurfaceEntity.dimensions is now a read-only property; applications should set the CanvasShape to change dimensions.
  • StereoSurfaceEntity now allows the StereoMode to be re-set after construction.

Other changes

  • Reduced compile-time minSDK to 24. All Jetpack XR APIs continue to require API 34 at runtime.
  • SceneCore 's Session factory ( Session.create ) no longer launches an intent to acquire the SCENE_UNDERSTANDING permission. Instead, the client application must explicitly request the permissions from the user, before attempting to create the anchors. Anchor creation will fail if the permission is not granted by the user.

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

  • getActivitySpacePose() has been fixed to account for the ActivitySpace scale by returning translation values in scaled meters rather than always returning non-scaled meters. transformPoseTo now also uses the right units to compute coordinate changes when the ActivitySpace is involved in the source or destination.
  • The skybox will now be set to an all-black skybox whenever a null skybox preference is passed using setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)) . To revert to the system default skybox and geometry, use setSpatialEnvironmentPreference(null).

Version 1.0.0-alpha01

12 декабря 2024 г.

androidx.xr.scenecore:scenecore-* 1.0.0-alpha01 is released.

Features of Initial Release Initial developer release of Jetpack SceneCore, a 3D scene graph library for creating and manipulating immersive scenes and environments. This library allows you to place and arrange 3D models and content panels relative to each other and your virtual or real-world environments.

  • SpatialEnvironment : Create fully immersive experiences with a skybox image and/or 3D model geometry as the backdrop for your XR scene of your environment. Or enable passthrough, so your virtual scene can integrate with the user's real-world environment.
  • PanelEntity : Add 2D content to your 3D scenes by embedding standard Android layouts and Activities into spatialized panels that can float or be anchored to real-world surfaces.
  • GltfModelEntity : Place, animate, and interact with 3D models in your scene. SceneCore supports the glTF file format for ease of integration with existing models.
  • SpatialAudio : Add ambient and point audio sources into your 3D scene for fully immersive, spatialized sound.
  • StereoSurfaceEntity : SceneCore supports left/right eye routing of content rendered onto an Android Surface. This can be used to render stereoscopic content in a side-by-side or top-bottom format, such as stereo photos, 3D video, or other dynamically rendered UIs. Applications should use MediaPlayer or ExoPlayer for video decoding.
  • Component System: SceneCore offers a robust and flexible component system for adding capabilities to your XR content, including affordances for users to move, resize, and interact with models and panels.
  • Anchor : With passthrough enabled, you can attach panels and models to actual surfaces, giving users seamless integration of virtual content in their real-world environment.
  • User Pose: Access the user's location in the virtual scene, to orient your content around the user's position.
  • SpatialCapabilities : Build fully adaptive apps that take advantage of spatialized capabilities when available, such as 3D positioning of UI content. Not only that, but your app can monitor for changes to capabilities while the app is executing, to modify the experience based on how the user is using their Android XR device.

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

  • Currently a minSDK of 30 is required to use Jetpack SceneCore. As a workaround add the following manifest entry <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> to be able to build and run with a minSDK of 23.
  • Session can become invalid in various situations that automatically recreate the Activity, including resizing a main panel, connecting peripherals, and changing between light and dark mode. If you encounter session invalidation issues, workarounds include making you main panel non-resizable, using a dynamic panel entity, disabling activity recreation for specific config changes or disabling light/dark mode theme changes.
  • Movable and Resizable components are not supported on GltfEntity.
  • Entity.getSize() is not supported on GltfEntity.
  • Jetpack XR apps required to request android.permission.SCENE_UNDERSTANDING permission in AndroidManifest.
  • Creating a session is only supported on an Android XR device. At this time, if you create a Session and try to use it on a non Android XR device, you'll get a RuntimeException.
  • Setting the skybox to null via `SpatialEnvironment.setSpatialEnvironmentPreference() does not result in a solid black skybox as documented. It may result in the system default skybox or no change to the current skybox.
  • SceneCore clients should add implementation(“com.google.guava:listenablefuture-1.0”) to their Gradle configuration for their app's dependencies. In a future release, scenecore will include this library as an api dependency so clients will not need to explicitly declare it.
  • SceneCore erroneously includes com.google.guava:guava-31.1-android and com.google.protobuf:protobuf-javalite as transitive dependencies. If this results in duplicate class errors in your build, these two dependencies can be safely excluded.
  • If your app uses SceneCore and enables ProGuard, it will crash when you create a Session. As a workaround, disable ProGuard. See this guide for more information on how to enable ProGuard.