Jetpack SceneCore

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

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

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

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

классный

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

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

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

Котлин

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

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

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

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

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

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

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

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

Версия 1.0

Версия 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 поддерживает маршрутизацию контента для левого/правого глаза, отображаемого на Android Surface. Это можно использовать для отображения стереоскопического контента в формате «бок о бок» или «сверху вниз», например, стереофотографий, 3D-видео или других динамически отображаемых пользовательских интерфейсов. Для декодирования видео приложениям следует использовать MediaPlayer или ExoPlayer.
  • Система компонентов: SceneCore предлагает надежную и гибкую систему компонентов для расширения возможностей вашего XR-контента, включая средства для перемещения, изменения размера и взаимодействия пользователей с моделями и панелями.
  • Функция Anchor : При включенной функции сквозной передачи вы можете прикреплять панели и модели к реальным поверхностям, обеспечивая пользователям бесшовную интеграцию виртуального контента в их реальную среду.
  • Положение пользователя: Получите доступ к местоположению пользователя в виртуальной сцене, чтобы сориентировать контент относительно его позиции.
  • SpatialCapabilities : Создавайте полностью адаптивные приложения, использующие пространственные возможности, когда они доступны, например, 3D-позиционирование контента пользовательского интерфейса. Более того, ваше приложение может отслеживать изменения этих возможностей во время выполнения, чтобы изменять пользовательский опыт в зависимости от того, как пользователь использует свое устройство Android XR.

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

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