Jetpack SceneCore

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

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

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

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

классный

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

    // Optional dependencies for asynchronous conversions
    implementation "androidx.xr.scenecore:scenecore-guava:1.0.0-alpha12"

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

Котлин

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

    // Optional dependencies for asynchronous conversions
    implementation("androidx.xr.scenecore:scenecore-guava:1.0.0-alpha12")

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

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

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

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

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

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

Версия 1.0

Версия 1.0.0-alpha12

25 февраля 2026 г.

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

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

  • Закрепленные объекты могут через несколько секунд вернуться из своей закреплённой позиции в начало координат пространства активности.

Изменения в 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 для проверки на null , которые относятся к использованию типов. Разработчикам 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 и 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

Нарушения и изменения в поведении

  • Если ширина или высота панели меньше 32dp, то PanelEntity и ActivityPanelEntity радиус скругления углов по умолчанию будет равен 32dp или меньше.

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

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

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

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

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

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

Версия 1.0.0-alpha01

12 декабря 2024 г.

Выпущена версия androidx.xr.scenecore:scenecore-* 1.0.0-alpha01 .

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

  • SpatialEnvironment : Создавайте полностью иммерсивные впечатления, используя изображение скайбокса и/или геометрию 3D-модели в качестве фона для вашей XR-сцены. Или включите сквозную передачу, чтобы ваша виртуальная сцена могла интегрироваться с реальным окружением пользователя.
  • PanelEntity : Добавьте 2D-контент в ваши 3D-сцены, встраивая стандартные макеты Android и Activity в пространственные панели, которые могут плавать или быть привязаны к реальным поверхностям.
  • GltfModelEntity : Размещайте, анимируйте и взаимодействуйте с 3D-моделями в вашей сцене. SceneCore поддерживает формат файлов glTF для упрощения интеграции с существующими моделями.
  • SpatialAudio : Добавьте в свою 3D-сцену источники окружающего и точечного звука для полного погружения в пространственное звучание.
  • 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.