Jetpack SceneCore
| Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
|---|---|---|---|---|
| 22 de outubro de 2025 | - | - | - | 1.0.0-alpha08 |
Declarar dependências
Para adicionar uma dependência ao XR SceneCore, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.
Adicione as dependências dos artefatos necessários ao arquivo build.gradle do
seu app ou módulo:
Groovy
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha08" // Optional dependencies for asynchronous conversions implementation "androidx.xr.scenecore:scenecore-guava:1.0.0-alpha08" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha08" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha08") // Optional dependencies for asynchronous conversions implementation("androidx.xr.scenecore:scenecore-guava:1.0.0-alpha08") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha08") }
Para mais informações sobre dependências, consulte Adicionar dependências de build.
Feedback
Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.
Consulte a documentação do Issue Tracker para saber mais.
Versão 1.0
Versão 1.0.0-alpha08
22 de outubro de 2025
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha08. A versão 1.0.0-alpha08 contém estes commits.
Mudanças na API
ActivityPanelEntity.moveActivityfoi renomeado comotransferActivity(I273c5, b/430332856).
Correções de bugs
:xr:scenecore:scenecore-spatial-renderinge:xr:scenecore:scenecore-spatial-coreadicionados como dependência de implementação de:xr:scenecore:scenecore(I6ab65, b/447000520).- Uma exceção é gerada se
session.scenefor acessado após a destruição da sessão. (I77e6f).
Versão 1.0.0-alpha07
24 de setembro de 2025
Lançamento de androidx.xr.scenecore:scenecore:1.0.0-alpha07, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07 e androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07. A versão 1.0.0-alpha07 contém estes commits.
Mudanças na API
fixedAspectRatiofoi renomeado comoisFixedAspectRatioEnablede transformado em uma propriedade booleana (I5c4e8, b/440588971).- Os simulacros
Scenecoreagora estão localizados no móduloxr:scenecore:scenecore-testing. (Idd951). shouldAutoHideContentfoi renomeado comoisAutoHideContentWhileResizingEnabledeshouldAlwaysShowOverlaycomoisAlwaysShowOverlayEnabled(I97c36, b/432335421).- Atualização das constantes
SceneCoreTextureSamplerpara facilitar a leitura. Por exemplo,TextureSampler.MinFilter.LINEARagora éTextureSampler.MIN_FILTER_LINEAR(Ib159c). - O setter
setKeyEntityda cena foi mesclado à variávelkeyEntity. Definir okeyEntitycomo uma entidade imovível, comoAnchorEntity, vai gerar umIllegalArgumentExceptionem vez de retornar um booleano falso. (I62080, b/428721695, b/422215745). - A variável
SpatialModeChangeListenerda cena foi substituída porsetSpatialModeChangedListener. Ele usa umConsumer<SpatialModeChangeEvent>em vez de umSpatialModeChangedListener. Agora,setSpatialModeChangedListenerpode receber um Executor opcionalmente. (I62080, b/428721695, b/422215745). - O parâmetro
bundlefoi removido deActivityPanelEntity.startActivity(I64344, b/430332856, b/430333040). SpatializerConstants.SOURCE_TYPE_BYPASSfoi renomeado comoSpatializerConstants.SOURCE_TYPE_DEFAULT(Ifc7fe, b/422215565)- Adição da constante
SpatialSoundPool.PLAY_FAILED. (Ifc7fe, b/422215565) - Adição de argumentos padrão aos métodos
SpatialSoundPool.play. (Ifc7fe, b/422215565) - Removemos o valor de retorno dos setters em
SpatialAudioTrackBuilder. (Ifc7fe, b/422215565) - Mudanças no SurfaceEntity
SurfaceEntity.CanvasShaperenomeado paraShapeSurfaceEntity.CanvasShape.Vr180Hemisphererenomeado paraHemisphereSurfaceEntity.CanvasShape.Vr360Sphererenomeado paraSphereSurfaceEntity.EdgeFeatheringParams.SmoothFeatherrenomeado paraRectangleFeatherSurfaceEntity.EdgeFeathingParams.SolidEdgerenomeado paraNoFeatheringSurfaceEntity.ContentSecurityLevelrenomeado paraSurfaceProtectionSurfaceEntity.ContentSecurityLevel.{values}adicionou um prefixoSURFACE_PROTECTION_.SurfaceEntity.SuperSampling.{$values}adicionou um prefixoSUPER_SAMPLING_SurfaceEntity.StereoMode.{values}adicionou um prefixoSTEREO_MODE_SurfaceEntity.ContentColorMetadata.maxCLLrenomeado comomaxContentLightLevel(I7eb5f, b/422216050, b/427529950)
launchActivityfoi renomeado comostartActivity(I7db90, b/430332856).Scene.activitySpaceRootfoi removido. UseScene.activitySpace. (I05ee8, b/378706624, b/422215745)configureBundleForFullSpaceModeLauncheconfigureBundleForFullSpaceModeLaunchWithEnvironmentInheritedforam renomeados comocreateBundleForFullSpaceModeLaunchecreateBundleForFullSpaceModeLaunchWithEnvironmentInherited, respectivamente, e movidos para o arquivo LaunchUtils.kt como métodos de nível superior e usam Session como o primeiro parâmetro (I64a2c, b/437186050).- A fábrica
GroupEntityagora retorna o tipoGroupEntityem vez de "Entity". (I66042).
Correções de bugs
- Gere um
IllegalStateExceptionquando uma instância de entidade for usada após a exclusão. (I90990, b/427314036, b/432063442).
Versão 1.0.0-alpha06
13 de agosto de 2025
Lançamento de androidx.xr.scenecore:scenecore:1.0.0-alpha06, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha06 e androidx.xr.scenecore:scenecore-testing:1.0.0-alpha06. A versão 1.0.0-alpha06 contém estes commits.
Mudanças na API
- Remover a restrição das APIs
BaseEntityeBaseScenePosedoSceneCore(88c0ff6)
Versão 1.0.0-alpha05
30 de julho de 2025
Lançamento de androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05, androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05 e androidx.xr.scenecore:scenecore:1.0.0-alpha05. A versão 1.0.0-alpha05 contém estes commits.
Novos recursos
- API Perceived Resolution adicionada a Panel Entities e
SurfaceEntities. (I118f6). - Métodos de callback
PerceivedResolutionadicionados a Scene.kt para monitorar a resolução percebida do painel principal da atividade no HSM. (I58084). SurfaceEntity: suporte adicionado para que o aplicativo solicite superamostragem no momento da criação. Isso permite que os aplicativos usem o filtro de superamostragem para suavização de serrilhamento. (I06913).- A propriedade
recommendedContentBoxInFullSpacefoi adicionada aActivitySpace. Ele retorna uma caixa recomendada para o conteúdo ser colocado no Modo de Espaço Ampliado. (I4cd6f). - Fornecido construtor sobrecarregado para modificador móvel que permite ancoragem. (Ic0c70)
Mudanças na API
Mudanças extensas na API foram feitas no SceneCore para esta versão. Várias classes foram renomeadas e/ou movidas para módulos diferentes, e a maioria dos métodos getter/setter foi substituída por propriedades do Kotlin. Embora prevejamos futuras mudanças interruptivas na API até o lançamento da primeira versão Beta, elas não serão tão disruptivas ou numerosas.
- As seguintes classes e interfaces foram renomeadas e/ou movidas:
androidx.xr.scenecore.PixelDimensionsparaandroidx.xr.runtime.math.IntSize2d;androidx.xr.scenecore.Dimensionsparaandroidx.xr.runtime.math.FloatSize3d;androidx.xr.scenecore.ActivityPoseparaScenePose,androidx.xr.scenecore.ContentlessEntityparaGroupEntity,androidx.xr.scenecore.PlaneTypeparaPlaneOrientation;androidx.xr.scenecore.PlaneSemanticparaPlaneSemanticType. (Ifd405)(I3b622) (If534d) - Vários setters para as propriedades de
Sceneforam definidos como privados. Eles não foram projetados para serem mutados por clientesSceneCore:activitySpace,activitySpaceRoot,mainPanelEntity,perceptionSpace,spatialCapabilities,spatialEnvironmentespatialUser. (I2f506). - Em "Entidade": mudamos o seguinte para propriedades:
get/setParent(),setContentDescription. DescontinuamosEntity.is/setHidden(). UseEntity.is/setEnabled. (Ibc4c6). - A classe
androidx.xr.scenecore.BasePanelEntityfoi removida. UsePanelEntitydiretamente. Substituição de getters e setters paraPanelEntitypor propriedades. A propriedadePanelEntity.sizemudou deFloat3dSizeparaFloat2dSize. Remoção do métodoandroidx.xr.scenecore.PanelEntity.getPixelDimensionsobsoleto. UsegetSizeInPixels. (Icc174). - A
androidx.xr.scenecore.OnSpaceUpdatedListenerfoi substituída pelaRunnable(I19308) SpatialUser.getCameraViews()foi substituído por uma propriedade. (Ib0cc5) ParaExrImageeGltfModel:, os métodoscreateforam alterados para serem funções de suspensão. Os parâmetros de criação foram modificados para aceitar umUriouPathem vez de umString. (Id8883) (I0d247), (I25706)- Movemos
SpatialEnvironment.requestFullSpaceModeeSpatialEnvironment.requestHomeSpaceModepara "Cena". Por exemplo, usesession.scene.requestFullSpaceMode()em vez desession.scene.spatialEnvironment.requestFullSpaceMode().addOnPassthroughOpacityChangedListenereaddOnSpatialEnvironmentChangedListeneragora têm substituições que aceitam executores opcionais. (I12fe0) (I6b21e) - Os seguintes métodos
SpatialEnvironmentobsoletos foram removidos:togglePassthrough,setPassthrough,setPassthroughOpacity,getPassthroughMode,getPassthroughOpacity,setSkyboxesetGeometry. Também foi removida a classeSpatialEnvironment.PassthroughModedescontinuada (I927bd) (I927bd) (I927bd). - Substituímos os seguintes getters e setters de
SpatialEnvironmentpor propriedades do Kotlin:getCurrentPassthroughOpacity(),get/setPassthroughOpacityPreference(),get/setSpatialEnvironmentPreference(),isSpatialEnvironmentPreferenceActive()(I33a7b) (Ie06e2) (Ie06e2). - O tipo de
SpatialEnvironmentPreference.preferredPassthroughOpacitymudou deFloat?paraFloat. Ele não aceita mais valores nulos. Em vez disso,SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCEé usado para indicar que não há preferência de opacidade. (I40107). - Atualizamos o parâmetro
windowBoundsPxparapixelDimensionse o tipo dele de Rect paraIntSize2dno método create. (I1926e) - O construtor
SpatialEnvironmentagora é interno (I75a51). - Substituímos as classes
SpatialPointerIconNoneeSpatialPointerIconCirclepelos objetos complementaresSpatialPointerIcon.NONEeSpatialPointerIcon.CIRCLE(I416d2). SpatialPointerIconemSpatialPointerComponentnão é mais anulável. UseSpatialPointerIcon.DEFAULTem vez de nulo para indicar que o ícone de ponteiro padrão do sistema deve ser usado. (I416d2)- Substituímos
androidx.xr.scenecore.AnchorEntity.getState()por uma propriedade somente leitura. Os parâmetros do métodoAnchorEntity.create()foram renomeados para maior clareza. Nos métodos deAnchorEntitypara definir e adicionar listeners, o listener foi movido para o argumento final para ativar lambdas finais.androidx.xr.scenecore.OnStateChangedListenerfoi substituído porAnchorEntitycomConsumer<AnchorEntity.State>. (I472e0). GltfModelEntity.getAnimationState()agora é uma propriedade. (I10b29).ActivitySpace.getBounds()foi substituído por uma propriedade.ActivitySpace.addBoundsChangedListenerfoi renomeado comoActivitySpace.addOnBoundsChangedListener. OActivitySpace.setOnSpaceUpdatedListenerfoi substituído por métodos de adição/remoção. (I4c956).- Para
AnchorPlacement: planeTypeFilter,anchorablePlaneOrientationsfoi renomeado comoplaneSemanticFilter, eplaneSemanticFilterfoi renomeado comoanchorablePlaneSemanticTypes. Adicionar umMovableComponenta umAnchorEntityouActivitySpacevai retornar "false".MoveListenerfoi renomeado comoEntityMoveListener shouldDisposeParentAnchor, que foi renomeado comodisposeParentOnReAnchor systemMovablee removido da funçãocreateem favor decreeateCustomMovable,createSystemMovableecreateAnchorable(If11c4). - Remove
SurfaceEntity.featherRadiusX/Ye adiciona um conceito de classeEdgeFeatheringParams. (Ic78fc). - O método
PanelEntity.enablePanelDepthTest()foi substituído pela propriedadepanelClippingConfig. DefinaScene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true)para ativar o teste de profundidade ouPanelClippingConfig(isDepthTestEnabled = false)para desativar. (I0cbe0). Scene.mainPanelEntityagora é do tipoMainPanelEntityem vez dePanelEntity(I7125a).- O método
setFullSpaceModeda cena foi renomeado comoconfigureBundleForFullSpaceModeLaunch, e o métodosetFullSpaceModeWithEnvironmentInheritedfoi renomeado comoconfigureBundleForFullSpaceModeLaunchWithEnvironmentInherited. (I0cbe0) (I0cbe0) - Os valores UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV e WITHIN_FOV de
SpatialVisibilityforam renomeados como SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW e SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW, respectivamente (Ie7e8c). - A classe
SpatialVisibilityfoi substituída por um objeto público com valores Int constantes.setSpatialVisibilityChangedListeneragora aceita umConsumer<Int>em vez deConsumer<SpatialVisibility>(Ie7e8c) - As constantes
PointerCaptureComponentforam renomeadas e movidas para o objetoPointerCaptureComponent.PointerCaptureState(I9c7ac). - A
PointerCaptureComponents' StateListenerfoi substituída pelaConsumer<Int>(I9c7ac) - Substituição de
InputEventListenerporConsumer<InputEvent>(I9c7ac) setPreferredAspectRatiofoi movido da classe Scene para o objetoSpatialWindowe usa Session como primeiro parâmetro. (I7b717)Entity.setHidden()substituído porEntity.setEnabled()eEntity.isHidden()substituído porEntity.isEnabled().setHidden(false)é igual asetEnabled(true)eisHidden() == !isEnabled(). (Icf0de).- O tipo
Entity.contentDescriptionmudou de String paraCharSequence. (Ie59be). Session.createeSession.configureagora geramSecurityExceptionquando não há permissões suficientes, em vez de retornarSessionCreatePermissionsNotGrantedouSessionConfigurePermissionsNotGranted. (I7c488)ResizableComponent.createagora exige umConsumer<ResizeEvent> ResizeEventListenerfoi substituído porConsumer<ResizeEvent> ResizableComponent.sizefoi renomeado comoResizableComponent.affordanceSize ResizableComponent.minimumSizefoi renomeado comoResizableComponent.minimumEntitySize ResizableComponent.maximumSizefoi renomeado comoResizableComponent.maximumEntitySize,ResizableComponent.autoHideContentfoi renomeado comoResizableComponent.shouldAutoHideContentResizableComponent.forceShowResizeOverlayfoi renomeado comoResizableComponent.shouldAlwaysShowOverlay(I97a2d).- Reduzimos
minSDKpara 24 emandroidx.xr.scenecoreeandroidx.xr.compose. Os pacotes de XR ainda exigem a API 34 no ambiente de execução. (I17224) - Removemos a restrição
RequiresApi(34)de todos os pacotes do Jetpack XR. Essa restrição era redundante, já que o Jetpack XR está disponível apenas em dispositivos com nível 34 ou mais da API. (Iae0f8) - O artefato principal
SceneCore(xr:scenecore:scenecore) vai conter apenas APIs assíncronas no estilo Kotlin. Os desenvolvedores Java podem depender da bibliotecaxr:scenecore:scenecore-guavapara acessar APIs compatíveis. (If221b). - Os projetos lançados com o Kotlin 2.0 exigem o KGP 2.0.0 ou mais recente para serem consumidos (Idb6b5)
- Agora, essa biblioteca usa anotações de nulidade do JSpecify, que são de uso de tipo. Os desenvolvedores Kotlin precisam usar o seguinte argumento do compilador para garantir o uso correto:
-Xjspecify-annotations=strict(esse é o padrão a partir da versão 2.1.0 do compilador Kotlin) (Ia8420). - Todos os métodos assíncronos que retornam
ListenableFutureforam substituídos por funções de suspensão do Kotlin. Os desenvolvedores Java que quiserem usar métodos assíncronos baseados emListenableFutureem vez de funções de suspensão do Kotlin agora precisam usar funções de extensão em:xr:scenecore-scenecore-guava. Por exemplo,GuavaExrImagecontém as funções assíncronas ExrImage equivalentes ao Guava,GuavaScenePosecontém as funções assíncronasScenePoseequivalentes ao Guava,GuavaGltfModelcontém as funções assíncronasGuava-equivalent GltfModeletc. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)
Correções de bugs
- Atualização da regra
ProGuarddo Jetpack XR Scenecore para evitarAbstractMethodErrorem clientes minimizados. (I91a01) - Outras correções para oferecer suporte à minificação do Proguard para Jetpack XR
SceneCore(I4f47e) - Correção de um bug em que um
InteractableComponentpodia causar uma falha se ohitPositionno HitInfo doInputEventfalhasse se ohitPositionretornado do sistema fosse nulo (I7a695). - Os valores do modo de configuração foram renomeados para refletir o comportamento deles. (I6d247).
- Correção de problemas com FOV e
HitTestnoSceneCoreTestApp. (I2c51e). - Correção de um bug em
SpatialCapabilities.hasCapability()em que ele retornava "true" se qualquer uma das funcionalidades transmitidas com um OR bit a bit fosse verdadeira, em vez de retornar "true" somente se todas fossem verdadeiras. (I2cd40) SurfaceEntity.StereoMode.TOP_BOTTOMatualizado para ter o mapa de cima no olho esquerdo e o mapa de baixo no olho direito. (I4ae68).
Versão 1.0.0-alpha04
7 de maio de 2025
Lançamento de androidx.xr.scenecore:scenecore:1.0.0-alpha04 e androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04. A versão 1.0.0-alpha04 contém estes commits.
Novos recursos
- O processamento de volta agora funciona em entidades de painel sem atividades incorporadas. Para que o processamento de volta funcione, é necessário especificar
android:enableOnBackInvokedCallback= "true"no manifesto do Android. - Agora, o
StereoSurfaceEntityoferece suporte à reprodução de MV-HEVC com dois novos valores deStereoMode: MULTIVIEW_LEFT_PRIMARY e MULTIVIEW_RIGHT_PRIMARY. PanelEntity.setSizeePanelEntity.getSizeagora retornam tamanhos no espaço principal.Entity.setPose,Entity.getPose,Entity.setScale,Entity.getScale,Entity.setAlphaeEntity.getAlphaagora usam um novo parâmetrorelativeTo, que permite receber/definir valores relativos a diferentes espaços. Os valores aceitos são "Parent", "Activity" e "Real World", e o valor padrão para esse parâmetro é "Parent".- Métodos de extensão de callback de visibilidade espacial adicionados a
SessionExt.ktpara monitorar quando o conteúdo da cena se move dentro ou fora do campo de visão do usuário. setPointSourceParamsfoi adicionado aSpatialAudioTrack, permitindo que os parâmetros sejam atualizados depois que a faixa for criada.- Adicionada uma nova classe, "Scene", com referências às APIs
Scenecore. A cena vai estar acessível como uma propriedade de extensão da sessão. As funções dentro deSessionExtforam movidas para "Scene", então as importações precisam ser ajustadas. Por exemplo,SessionExt.getScene(session).addSpatialCapababilitiesChangedListenerxSessionExt.addSpatialCapabilitiesChangedListener. - O
ActivityPose.hitTestAsyncfoi adicionado, permitindo umhitTestcontra conteúdo virtual. - Adição do novo tipo de componente
SpatialPointerComponent, permitindo que os clientes especifiquem o ícone renderizado para o ponteiro ou desativem o ícone. No momento, esse componente só pode ser anexado a instânciasPanelEntity. - Apresentamos a nova fábrica
PanelEntity, que usa as dimensões do painel em metros ou pixels. FábricaPanelEntitymais antiga que usa dois parâmetros de tipo de dimensão para o painel removido.
Mudanças na API
- Removemos a restrição
RequiresApi(34)de todos os pacotes do Jetpack XR. Essa restrição era redundante, já que o Jetpack XR está disponível apenas em dispositivos com nível 34 ou mais da API. (Iae0f8) - Os projetos lançados com o Kotlin 2.0 exigem o KGP 2.0.0 ou mais recente para serem consumidos (Idb6b5)
- A turma
PermissionHelperfoi removida. - O uso de
PanelEntity.getPixelDensityfoi descontinuado. PanelEntity.setPixelDimensionsePanelEntity.getPixelDimensionforam removidos e substituídos porsetSizeInPixelsegetSizeInPixels.- Opção
Entity.getActivitySpaceAlpharemovida. Pode ser substituído porEntity.getAlpha(Space.Activity). - Opção
Entity.getWorldSpaceScaleremovida. Pode ser substituído porEntity.getScale(Space.REAL\_WORLD). - A classe Session em
SceneCorefoi excluída em favor da sessão no XR Runtime. StereoSurfaceEntityfoi renomeado comoSurfaceEntityEntity.setSizeeEntity.getSizeforam removidos, e os mesmos métodos foram adicionados aPanelEntity.PointSourceAttributesfoi renomeado comoPointSourceParamsSpatializerConstants.SOURCE\_TYPE\_BYPASSfoi renomeado comoSpatializerConstants.SOURCE\_TYPE\_DEFAULT- A entidade
PointSourceParamsfoi modificada de acesso público para interno. - Agora, o
AnchorEntity.createexige que oPlaneTrackingModeseja configurado emSession.configure(). - As APIs
SpatialUseragora exigem queHeadTrackingModeseja configurado emSession.configure(). - Quando
ResizableComponentnão está anexado, ele gera um registro no nível INFO em vez de ERROR. - A classe Fov agora é uma classe Kotlin comum.
- Divida
Entity.ktpara colocar cada tipo de entidade concreta em um arquivo próprio. - Ao criar uma
PanelEntity, a maioria das visualizações será reassociada a umaFrameLayout. Isso facilita o uso deLayoutInspectorcom painéis espaciais. - A instância
XrExtensionsusada no momento está registrada na plataforma, da melhor maneira possível, para ajudar na depuração do app.
Correções de bugs
- Foi adicionada uma correção para evitar uma falha que poderia ocorrer quando um
PanelEntitycomMovableComponenteAnchorPlacementera movido - Foi corrigido um problema em que
ResizableComponentfornecia tamanhos desatualizados no callbackonResizeStart. - Correção de uma falha que acontecia quando o
dispose()deJxrPlatformAdapterAxrera chamado várias vezes.
Versão 1.0.0-alpha03
26 de fevereiro de 2025
Lançamento de androidx.xr.scenecore:scenecore:1.0.0-alpha03 e androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03. A versão 1.0.0-alpha03 contém estes commits.
Novos recursos
- Agora há suporte para a minimização do Proguard no código do Jetpack XR.
Correções de bugs
- Outras correções para oferecer suporte à minificação do Proguard para o Jetpack XR SceneCore (I4f47e)
- Atualização da regra
ProGuarddo Jetpack XR Scenecore para evitarAbstractMethodErrorem clientes minimizados. (I91a01)
Versão 1.0.0-alpha02
12 de fevereiro de 2025
Lançamento de androidx.xr.scenecore:scenecore:1.0.0-alpha02 e androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02. A versão 1.0.0-alpha02 contém estes commits.
Próxima mudança interruptiva que afeta apps criados antes da versão 1.0.0-alpha02
- Os métodos de fábrica foram movidos da classe
Sessionpara um método complementar em cada tipo respectivo:Session.createActivityPanelEntity(Dimensions, String, Activity, Pose)foi excluído e substituído porActivityPanelEntity.create(Session, Dimensions, String, Pose)Session.createAnchorEntity(Anchor)foi excluído e substituído porAnchorEntity.create(Session, Anchor)Session.createAnchorEntity(Dimensions, Int, Int, Duration)foi excluído e substituído porAnchorEntity.create(Session, Dimensions, Int, Int, Duration)Session.createEntity(String, Pose)foi excluído e substituído porContentlessEntity.create(Session, String, Pose)Session.createExrImageResource(String)foi excluído e substituído porExrImage.create(Session, String)Session.createGltfEntity(GltfModel, Pose)foi excluído e substituído porGltfModelEntity.create(Session, GltfModel, Pose)Session.createGltfModelResource(String)foi excluído e substituído porGltfModel.create(Session, String)Session.createInteractableComponent(Executor, InputEventListener)foi excluído e substituído porInteractableComponent.create(Session, Executor, InputEventListener)Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean)foi excluído e substituído porMovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose)foi excluído e substituído porPanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)Session.createResizableComponent(Dimensions, Dimensions)foi excluído e substituído porResizableComponent.create(Session, Dimensions, Dimensions)Session.createStereoSurfaceEntity(Int, Dimensions, Pose)foi excluído e substituído porStereoSurface.create(Session, Int, Dimensions, Pose)
- Os seguintes métodos descontinuados foram removidos:
Session.canEmbedActivityPanel(Activity)foi excluído. UsegetSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY).Session.hasSpatialCapability(Int)foi excluído. Ele foi substituído pelo uso degetSpatialCapabilities().hasCapability()como uma maneira mais compartimentada de verificar a presença de recursos espaciais, já quegetSpatialCapabilities()retorna um objetoSpatialCapabilities.Session.requestFullSpaceMode()foi excluído e substituído porSpatialEnvironment.requestFullSpaceMode()Session.requestHomeSpaceMode()foi excluído e substituído porSpatialEnvironment.requestHomeSpaceMode()
Session.setFullSpaceMode(Bundle)eSession.setFullSpaceModeWithEnvironmentInherited(Bundle)foram movidos para funções de extensão. Os arquivos do desenvolvedor precisam adicionar as novas importações para acesso:import androidx.xr.scenecore.setFullSpaceModeimport androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
Session.setPreferredAspectRatio(Activity, Float)foi movido para uma função de extensão. Os arquivos do desenvolvedor precisam adicionar a nova importação para acesso:import androidx.xr.scenecore.setPreferredAspectRatio
Session.getEntitiesOfType(Class<out T>)eSession.getEntityForRtEntity(RtEntity)foram movidos para funções de extensão. Os arquivos do desenvolvedor precisam adicionar as novas importações para acesso:import androidx.xr.scenecore.getEntitiesOfTypeimport androidx.xr.scenecore.getEntityForRtEntity
Session.unpersistAnchor(Anchor)foi excluídoSession.createPersistedAnchorEntity(UUID)foi excluído
Problemas conhecidos
PanelEntity.setCornerRadius()eActivityPanelEntity.setCornerRadius()só vão entrar em vigor quando o painel for movido novamente. Para evitar isso, mova o painel para a posição atual.- Quando
BoundsChangedé chamado noActivitySpace, algunsActivityPoses podem não ter sido atualizados corretamente. Ele será atualizado na próxima chamadaOnSpaceUpdatednoActivitySpace
Mudanças interruptivas e de comportamento
PanelEntityeActivityPanelEntityterão um raio de canto padrão de 32 dp ou menor se o painel tiver uma largura ou altura menor que 32 dp.
Novas APIs e recursos
- Apresenta o
StereoSurface.CanvasShape, que permite a criação de telasSphericaleHemisphericalpara renderizar mídia imersiva. StereoSurfaceEntity.create()agora aceita um parâmetroCanvasShape. (No momento, esse parâmetro é ignorado, mas será usado em uma versão futura)StereoSurfaceEntity.create()não usa mais um parâmetroDimensions. Os aplicativos precisam controlar o tamanho da tela definindo oCanvasShape.StereoSurfaceEntitytem um membroCanvasShapeque pode ser definido dinamicamente.StereoSurfaceEntity.dimensionsagora é uma propriedade somente leitura. Os aplicativos precisam definirCanvasShapepara mudar as dimensões.StereoSurfaceEntityagora permite que oStereoModeseja redefinido após a construção.
Outras mudanças
- Redução do minSDK no tempo de compilação para 24. Todas as APIs do Jetpack XR ainda exigem a API 34 no tempo de execução.
- A fábrica de sessões do
SceneCore(Session.create) não inicia mais uma intent para adquirir a permissãoSCENE_UNDERSTANDING. Em vez disso, o aplicativo cliente precisa pedir explicitamente as permissões ao usuário antes de tentar criar os âncoras. A criação de âncoras vai falhar se a permissão não for concedida pelo usuário.
Correções de bugs
getActivitySpacePose()foi corrigido para considerar a escalaActivitySpace, retornando valores de tradução em metros dimensionados em vez de sempre retornar metros não dimensionados. Agora,transformPoseTotambém usa as unidades certas para calcular mudanças de coordenadas quando oActivitySpaceestá envolvido na origem ou no destino.- A skybox agora será definida como uma skybox totalmente preta sempre que uma preferência de skybox nula for transmitida usando
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)). Para reverter para a skybox e a geometria padrão do sistema, usesetSpatialEnvironmentPreference(null)..
Versão 1.0.0-alpha01
12 de dezembro de 2024
Lançamento de androidx.xr.scenecore:scenecore-* 1.0.0-alpha01.
Recursos da versão inicial Versão inicial para desenvolvedores do Jetpack SceneCore, uma biblioteca de gráficos de cena 3D para criar e manipular cenas e ambientes imersivos. Com ela, é possível posicionar e organizar modelos 3D e painéis de conteúdo em relação uns aos outros e aos ambientes virtuais ou do mundo real.
- SpatialEnvironment: crie experiências totalmente imersivas com uma imagem de skybox e/ou geometria de modelo 3D como pano de fundo para a cena de XR do seu ambiente. Ou ative a transmissão direta para que a cena virtual possa se integrar ao ambiente real do usuário.
- PanelEntity: adicione conteúdo 2D às suas cenas 3D incorporando layouts e atividades padrão do Android em painéis espacializados que podem flutuar ou ser ancorados em superfícies do mundo real.
- GltfModelEntity: coloque, anime e interaja com modelos 3D na sua cena. O SceneCore é compatível com o formato de arquivo glTF para facilitar a integração com modelos atuais.
- SpatialAudio: adicione fontes de áudio ambiente e pontual à sua cena 3D para um som totalmente imersivo e espacializado.
- StereoSurfaceEntity: o SceneCore é compatível com o roteamento de conteúdo renderizado em uma superfície do Android para os olhos esquerdo e direito. Isso pode ser usado para renderizar conteúdo estereoscópico em um formato lado a lado ou de cima para baixo, como fotos estéreo, vídeos 3D ou outras interfaces renderizadas dinamicamente. Os aplicativos precisam usar o MediaPlayer ou o ExoPlayer para decodificação de vídeo.
- Sistema de componentes: o SceneCore oferece um sistema de componentes robusto e flexível para adicionar recursos ao seu conteúdo de RV, incluindo affordances para que os usuários movam, redimensionem e interajam com modelos e painéis.
- Fixação: com a transferência ativada, é possível anexar painéis e modelos a superfícies reais, oferecendo aos usuários uma integração perfeita de conteúdo virtual no ambiente do mundo real.
- Postura do usuário: acessa a localização do usuário na cena virtual para orientar o conteúdo de acordo com a posição dele.
- SpatialCapabilities: crie apps totalmente adaptáveis que aproveitam os recursos espacializados quando disponíveis, como o posicionamento 3D do conteúdo da interface. Além disso, o app pode monitorar mudanças nos recursos enquanto está em execução para modificar a experiência com base em como o usuário está usando o dispositivo Android XR.
Problemas conhecidos
- No momento, é necessário um minSDK de 30 para usar o Jetpack SceneCore. Como alternativa, adicione a seguinte entrada de manifesto
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>para criar e executar com um minSDK de 23. - A sessão pode ficar inválida em várias situações que recriam automaticamente a atividade, incluindo redimensionar um painel principal, conectar periféricos e alternar entre o modo claro e escuro. Se você encontrar problemas de invalidação de sessão, as soluções alternativas incluem tornar seu painel principal não redimensionável, usar uma entidade de painel dinâmico, desativar a recriação de atividades para mudanças de configuração específicas ou desativar as mudanças de tema do modo claro/escuro.
- Os componentes móveis e redimensionáveis não são compatíveis com GltfEntity.
- Entity.getSize() não é compatível com GltfEntity.
- Os apps do Jetpack XR precisam solicitar a permissão
android.permission.SCENE_UNDERSTANDINGno AndroidManifest. - A criação de uma sessão só é compatível com um dispositivo Android XR. No momento, se você criar uma sessão e tentar usá-la em um dispositivo que não seja Android XR, vai receber uma RuntimeException.
- Definir a skybox como nula usando "SpatialEnvironment.setSpatialEnvironmentPreference()" não resulta em uma skybox preta sólida, conforme documentado. Isso pode resultar na skybox padrão do sistema ou em nenhuma mudança na skybox atual.
- Os clientes do SceneCore precisam adicionar
implementation(“com.google.guava:listenablefuture-1.0”)à configuração do Gradle para as dependências do app. Em uma versão futura, o scenecore vai incluir essa biblioteca como uma dependênciaapipara que os clientes não precisem declará-la explicitamente. - O SceneCore inclui erroneamente
com.google.guava:guava-31.1-androidecom.google.protobuf:protobuf-javalitecomo dependências transitivas. Se isso resultar em erros de classe duplicados no seu build, essas duas dependências poderão ser excluídas com segurança. - Se o app usar o SceneCore e ativar o ProGuard, ele vai falhar quando você criar uma sessão. Como solução alternativa, desative o ProGuard. Consulte este guia para mais informações sobre como ativar o ProGuard.