Реактивный ранец SceneCore
Последнее обновление | Стабильный релиз | Кандидат на релиз | Бета-версия | Альфа-релиз |
---|---|---|---|---|
30 июля 2025 г. | - | - | - | 1.0.0-альфа05 |
Объявление зависимостей
Чтобы добавить зависимость от XR SceneCore, необходимо добавить репозиторий Google Maven в свой проект. Подробнее см. в репозитории Google Maven .
Добавьте зависимости для необходимых артефактов в файл build.gradle
вашего приложения или модуля:
Groovy
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha05" // Required for Java implementation "com.google.guava:listenablefuture:1.0" // Required for Kotlin implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha05") // Required for Java implementation("com.google.guava:listenablefuture:1.0") // Required for Kotlin implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05") }
Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .
Обратная связь
Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с уже существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав на кнопку со звёздочкой.
Более подробную информацию см. в документации по системе отслеживания проблем .
Версия 1.0
Версия 1.0.0-альфа05
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 воспринимаемого разрешения добавлен в Panel Entities и
SurfaceEntities
. ( I118f6 ) - В Scene.kt добавлены методы обратного вызова
PerceivedResolution
для мониторинга воспринимаемого разрешения основной панели активности в HSM. ( I58084 ) -
SurfaceEntity
— добавлена поддержка запроса суперсэмплинга в приложении при создании. Это позволяет приложениям использовать фильтр суперсэмплинга для сглаживания. ( I06913 ) - Добавлено свойство
recommendedContentBoxInFullSpace
дляActivitySpace
. Оно возвращает рекомендуемое поле для размещения контента в режиме полного пространства. ( 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 ) - В Entity: изменены следующие свойства:
get/setParent()
,setContentDescription
;Entity.is/setHidden()
устарел, вместо него используйтеEntity.is/setEnabled
. ( Ibc4c6 ) - Удалён класс
androidx.xr.scenecore.BasePanelEntity
, вместо него используетсяPanelEntity
напрямую. Геттеры и сеттерыPanelEntity
заменены свойствами. СвойствоPanelEntity.size
изменено сFloat3dSize
наFloat2dSize
. Удалён устаревший методandroidx.xr.scenecore.PanelEntity.getPixelDimensions
, вместо него используетсяgetSizeInPixels
. ( Icc174 ). - Заменен
androidx.xr.scenecore.OnSpaceUpdatedListener
наRunnable
. ( I19308 ) -
SpatialUser.getCameraViews()
заменен свойством. ( Ib0cc5 ) ДляExrImage
иGltfModel:
методыcreate
изменены на функции приостановки; параметры создания изменены так, чтобы приниматьUri
илиPath
вместоString
. ( Id8883 ) ( I0d247 ), ( I25706 ) -
SpatialEnvironment.requestFullSpaceMode
иSpatialEnvironment.requestHomeSpaceMode
перемещены в Scene, например, используйтеsession.scene.requestFullSpaceMode()
вместоsession.scene.spatialEnvironment.requestFullSpaceMode()
.addOnPassthroughOpacityChangedListener
иaddOnSpatialEnvironmentChangedListener
теперь есть переопределения, которые принимают необязательные исполнители. ( I12fe0 ) ( I6b21e ) - Удалены следующие устаревшие методы
SpatialEnvironment
:togglePassthrough
,setPassthrough
,setPassthroughOpacity
,getPassthroughMode
,getPassthroughOpacity
,setSkybox
иsetGeometry
. Также удалён устаревший классSpatialEnvironment.PassthroughMode
( I927bd ) ( I927bd ) ( I927bd ). - Заменены следующие методы получения и установки
SpatialEnvironment
свойствами Kotlin:getCurrentPassthroughOpacity()
,get/setPassthroughOpacityPreference()
,get/setSpatialEnvironmentPreference()
,isSpatialEnvironmentPreferenceActive()
( I33a7b ) ( Ie06e2 ) ( Ie06e2 ) - Тип
SpatialEnvironmentPreference.preferredPassthroughOpacity
изменён сFloat?
наFloat
. Он больше не принимает значения NULL. Вместо этого для сигнала об отсутствии предпочтений по непрозрачности используетсяSpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE
. ( I40107 ). - Параметр
windowBoundsPx
обновлен доpixelDimensions
, а его тип изменен с Rect наIntSize2d
в методе create. ( 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
переименован вconfigureBundleForFullSpaceModeLaunch
и методsetFullSpaceModeWithEnvironmentInherited
вconfigureBundleForFullSpaceModeLaunchWithEnvironmentInherited
. ( I0cbe0 ) ( I0cbe0 ) - Значения
SpatialVisibility
UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV и WITHIN_FOV переименованы в SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW и SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW соответственно ( Ie7e8c ) - Класс
SpatialVisibility
заменен на открытый объект с константными значениями Int.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
до 24 дляandroidx.xr.scenecore
иandroidx.xr.compose
. Пакеты XR по-прежнему требуют API 34 во время выполнения. ( I17224 ) - Убрано ограничение
RequiresApi(34)
для всех пакетов Jetpack XR. Это ограничение было излишним, поскольку Jetpack XR в настоящее время доступен только на устройствах с API уровня 34 и выше. ( Iae0f8 ) - Основной артефакт
SceneCore
(xr:scenecore:scenecore
) будет содержать только асинхронные API в стиле Kotlin. Разработчики Java могут использовать библиотекуxr:scenecore:scenecore-guava
для доступа к совместимым API. ( If221b ) - Для проектов, выпущенных с использованием Kotlin 2.0, требуется использование KGP 2.0.0 или более поздней версии ( Idb6b5 ).
- Эта библиотека теперь использует аннотации JSpecify, определяющие значение 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
в HitInfoInputEvent
мог вызывать сбой, еслиhitPosition
возвращенный системой, был равен null ( I7a695 ). - Конфигурация *Параметры режима были переименованы, чтобы отразить их поведение. ( I6d247 )
- Исправлены проблемы с FOV и
HitTest
вSceneCore
TestApp. ( I2c51e ) - Исправлена ошибка в
SpatialCapabilities.hasCapability()
, из-за которой возвращалось значение true, если хотя бы одно из свойств, переданных с помощью побитового ИЛИ, было true, вместо того, чтобы возвращать значение true только в том случае, если все они были true. ( I2cd40 ) -
SurfaceEntity.StereoMode.TOP_BOTTOM
обновлен таким образом, чтобы верхняя карта соответствовала левому глазу, а нижняя — правому глазу. ( I4ae68 )
Версия 1.0.0-альфа04
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
добавлены методы расширения обратного вызова пространственной видимости для отслеживания того, когда содержимое сцены перемещается внутрь или за пределы поля зрения пользователя. - В
SpatialAudioTrack
добавленsetPointSourceParams
, позволяющий обновлять параметры после создания трека. - Добавлен новый класс Scene со ссылками на API
Scenecore
. Scene будет доступен как свойство расширения Session. Функции внутриSessionExt
перенесены в Scene, поэтому импорт потребуется скорректировать; например,SessionExt.getScene(session)
.addSpatialCapababilitiesChangedListener
вместоSessionExt.addSpatialCapabilitiesChangedListener
. - Добавлен
ActivityPose.hitTestAsync
, позволяющий проводитьhitTest
по виртуальному содержимому. - Добавлен новый тип компонента
SpatialPointerComponent
, позволяющий клиентам указывать значок, отображаемый для указателя, или отключать его. В настоящее время этот компонент можно прикрепить только к экземплярамPanelEntity
. - Представляем новую фабрику
PanelEntity
, которая принимает размеры панели в метрах или пикселях. Старая фабрикаPanelEntity
, принимавшая два параметра типа «Размер» для панели, удалена.
Изменения API
- Убрано ограничение
RequiresApi(34)
для всех пакетов Jetpack XR. Это ограничение было излишним, поскольку Jetpack XR в настоящее время доступен только на устройствах с API уровня 34 и выше. ( Iae0f8 ) - Для проектов, выпущенных с использованием Kotlin 2.0, требуется использование KGP 2.0.0 или более поздней версии ( Idb6b5 ).
- Класс
PermissionHelper
был удален. -
PanelEntity.getPixelDensity
устарел. -
PanelEntity.setPixelDimensions
иPanelEntity.getPixelDimension
удалены и заменены наsetSizeInPixels
иgetSizeInPixels
. -
Entity.getActivitySpaceAlpha
удалён. Его можно заменить наEntity.getAlpha(Space.Activity)
. -
Entity.getWorldSpaceScale
удалён. Его можно заменить наEntity.getScale(Space.REAL\_WORLD)
. - Класс Session в
SceneCore
был удален в пользу Session в XR Runtime. -
StereoSurfaceEntity
переименован вSurfaceEntity
. -
Entity.setSize
иEntity.getSize
удалены, а те же методы добавлены вPanelEntity
. -
PointSourceAttributes
был переименован вPointSourceParams
. -
SpatializerConstants.SOURCE\_TYPE\_BYPASS
переименован вSpatializerConstants.SOURCE\_TYPE\_DEFAULT
. - Доступ к сущности
PointSourceParams
был изменен с публичного на внутренний. -
AnchorEntity.create
теперь требует настройкиPlaneTrackingMode
вSession.configure()
. - Для API
SpatialUser
теперь требуется настройкаHeadTrackingMode
вSession.configure()
. - Если
ResizableComponent
не подключен, будет выдан журнал уровня INFO вместо журнала уровня ERROR. - Класс Fov теперь является обычным классом Kotlin.
- Разделите
Entity.kt
, чтобы поместить каждый конкретный тип сущности в отдельный файл. - При создании нового
PanelEntity
большинство представлений будут перенаправлены наFrameLayout
. Это упрощает использованиеLayoutInspector
с пространственными панелями. - Текущий используемый экземпляр
XrExtensions
теперь зарегистрирован на платформе, чтобы облегчить отладку приложения.
Исправления ошибок
- Добавлено исправление для предотвращения сбоя, который мог возникнуть при перемещении
PanelEntity
сMovableComponent
иAnchorPlacement
. - Исправлена ошибка, из-за которой
ResizableComponent
предоставлял устаревшие размеры в обратном вызовеonResizeStart
. - Исправлен сбой при многократном вызове метода
dispose()
JxrPlatformAdapterAxr
.
Версия 1.0.0-альфа03
26 февраля 2025 г.
Выпущены androidx.xr.scenecore:scenecore:1.0.0-alpha03
и androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03
. Версия 1.0.0-alpha03 содержит эти коммиты .
Новые функции
- Минификация Proguard теперь поддерживается для кода Jetpack XR.
Исправления ошибок
- Дополнительные исправления для поддержки минимизации Proguard для Jetpack XR SceneCore ( I4f47e )
- Обновлено правило Jetpack XR Scenecore
ProGuard
для предотвращенияAbstractMethodError
для минифицированных клиентов. ( I91a01 )
Версия 1.0.0-альфа02
12 февраля 2025 г.
Выпущены androidx.xr.scenecore:scenecore:1.0.0-alpha02
и androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02
. Версия 1.0.0-alpha02 содержит эти коммиты .
Предстоящие критические изменения, затрагивающие приложения, созданные до версии 1.0.0-alpha02
- Фабричные методы были перенесены из класса
Session
в сопутствующий метод для каждого соответствующего типа:-
Session.createActivityPanelEntity(Dimensions, String, Activity, Pose)
был удален и заменен наActivityPanelEntity.create(Session, Dimensions, String, Pose)
-
Session.createAnchorEntity(Anchor)
был удален и заменен наAnchorEntity.create(Session, Anchor)
-
Session.createAnchorEntity(Dimensions, Int, Int, Duration)
был удален и заменен наAnchorEntity.create(Session, Dimensions, Int, Int, Duration)
-
Session.createEntity(String, Pose)
был удален и заменен наContentlessEntity.create(Session, String, Pose)
-
Session.createExrImageResource(String)
был удален и заменен наExrImage.create(Session, String)
-
Session.createGltfEntity(GltfModel, Pose)
был удален и заменен наGltfModelEntity.create(Session, GltfModel, Pose)
-
Session.createGltfModelResource(String)
был удален и заменен наGltfModel.create(Session, String)
-
Session.createInteractableComponent(Executor, InputEventListener)
был удален и заменен наInteractableComponent.create(Session, Executor, InputEventListener)
-
Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean)
был удален и заменен наMovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
-
Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose)
был удален и заменен наPanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
-
Session.createResizableComponent(Dimensions, Dimensions)
был удален и заменен наResizableComponent.create(Session, Dimensions, Dimensions)
-
Session.createStereoSurfaceEntity(Int, Dimensions, Pose)
был удален и заменен наStereoSurface.create(Session, Int, Dimensions, Pose)
-
- Были удалены следующие устаревшие методы:
-
Session.canEmbedActivityPanel(Activity)
удалён. Вместо него используйтеgetSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY)
. -
Session.hasSpatialCapability(Int)
был удалён. Он был заменён на методgetSpatialCapabilities().hasCapability()
как более фрагментированный способ проверки наличия пространственных возможностей, посколькуgetSpatialCapabilities()
возвращает объектSpatialCapabilities
. -
Session.requestFullSpaceMode()
был удален и заменен наSpatialEnvironment.requestFullSpaceMode()
-
Session.requestHomeSpaceMode()
был удален и заменен наSpatialEnvironment.requestHomeSpaceMode()
-
-
Session.setFullSpaceMode(Bundle)
иSession.setFullSpaceModeWithEnvironmentInherited(Bundle)
перенесены в функции расширения. Для доступа в файлы разработчика необходимо добавить новые импорты:-
import androidx.xr.scenecore.setFullSpaceMode
-
import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
-
-
Session.setPreferredAspectRatio(Activity, Float)
перенесен в функцию расширения. Для доступа к файлам разработчика потребуется добавить новый импорт:-
import androidx.xr.scenecore.setPreferredAspectRatio
-
-
Session.getEntitiesOfType(Class<out T>)
иSession.getEntityForRtEntity(RtEntity)
перенесены в функции расширения. Для доступа к ним в файлы разработчика необходимо добавить новые импорты:-
import androidx.xr.scenecore.getEntitiesOfType
-
import androidx.xr.scenecore.getEntityForRtEntity
-
-
Session.unpersistAnchor(Anchor)
был удален -
Session.createPersistedAnchorEntity(UUID)
был удален
Известные проблемы
-
PanelEntity.setCornerRadius()
иActivityPanelEntity.setCornerRadius()
могут не вступить в силу до следующего перемещения панели. Это можно устранить, переместив панель в ее текущее положение. - При вызове
BoundsChanged
вActivitySpace
некоторыеActivityPose
могли быть обновлены неправильно. Они будут обновлены при следующем вызовеOnSpaceUpdated
вActivitySpace
Нарушения и поведенческие изменения
-
PanelEntity
иActivityPanelEntity
будут иметь радиус угла по умолчанию 32dp или меньше, если ширина или высота панели меньше 32dp.
Новые API и возможности
- Представлен
StereoSurface.CanvasShape
, который позволяет создаватьSpherical
иHemispherical
холсты для рендеринга иммерсивных медиа. -
StereoSurfaceEntity.create()
теперь принимает параметрCanvasShape
. (Этот параметр в настоящее время игнорируется, но будет использоваться в будущей версии.) -
StereoSurfaceEntity.create()
больше не принимает параметрDimensions
. Приложения должны управлять размером холста, устанавливаяCanvasShape
-
StereoSurfaceEntity
имеет элементCanvasShape
, который можно задавать динамически. -
StereoSurfaceEntity.dimensions
теперь является свойством только для чтения; для изменения размеров приложениям следует задатьCanvasShape
. -
StereoSurfaceEntity
теперь позволяет сбрасыватьStereoMode
после построения.
Другие изменения
- MinSDK для времени компиляции уменьшен до 24. Все API Jetpack XR по-прежнему требуют API 34 во время выполнения.
- Фабрика сеансов
SceneCore
(Session.create
) больше не запускает намерение получить разрешениеSCENE_UNDERSTANDING
. Вместо этого клиентское приложение должно явно запросить разрешения у пользователя, прежде чем пытаться создать якоря. Создание якоря завершится ошибкой, если пользователь не предоставит разрешение.
Исправления ошибок
-
getActivitySpacePose()
был исправлен для учета масштабаActivitySpace
путем возврата значений перевода в масштабированных метрах, а не всегда в немасштабированных метрах.transformPoseTo
теперь также использует правильные единицы для вычисления изменений координат, когдаActivitySpace
участвует в исходном или целевом объекте. - Теперь при передаче нулевого значения параметра скайбокса с помощью
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom))
скайбокс будет полностью чёрным. Чтобы вернуться к системному скайбоксу и геометрии по умолчанию, используйтеsetSpatialEnvironmentPreference(null).
Версия 1.0.0-альфа01
12 декабря 2024 г.
Выпущен androidx.xr.scenecore:scenecore-* 1.0.0-alpha01
.
Возможности первого выпуска: первый релиз Jetpack SceneCore для разработчиков, библиотеки 3D-графов сцен для создания и управления иммерсивными сценами и окружениями. Эта библиотека позволяет размещать и упорядочивать 3D-модели и панели контента относительно друг друга, а также виртуальной или реальной среды.
- SpatialEnvironment : Создавайте полностью захватывающие впечатления, используя изображение скайбокса и/или геометрию 3D-модели в качестве фона для вашей XR-сцены вашего окружения. Или включите сквозное изображение, чтобы ваша виртуальная сцена интегрировалась с реальным окружением пользователя.
- PanelEntity : добавляйте 2D-контент в 3D-сцены, встраивая стандартные макеты Android и действия в пространственные панели, которые могут перемещаться или прикрепляться к реальным поверхностям.
- GltfModelEntity : размещайте, анимируйте и взаимодействуйте с 3D-моделями в вашей сцене. SceneCore поддерживает формат файлов glTF для простой интеграции с существующими моделями.
- SpatialAudio : добавьте окружающие и точечные источники звука в вашу 3D-сцену для получения полностью иммерсивного, пространственного звука.
- StereoSurfaceEntity : SceneCore поддерживает маршрутизацию контента, отображаемого на Android Surface, для левого и правого глаза. Это может использоваться для рендеринга стереоскопического контента в формате «бок о бок» или «сверху вниз», например, стереофотографий, 3D-видео или других динамически визуализируемых пользовательских интерфейсов. Приложения должны использовать MediaPlayer или ExoPlayer для декодирования видео.
- Система компонентов: SceneCore предлагает надежную и гибкую систему компонентов для добавления возможностей к вашему XR-контенту, включая возможности для пользователей перемещать, изменять размер и взаимодействовать с моделями и панелями.
- Якорь : при включенной функции сквозного пропуска вы можете прикреплять панели и модели к реальным поверхностям, предоставляя пользователям возможность бесшовной интеграции виртуального контента в реальную среду.
- Поза пользователя: получите доступ к местоположению пользователя на виртуальной сцене, чтобы сориентировать контент относительно его положения.
- SpatialCapabilities : создавайте полностью адаптивные приложения, использующие пространственные возможности (при их наличии), такие как 3D-позиционирование содержимого пользовательского интерфейса. Более того, ваше приложение может отслеживать изменения возможностей во время выполнения, чтобы адаптировать интерфейс в зависимости от того, как пользователь использует своё устройство Android XR.
Известные проблемы
- В настоящее время для использования Jetpack SceneCore требуется minSDK 30. В качестве обходного решения добавьте следующую запись в манифест
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>
, чтобы сборка и запуск были возможны с minSDK 23. - Сеанс может стать недействительным в различных ситуациях, которые автоматически пересоздают Activity, включая изменение размера главной панели, подключение периферийных устройств и переключение между светлым и тёмным режимами. В случае возникновения проблем с недействительностью сеанса можно сделать главную панель неизменяемой, использовать динамическую панель, отключить воссоздание Activity для определённых изменений конфигурации или отключить смену тем оформления в светлом/тёмном режиме.
- Перемещаемые и изменяемые по размеру компоненты не поддерживаются в GltfEntity.
- Entity.getSize() не поддерживается в GltfEntity.
- Приложения Jetpack XR должны запрашивать разрешение
android.permission.SCENE_UNDERSTANDING
в AndroidManifest. - Создание сеанса поддерживается только на устройствах Android XR. В настоящее время при создании сеанса и попытке использовать его на устройстве, отличном от Android XR, возникнет исключение RuntimeException.
- Установка скайбокса в значение null с помощью `SpatialEnvironment.setSpatialEnvironmentPreference() не приводит к созданию сплошного чёрного скайбокса, как описано в документации. Это может привести к использованию системного скайбокса по умолчанию или отсутствию изменений в текущем скайбоксе.
- Клиентам SceneCore следует добавить
implementation(“com.google.guava:listenablefuture-1.0”)
в конфигурацию Gradle для зависимостей своего приложения. В будущем выпуске SceneCore включит эту библиотеку как зависимостьapi
поэтому клиентам не придётся явно её объявлять. - SceneCore ошибочно включает
com.google.guava:guava-31.1-android
иcom.google.protobuf:protobuf-javalite
как транзитивные зависимости. Если это приводит к ошибкам дублирования классов в вашей сборке, эти две зависимости можно безопасно исключить. - Если ваше приложение использует SceneCore и включает ProGuard, оно аварийно завершится при создании сеанса. В качестве временного решения отключите ProGuard. Подробнее о включении ProGuard см. в этом руководстве .