Jetpack SceneCore
| Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
|---|---|---|---|---|
| 21 de outubro de 2026 | 1.0.0 | - | - | 1.1.0-alpha01 |
Declarar dependências
Para adicionar uma dependência ao XR SceneCore, é preciso incluir 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.1.0-alpha01" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.1.0-alpha01" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.1.0-alpha01") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.1.0-alpha01") }
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.1
Versão 1.1.0-alpha01
21 de outubro de 2026
Lançamento de androidx.xr.scenecore:scenecore-*:1.1.0-alpha01. A versão 1.1.0-alpha01 contém estes commits.
Mudanças na API
- Adicionamos APIs de atualização de malha dinâmica (
MeshBuffer.createDynamic,MeshBuffer.updateVertexData,MeshBuffer.updateIndexDatae um construtorCustomMesh.BuilderFromMeshDatadinâmico) para oferecer suporte à atualização de dados de vértice e índice no momento da execução. (Ia1ecb). - Adição de métodos auxiliares
VertexLayout.getBufferIndexpara recuperar facilmente o índice de buffer de um determinadoVertexAttributeouVertexBufferLayout. (I1a9e3). - Transformamos
CustomMesh.boundsem uma var para que a caixa delimitadora possa ser atualizada dinamicamente no momento da execução. (Ib0397). - As APIs de animação
glTF(GltfAnimation,GltfModelEntity.getAnimationseGltfModelEntity.stopAllAnimations) foram promovidas para públicas/estáveis, mantendo o setterGltfAnimation.loop como experimental eGltfAnimationStartOptionse start(options) como experimentais e descontinuados. (Iacdae). - Adicionamos
stopAllAnimations()aGltfModelEntity, removemos os parâmetros deGltfAnimation.start(), adicionamos as propriedadesloopespeedaGltfAnimatione descontinuamosGltfAnimationStartOptions,start(options)eseekTo(Duration). (I53105). - Atualizamos as APIs
GltfModelEntitypara documentarIllegalStateException(especificamenteEntity.DisposedException) quando chamadas em entidades descartadas. I65a76f
Correções de bugs
- A dependência
androidx.lifecycle:lifecycle-runtimefoi atualizada para 2.10.0. Essa versão é necessária para que as verificações de lint do ciclo de vida do pacote sejam executadas com o AGP versão 9.5.0-alpha04 ou mais recente. (I99bfd, b/556807521). - Melhoria dos kdocs relacionados a
AudioOutputProviderpara destacar que ele não deve ser reutilizado com várias instâncias deExoPlayer(I6b18e). - Remoção de dependências desnecessárias de
impressde vários módulos de XR. I84636c
Versão 1.0
Versão 1.0.0
21 de outubro de 2026
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0. A versão 1.0.0 contém estes commits.
Principais recursos da versão 1.0.0:
- O Jetpack XR SceneCore agora está estável. Com o SceneCore, é possível posicionar e organizar conteúdo 3D, definido por entidades, em relação um ao outro e ao ambiente. Com o SceneCore, é possível criar, posicionar e manipular painéis 2D e modelos 3D em cenas virtuais e de realidade mista, especificar ambientes espaciais e fontes de áudio espacial e fixar conteúdo virtual no mundo real.
- Para mais informações, consulte nossa página de visão geral e a referência da API.
Versão 1.0.0-rc02
7 de outubro de 2026
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-rc02. A versão 1.0.0-rc02 contém estas confirmações.
Correções de bugs
- Correção de um possível vazamento de memória removendo o
perceptionRuntimeCacheemSessionExte refatorando-o para recuperar oPerceptionRuntimediretamente da instânciaSession. (Ie35b1). - Correção de um possível vazamento de contexto usando
applicationContextpara identificadores nativosOpenXRpara garantir que o ambiente de execução nativo não mantenha referências a um contextoActivity. (Ie35b1). - Correção de disputas em
XrInstanceManagercom a introdução de bloqueio de sincronização e inicialização adequados. (Ie35b1). - Correção de
ReferenceCleanerpara oferecer suporte ao cancelamento do registro de ações de limpeza e garantia de que as ações de limpeza deEntitysejam executadas explicitamente durantedispose(), evitando a execução duplicada na coleta de lixo. (Ie35b1). - Correção de um vazamento de memória em
Sceneremovendo osceneCacheemSessionExte refatorandoScenepara buscar a instância diretamente desessionConnectors. (Ie35b1).
Versão 1.0.0-rc01
9 de setembro de 2026
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-rc01. A versão 1.0.0-rc01 contém estes commits.
Mudanças na API
- Adicionamos a biblioteca
xr:scenecore:scenecore-openxr. (Ic49f2). - Várias APIs descontinuadas foram removidas antes da versão estável 1.0.0.
Correções de bugs
- Foi resolvido um bug de vazamento de memória em que a referência da atividade podia ser retida pelo sistema quando a atividade era destruída. (I6dcd7).
Mudanças de comportamento
- A saída do logcat foi removida do SceneCore. (I10c3c).
Versão 1.0.0-beta02
12 de agosto de 2026
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-beta02. A versão 1.0.0-beta02 contém estes commits.
Correções de bugs
toMoveEvent()vai retornarnullse a entidade pai tiver sido coletada como lixo. (Ia7a1b).
Versão 1.0.0-beta01
15 de julho de 2026
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-beta01. A versão 1.0.0-beta01 contém estas confirmações.
Mudanças na API
- As APIs
GltfAnimationeSpatialGltfModelAnimationforam marcadas como experimentais. Algumas propriedades foram transformadas em getters. (I8d689, b/524771027). - O método de fábrica público
MovableComponent.createTrackingMovablefoi removido. (I00912, b/477169015). - Session.create foi convertida em uma função de suspensão. (I5d27f).
ActivitySpaceeAnchorSpaceagora estendem uma classeSpaceEntitycomum que contém o comportamento comum para entidades com posições controladas pelo sistema (I506ec, b/513619219).AnchorEntityfoi atualizado paraAnchorSpace(Ifa95e, b/513619219).- Fornece a API de teste público
SoundEffectPoolComponentTester. (I87df7, b/498104417). - Adição de um parâmetro
cornerRadiusopcional ao construtorSurfaceEntity.Shape.Quade definição da propriedadecornerRadiuscomo pública. Agora os desenvolvedores podem especificar um raio de canto ao criar uma forma Quad para renderizar telasSurfaceEntitycom cantos arredondados e consultar o raio de Quads existentes. (Ia7809, b/474681085). - Fornece sobrecargas de API de teste público
SpatialAudioTrackBuilderTester,SpatialAudioTrackTestereSceneCoreTestRule.getTester. (I378c6, b/496333938) - Adição de substituições especializadas de
toString()para vários tipos do ARCore. Esses tipos servem para fornecer mais informações aos desenvolvedores para fins de depuração e não devem ser usados em produção ou em aplicativos enviados.
Versão 1.0.0-alpha16
17 de junho de 2026
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha16. A versão 1.0.0-alpha16 contém estas confirmações.
Mudanças na API
- Adicionamos sobrecargas para
addVertexData,setIndexDataeaddSubsetaCustomMesh.BuilderFromMeshDataeCustomMesh.BuilderFromMeshBuffer. Essas sobrecargas permitem que os desenvolvedores transmitam dados brutos e parâmetros diretamente (por exemplo,ByteBuffer,offset,size,topology,indexOffset,indexCount) sem precisar envolvê-los em objetos intermediários, comoByteBufferRegionouMeshSubset. (I84d5c). Scene.requestFullSpaceMode()eScene.requestHomeSpaceMode()foram renomeados comorequestFullSpace()erequestHomeSpace(), respectivamente. Outros métodos e documentações que se referem ao "Modo de Espaço Compacto" e ao "Modo de Espaço Ampliado" foram atualizados de forma semelhante. (I45751).- Fornece as APIs de teste público
PanelEntityTestereMainPanelEntityTester(I961e4). - A propriedade
pointSourceParamsfoi adicionada aSoundEffectPoolComponent(I4a750). - Fornece a API de teste público
MovableComponentTester(I0c972). - Fornece a API de teste público
PointerCaptureComponentTester(Ic0d4f). - Fornece a API de teste público
ActivityPanelEntityTester(I837c4) - Fornece a API de teste público
ResizableComponentTester(I0a3a4). - Fornece a API de teste público
BoundsComponentTester.(Iefd53). - Disponibilização da API de teste público
SpatialMediaPlayerTester(Ia3e09). - Fornece a API de teste público
SpatialEnvironmentTester(Icf60f). - Fornece as APIs de teste públicas
GltfModelTestereSceneCoreTestRule.getGltfModelTester. (I33fcb). - Fornece a API de teste público
InteractableComponentTester. (Ia7096). - Fornece a API de teste público
SurfaceEntityTester. (Ic0740). - Fornece as APIs de teste público
GltfModelEntityTester,TestGltfModelNodeeTestGltfAnimation. (I72c4d). - Fornece as APIs de teste públicas
SceneTestereSceneCoreTestRule.sceneTester. (Ib4ec5). - Fornece as APIs de teste públicas
PerceptionSpaceTestereSceneCoreTestRule.perceptionSpaceTester. (Icf739). - Fornece a API de teste público
MeshEntityTester. (I63801). - Fornece sobrecargas de API de teste público
ImageBasedLightingAssetTestereSceneCoreTestRule.getTester. (I57ec4). - Fornece a API de teste público
TextureTester(Ia865b). - Fornece a API de teste público
PositionalAudioComponentTester(Icd96e). - Disponibilização da API de teste público
SpatialSoundPoolTester(Ia3531). - Fornece a API de teste público
SoundEffectPoolTester(If349a) - Fornece as APIs de teste públicas
ActivitySpaceTestereSceneCoreTestRule.activitySpaceTester. (I2d5c2). - Fornece a API de teste público
SpatialWindowTester(I41837). - Disponibilização da API de teste público
AnchorEntityTester(I68404). - Fornece a interface da API de teste público
SceneCoreTestRule. (Ic72d3). - A classe
PixelDensityfoi adicionada e exposta usandoScene#virtualPixelDensitypara fornecer uma proporção de pixels por metro baseada em hardware para um mapeamento preciso de dimensões físicas emActivitySpace. (I0e3ac). - Adicionamos APIs públicas para criar e renderizar malhas personalizadas. (I7ad2f).
- A API
VertexLayoutfoi atualizada para usar uma lista deVertexBufferLayouts, em que cadaVertexBufferLayoutdescreve os atributos em um único buffer de vértice. Isso permite arranjos de dados de vértices mais flexíveis, incluindo atributos intercalados com passos e deslocamentos personalizados. (Ic426b). - Fornece
MovableComponent.createTrackingMovablepara transformar um Trackable do ARCore em uma pose relativa ao Activity Space. (I12249). - O valor padrão do elemento pai em
Entity.createfoi atualizado para nulo. (Ic3145). Entityfoi atualizado para ser uma classe em vez de uma interface e agora é a classe de base para todos os tipos de entidade. Como parte dessa mudança,BaseEntityfoi removido. (I7fbc9).GltfModel,ExrImageeImageBasedLightingAssetagora implementamAutoCloseablepara permitir o gerenciamento idiomático de recursos usando o blocousedo Kotlin. (I1ac79).- Introdução da classe
ImageBasedLightingAssetpara substituirExrImagena definição da iluminação do ambiente espacial.ExrImagefoi descontinuado e removido da API pública.SpatialEnvironmentPreferencefoi atualizado para usarImageBasedLightingAsset. (I6c92a) - O parâmetro
skyboxemSpatialEnvironmentfoi renomeado comoimageBasedLightingAssetpara refletir melhor a finalidade dele. Além disso, esclarecemos que as texturas visuais do skybox precisam ser incluídas no parâmetro de geometria. (I24d4a). - As entidades espaciais agora usam uma densidade de dispositivo estável para cálculos de pixel para metro nos níveis 1 e 2 da API Spatial, garantindo um dimensionamento consistente, independente das mudanças na densidade de exibição do sistema. (I37051).
Versão 1.0.0-alpha15
19 de maio de 2026
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha15. A versão 1.0.0-alpha15 contém estas confirmações.
Mudanças na API
Entity.dispose()foi removida como API pública. Em vez de chamardispose()em instâncias de Entity, os apps podem tornar as instâncias limpáveis definindoparentcomonulle limpando todas as referências fortes a essas instâncias. (I396c9).- Os métodos
set/clearOnLoadCompleteListenerdeSoundEffectPoolforam excluídos. Em vez disso, useadd/removeLoadCompleteListener. (Iae78d). - O
set/clearSpatialVisibilityChangedListenerda cena foi substituído poradd/removeSpatialVisibilityChangedListener. (I67dff). - Todos os métodos
add/removeOnFooListenerdo SceneCore foram renomeados comoadd/removeFooListener, removendoOndo nome. (Ibe50b). - Os métodos
AnchorEntity.setOnOriginChangedListenereAnchorEntity.setOnStateChangedListenerforam substituídos por métodosadd/removeFooListenerpara oferecer suporte a vários listeners simultâneos. (I13749). AnchorEntity.State.TIMEDOUTfoi renomeado comoState.TIMED_OUT(Id2b8d).- A API Component foi refatorada para melhorar a segurança e a extensibilidade.
Componentagora é uma classe abstrata. Os métodosonAttach()eonDetach()agora sãoprotectedpara evitar chamadas diretas. UseEntity.addComponent()eEntity.removeComponent()para gerenciar os ciclos de vida dos componentes. (Id04e8). - As constantes
PlaneSemanticTypePlaneOrientationdo SceneCore foram migradas de Ints para tipos personalizados. As constantesANYserão removidas. Os clientes precisam enumerar explicitamente todas as constantes desejadas ou usar as novas constantes de conjunto imutável.ALL. O método de fábricaAnchorEntityagora aceita um conjunto desses tipos, em vez de um único valor. (Ib1033). - Adicionamos suporte à animação esquelética (skinning) à API Custom Mesh experimental. Agora os desenvolvedores podem animar malhas personalizadas especificando um
boneCountao criar umMeshEntitye atualizar a animação em tempo real usandoMeshEntity.setBoneTransforms(). (Id8ba2, b/496692490). - Introdução da API experimental
CustomMesh. Agora os desenvolvedores podem criar e renderizar de forma programática geometrias 3D nas cenas usandoCustomMesh,MeshBuffereMeshEntity. (I94617) - Contato removido:
androidx.xr.scenecore.SpatializerConstants.SourceType.SOURCE_TYPE_SOUND_FIELD. UseSourceType.SOUND_FIELD. (Ia68b9). - Adição de componentes de áudio espacial:
PositionalAudioComponent,SoundEffectPoolComponenteSoundFieldAudioComponent(Ieda89). AnchorEntity.getAnchorfoi substituído porAnchorEntity.anchore agora vai retornar umAnchorquando oAnchorEntityfor criado de umAnchordo ARCore (I5c7c8).- O valor padrão do parâmetro
parentnos métodos de fábricaActivityPanelEntity,GltfModelEntity,GroupEntity,PanelEntityeSurfaceEntityfoi alterado deActivitySpaceparanull. Para anexar uma entidade ao gráfico de cena e torná-la visível, os desenvolvedores agora precisam definir explicitamente o pai dela durante a instanciação ou usandoEntity.parent = ...(Ie7cc1).
Correções de bugs
- O
SceneCoreagora recupera automaticamente as instâncias deEntityquando elas se tornam acessíveis por fantasma, eliminando a necessidade de os desenvolvedores invocarem explicitamentedispose()para liberar recursos. Para garantir que uma instância de [Entity] seja recuperada corretamente, os desenvolvedores precisam:- Remova-o do gráfico de cena definindo o
parentcomonull. - Abra mão de todas as referências fortes à instância no código.
- Observação sobre tipos de entidade especiais: para entidades que não podem ser associadas a um pai (como
AnchorEntity), os desenvolvedores precisam manter uma referência forte enquanto a instância estiver em uso. Se todas as referências forem liberadas, essas instâncias vão se tornar acessíveis por fantasma e serão recuperadas automaticamente. (I83fe4).
- Remova-o do gráfico de cena definindo o
- Regras de manutenção do Proguard restritas para todas as bibliotecas
SceneCore. (I98447).
Problemas conhecidos
- Anexar um
PositionalAudioComponenta umEntitycom uma instânciaExoPlayerinativa vai causar uma falha. Não chamesetPointSourceParamsnem anexe/remova os componentes de áudio espacial enquanto o ExoPlayer estiver parado. Isso será corrigido na próxima versão.
Versão 1.0.0-alpha14
6 de maio de 2026
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha14. A versão 1.0.0-alpha14 contém estas confirmações.
Mudanças na API
TrackingStateeVpsAvailabilityResultforam movidos paraandroidx.xr.arcore package, e os tipos emandroidx.xr.runtimeforam descontinuados. (Ic7930, b/480462213).Plane.Typefoi renomeado comoPlaneType(I8c90c, b/482675376).Plane.Labelfoi renomeado comoPlaneLabel(Ic6b67, b/482675376).- O uso de
androidx.xr.runtime.FieldOfViewfoi descontinuado Useandroidx.xr.runtime.math.FieldOfView. (Ia01a0, b/480233045). Matrix4.posefoi renomeado comoMatrix4.toPose()A propriedade de pose foi descontinuada. (I329b4, b/493383490).- Os valores de tipo enumerado
HandJointTypeforam renomeados. (Ifbc83, b/482670596). Component.onAttacheonDetachforam expostos como API pública para permitir implementações personalizadas deComponent. (I0ca1f).- Adição de componentes de áudio espacial (I39ddd, b/489421980, b/436642086, b/436642499)
- Remover entidade de
PointSourceParams. Em vez disso, a entidade será usada diretamente comSpatialAudioTrack,SpatialSoundPooleSpatialMediaPlayer(Ib3685, b/489421980, b/436634048). - Renomeamos
DeviceTrackingMode.LAST_KNOWNcomoSPATIAL_LAST_KNOWN(com um substituto descontinuado), adicionamosINERTIAL_LAST_KNOWNpara rastreamento de 3DoF e adicionamosTRACKING_DEGRADEDaTrackingState. (Ie661c, b/445466590). - O uso de
GroupEntityfoi descontinuado. Para ter uma entidade apenas com a funcionalidade básica, chameEntity.create, que vai retornar uma interface Entity. (I4c450, b/473867483) - Adição da API
XrLog. DefinaXrLog.isEnabledcomotruepara ativar a geração de registros no JetpackXR e useXrLog.Levelpara definir o nível de registro. (I76a1f, b/463460895, b/487378441)
Correções de bugs
Scene.keyEntityagora tem como padrãomainPanelEntity. (I6a3ef).
Versão 1.0.0-alpha13
25 de março de 2026
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha13. A versão 1.0.0-alpha13 contém estas confirmações.
Mudanças na API
- A sinalização
unscaledGravityAlignedActivitySpacefoi removida deSession.create.ActivitySpaceagora é sempre sem escala e alinhado à gravidade. (If6f11, b/458173423). - As funções descontinuadas
setMaterialOverrideeclearMaterialOverrideforam removidas deGltfModelEntity, que agora são chamadas noGltfModelNodeindividual. (I2e5d2). - Adicionamos
transformPixelCoordinatesToLocalPositionetransformNormalizedCoordinatesToLocalPositionaPanelEntitye removemos métodos experimentais equivalentes que retornavam poses em vez de posiçõesVector3. (Ib6960, b/460123106, b/458333591). - Adicionamos APIs
GltfAnimationpara controlar animações glTF emSceneCore. (I2c172, b/466065486, b/465819070, b/465818617). ScenePose.activitySpacePosefoi renomeado comoScenePose.poseInActivitySpace(I8f175, b/427822261).- Adicionamos a implementação do ambiente de execução projetado do SceneCore (I9c4ab, b/476440158).
- Ao redimensionar a entidade do painel principal, ela pode se reposicionar na origem
ActivitySpace. A única solução alternativa é reposicionar o painel manualmente ou de forma programática no local original. Esse bug será corrigido em uma versão futura. (b/489427007). - Em alguns casos, a affordance para
MovableComponentpode não aparecer paraSurfaceEntitye outros tipos de entidade que não são do painel. Definir explicitamenteMovableComponent.sizefaz com que o recurso apareça. Esse bug será corrigido em uma versão futura (b/490983469).
Versão 1.0.0-alpha12
25 de fevereiro de 2026
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha12. A versão 1.0.0-alpha12 contém estes commits.
Problemas conhecidos
- As entidades fixadas podem se mover da posição fixada para a origem do espaço de atividade após alguns segundos.
- Os apps podem falhar ao criar instâncias de
SurfaceEntity. Esse problema foi resolvido noandroidx.xr.scenecore:scenecore-*:1.0.0-alpha13e nas versões subsequentes. Os apps afetados precisam ser atualizados para as versões mais recentes.
Mudanças na API
ActivitySpace.addOnSpaceUpdatedListenereActivitySpace.removeOnSpaceUpdatedListenerforam renomeados comoaddOnOriginChangedListenereremoveOnOriginChangedListener.AnchorEntity.setOnSpaceUpdatedListenerfoi renomeado comosetOnOriginChangedListener. (I5d8fb).- Adicionamos a propriedade de nome público a
FakeEntitye tornamos a visualização pública emFakePanelEntity. (Ifa1f9).
Correções de bugs
- Correção dos cálculos de densidade de pixels em imagens do sistema mais recentes (I57d04).
Versão 1.0.0-alpha11
28 de janeiro de 2026
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha11. A versão 1.0.0-alpha11 contém estes commits.
Mudanças na API
- Renomeia
PerceivedResolutionResult.InvalidCameraViewcomoPerceivedResolutionResult.InvalidRenderViewpoint, já que as APIsgetPerceivedResolutionagora dependem da APIRenderViewpointdo ARCore em vez deCameraViewScenePose. Esse nome reflete melhor a nova implementação. (I8c967, b/446989745, b/419311998). - Os métodos
PanelEntity/SurfaceEntity.getPerceivedResolutionagora usam umRenderViewpointfornecido pelo desenvolvedor como argumento. Antes, o ambiente de execução escolhia arbitrariamente oRenderViewpointusado no cálculo da resolução percebida. (I8c967, b/446989745, b/419311998). SpatialUser,ScenePose.HeadeScenePose.CameraViewforam removidos. A funcionalidade dessas APIs é coberta pelas APIsArDeviceeRenderViewpointno ARCore para Jetpack XR. Para receber umScenePosecorrespondente à cabeça ou ao olho esquerdo ou direito do usuário, os desenvolvedores podem usarPerceptionSpace.getScenePoseFromPerceptionPosecom a pose adequada recebida usando as APIs do ARCore. (I2f69c, b/446989745)
Versão 1.0.0-alpha10
3 de dezembro de 2025
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha10. A versão 1.0.0-alpha10 contém estes commits.
Mudanças na API
transformPixelCoordinatesToPoseetransformNormalizedCoordinatesToPoseforam adicionados aPanelEntity(I462b3).- Adicionamos uma classe auxiliar, Utils, ao ambiente de execução do
SceneCorecom base na lógica emSceneCore(I570b9).
Correções de bugs
- Correção de uma possível falha que pode ocorrer quando a sessão é destruída e um
SpatialModeChangeEventé recebido (If44e8). - Correção de um bug que poderia fazer com que uma
IllegalStateExceptionfosse gerada ao sair ou entrar novamente em uma atividade. (Ibff1c).
Versão 1.0.0-alpha09
19 de novembro de 2025
Lançamento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha09. A versão 1.0.0-alpha09 contém estes commits.
Novos recursos
- Adiciona uma API para recuperar um
ScenePoseque representa a composição da pose de origem do espaço de percepção e uma pose em relação à origem do espaço de percepção. (I5b50a). - Adicionamos a função
getGravityAlignedPose, A pose alinhada à gravidade ignora a inclinação e o rolamento da rotação. (I5ae21). - Os tipos de constante
AnchorEntity.Stateforam alterados de Ints para subtipos de State. (Ib0c49). - Adição de
getChildren()à interface Entity. Ciclo de vida deMainPanelEntityatualizado. (Ia69d6).
Mudanças na API
- Os tipos de constante
PointerCaptureComponent.PointerCaptureStatemudaram de Ints para subtiposPointerCaptureState. (Ic888a). Scene.spatialCapabilitiesagora é do tipoSet<SpatialCapability>em vez de um campo Int. As constantesSpatialCapabilityforam renomeadas. (I9c109).- Os tipos de constante
SurfaceEntityforam renomeados e mudaram de Ints para subtiposSurfaceEntity. (I419ed). - Os tipos de constante
SpatializerConstantforam renomeados e mudaram de Ints para subtiposSpatializerConstant. (Ia0e18). - Os tipos de constante
TextureSamplerforam renomeados e mudaram de Ints para subtiposTextureSampler. (I44078). - Os tipos de constante
SpatialVisibilityforam alterados de Ints para subtiposSpatialVisibility. (I70739). - Os tipos de constante
ResizeEvent.ResizeStateforam renomeados e mudaram de Ints para subtiposResizeState. (I384d5). - Os tipos de constante
InputEventforam renomeados e mudaram de Ints para herdar do respectivo tipo de inclusão. (I82817). - Os tipos de constante
GltfModelEntity.AnimationStatemudaram de Ints para subtiposAnimationState. (I24f4e). - Os tipos de constante
AlphaModeforam renomeados e mudaram de Ints para subtiposAlphaMode. (I27b56). - Os tipos de constante
Spaceforam alterados de Ints para subtipos de Space. (I9255b). ScenePose.hitTeste os métodos relacionados agora retornamnullse nenhuma interseção for encontrada, em vez de umHitTestResultcom umhitPositionnulo.HitTestResult.hitPositionnão é mais anulável. (I1400a).- As referências de
ActivityPoseforam alteradas paraScenePose. (I7fe43).
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-coreforam adicionados como dependência de implementação de:xr:scenecore:scenecore(I6ab65, b/447000520).- Uma exceção será 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).ScenecoreOs fakes agora estão localizados no móduloxr:scenecore:scenecore-testing. (Idd951).shouldAutoHideContentfoi renomeado comoisAutoHideContentWhileResizingEnabledeshouldAlwaysShowOverlaycomoisAlwaysShowOverlayEnabled(I97c36, b/432335421).- Atualizamos as constantes
TextureSamplerdeSceneCorepara facilitar a leitura. Por exemplo,TextureSampler.MinFilter.LINEARagora éTextureSampler.MIN_FILTER_LINEAR(Ib159c). - O setter
setKeyEntityda cena foi mesclado com a variávelkeyEntity. Definir okeyEntitycomo uma entidade imó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.setSpatialModeChangedListeneragora pode usar um Executor. (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).- Adicionamos a constante
SpatialSoundPool.PLAY_FAILED. (Ifc7fe, b/422215565). - Adicionamos argumentos padrão aos métodos
SpatialSoundPool.play. (Ifc7fe, b/422215565). - O valor de retorno dos setters em
SpatialAudioTrackBuilderfoi removido. (Ifc7fe, b/422215565). - Mudanças em SurfaceEntity
SurfaceEntity.CanvasShaperenomeouShapeSurfaceEntity.CanvasShape.Vr180HemisphererenomeouHemisphereSurfaceEntity.CanvasShape.Vr360SphererenomeouSphereSurfaceEntity.EdgeFeatheringParams.SmoothFeatherrenomeouRectangleFeatherSurfaceEntity.EdgeFeathingParams.SolidEdgerenomeouNoFeatheringSurfaceEntity.ContentSecurityLevelrenomeouSurfaceProtectionSurfaceEntity.ContentSecurityLevel.{values}adicionou um prefixoSURFACE_PROTECTION_.SurfaceEntity.SuperSampling.{$values}adicionou um prefixoSUPER_SAMPLING_SurfaceEntity.StereoMode.{values}adicionou um prefixoSTEREO_MODE_SurfaceEntity.ContentColorMetadata.maxCLLfoi renomeado comomaxContentLightLevel(I7eb5f, b/422216050, b/427529950).
launchActivityfoi renomeado comostartActivity(I7db90, b/430332856).- Contato removido:
Scene.activitySpaceRoot. 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, usando Session como primeiro parâmetro (I64a2c, b/437186050).- A fábrica
GroupEntityagora retorna o tipoGroupEntityem vez de Entity. (I66042).
Correções de bugs
- Gera um
IllegalStateExceptionquando uma instância de entidade é usada após o descarte. (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
- Remoção da restrição das APIs
BaseEntityeBaseScenePosedeSceneCore(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
- A API Perceived Resolution foi adicionada às entidades do painel e a
SurfaceEntities. (I118f6). PerceivedResolutionMétodos de callback adicionados ao Scene.kt para monitorar a resolução percebida do painel principal da atividade no HSM. (I58084).SurfaceEntity: adicionamos suporte para que o aplicativo solicite superamostragem no momento da criação. Isso permite que os aplicativos usem o filtro de superamostragem para suavização. (I06913).- A propriedade
recommendedContentBoxInFullSpacefoi adicionada aActivitySpace. Ele retorna uma caixa recomendada para o conteúdo ser colocado no Modo de Espaço Ampliado. (I4cd6f). - Foi fornecido um construtor sobrecarregado para o modificador móvel que permite a ancoragem. (Ic0c70).
Mudanças na API
Foram feitas mudanças extensas na API 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 antecipemos futuras mudanças interruptivas na API até nossa 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 tornados particulares. Eles não foram criados para serem modificados por clientes deSceneCore:activitySpace,activitySpaceRoot,mainPanelEntity,perceptionSpace,spatialCapabilities,spatialEnvironmentespatialUser. (I2f506). - Em Entity: as seguintes propriedades foram alteradas:
get/setParent(),setContentDescription.Entity.is/setHidden()foi descontinuado, useEntity.is/setEnabled. (Ibc4c6). - A classe
androidx.xr.scenecore.BasePanelEntityfoi removida. UsePanelEntitydiretamente. Substituição de getters e setters dePanelEntitypor propriedades. A propriedadePanelEntity.sizefoi modificada deFloat3dSizeparaFloat2dSize. O método descontinuadoandroidx.xr.scenecore.PanelEntity.getPixelDimensionsfoi removido. UsegetSizeInPixels. (Icc174). - A
androidx.xr.scenecore.OnSpaceUpdatedListenerfoi substituída pelaRunnable(I19308). - Substituição de
SpatialUser.getCameraViews()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) SpatialEnvironment.requestFullSpaceModeeSpatialEnvironment.requestHomeSpaceModeforam movidos para Scene. Por exemplo, usesession.scene.requestFullSpaceMode()em vez desession.scene.spatialEnvironment.requestFullSpaceMode().addOnPassthroughOpacityChangedListenereaddOnSpatialEnvironmentChangedListeneragora têm substituições que aceitam Executors opcionais. (I12fe0) (I6b21e)- Os seguintes métodos
SpatialEnvironmentdescontinuados foram removidos:togglePassthrough,setPassthrough,setPassthroughOpacity,getPassthroughMode,getPassthroughOpacity,setSkyboxesetGeometry. A classe descontinuadaSpatialEnvironment.PassthroughModetambém foi removida (I927bd) (I927bd) (I927bd). - Os seguintes getters e setters de
SpatialEnvironmentforam substituídos por 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). - O parâmetro
windowBoundsPxfoi atualizado parapixelDimensions, e o tipo dele foi alterado de Rect paraIntSize2dno método de criação. (I1926e). - O construtor
SpatialEnvironmentagora é interno (I75a51). - As classes
SpatialPointerIconNoneeSpatialPointerIconCircleforam substituídas pelos 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 precisa ser usado. (I416d2).- Substituição de
androidx.xr.scenecore.AnchorEntity.getState()por uma propriedade somente leitura. Os parâmetros no métodoAnchorEntity.create()foram renomeados para fins de esclarecimento. 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).- Substituição de
ActivitySpace.getBounds()por uma propriedade.ActivitySpace.addBoundsChangedListenerfoi renomeado comoActivitySpace.addOnBoundsChangedListener. Substituição deActivitySpace.setOnSpaceUpdatedListenerpor métodos de adição/remoção. (I4c956). - Para
AnchorPlacement: planeTypeFilter, foi renomeado comoanchorablePlaneOrientations,planeSemanticFilterfoi renomeado comoanchorablePlaneSemanticTypes. Adicionar umMovableComponenta umAnchorEntityouActivitySpacevai retornar falso,MoveListenerfoi renomeado comoEntityMoveListener shouldDisposeParentAnchor, que foi renomeado comodisposeParentOnReAnchor systemMovable, que foi removido da funçãocreateem favor decreeateCustomMovable,createSystemMovableecreateAnchorable(If11c4). - Remoção de
SurfaceEntity.featherRadiusX/Ye adição de 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 desativá-lo. (I0cbe0). Scene.mainPanelEntityagora é do tipoMainPanelEntityem vez dePanelEntity(I7125a).- O método
setFullSpaceModeda Scene 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). InputEventListenerfoi substituído porConsumer<InputEvent>(I9c7ac).setPreferredAspectRatiofoi movido da classe Scene para o objetoSpatialWindowe usa Session como primeiro parâmetro. (I7b717)Entity.setHidden()foi substituído porEntity.setEnabled(), eEntity.isHidden()foi substituído porEntity.isEnabled().setHidden(false)é igual asetEnabled(true)eisHidden() == !isEnabled(). (Icf0de).- O tipo de
Entity.contentDescriptionmudou de String paraCharSequence. (Ie59be). Session.createeSession.configureagora geramSecurityExceptionquando as permissões suficientes não são concedidas, em vez de retornarSessionCreatePermissionsNotGrantedouSessionConfigurePermissionsNotGranted. (I7c488).ResizableComponent.createagora exige queConsumer<ResizeEvent> ResizeEventListenerseja substituído porConsumer<ResizeEvent> ResizableComponent.size, que foi renomeado comoResizableComponent.affordanceSize ResizableComponent.minimumSize, que foi renomeado comoResizableComponent.minimumEntitySize ResizableComponent.maximumSize, que foi renomeado comoResizableComponent.maximumEntitySize,ResizableComponent.autoHideContentfoi renomeado comoResizableComponent.shouldAutoHideContent,ResizableComponent.forceShowResizeOverlayfoi renomeado comoResizableComponent.shouldAlwaysShowOverlay(I97a2d).- Reduzimos o
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 da API 34 ou mais recente. (Iae0f8) - O artefato principal
SceneCore(xr:scenecore:scenecore) vai conter apenas APIs assíncronas no estilo Kotlin. Os desenvolvedores Java podem usar a 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)
- Essa biblioteca agora usa as 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
- Atualizamos a regra do Jetpack XR Scenecore
ProGuardpara evitarAbstractMethodErrorpara clientes minificados. (I91a01). - Mais correções para oferecer suporte à minificação do Proguard para o Jetpack XR
SceneCore(I4f47e) - Correção de um bug em que um
InteractableComponentpoderia causar uma falha se ohitPositionno HitInfo doInputEventpudesse causar uma falha se ohitPositionretornado do sistema fosse nulo (I7a695). - Os valores de Config *Mode foram renomeados para refletir o comportamento deles. (I6d247).
- Correção de problemas com FOV e
HitTestno TestApp doSceneCore. (I2c51e). - Correção de um bug em
SpatialCapabilities.hasCapability()em que ele retornava verdadeiro se qualquer um dos recursos transmitidos com um OR bit a bit fosse verdadeiro, em vez de retornar verdadeiro apenas se todos fossem verdadeiros. (I2cd40). SurfaceEntity.StereoMode.TOP_BOTTOMatualizado para que o mapa superior seja associado ao olho esquerdo e o inferior ao 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 retorno agora funciona em entidades de painel sem atividades incorporadas. Para que o processamento de retorno funcione, é necessário especificar
android:enableOnBackInvokedCallback= "true"no manifesto do Android. StereoSurfaceEntityagora oferece 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 pai.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 compatíveis são Parent, Activity e Real World, e o valor padrão para esse parâmetro é Parent.- Adicionamos métodos de extensão de callback de visibilidade espacial ao
SessionExt.ktpara monitorar quando o conteúdo da cena se move para dentro ou para fora do campo de visão do usuário. setPointSourceParamsfoi adicionado aSpatialAudioTrack, permitindo que os parâmetros sejam atualizados após a criação da faixa.- Adicionamos uma nova classe, Scene, com referências às APIs
Scenecore. A cena será 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. ActivityPose.hitTestAsyncfoi adicionado, permitindo umhitTestem relação ao conteúdo virtual.- Adicionamos o novo tipo de componente
SpatialPointerComponent, que permite que os clientes especifiquem o ícone renderizado para o ponteiro ou o desativem. No momento, este componente só pode ser anexado a instânciasPanelEntity. - Introdução da nova fábrica
PanelEntity, que usa dimensões de painel em metros ou pixels. A fábricaPanelEntitymais antiga que usa dois parâmetros de tipo de dimensão para o painel foi removida.
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 da API 34 ou mais recente. (Iae0f8) - Os projetos lançados com o Kotlin 2.0 exigem o KGP 2.0.0 ou mais recente para serem consumidos (Idb6b5)
- A classe
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 Session 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. - O
AnchorEntity.createagora exige que oPlaneTrackingModeseja configurado emSession.configure(). - As APIs
SpatialUseragora exigem queHeadTrackingModeseja configurado emSession.configure(). - Quando
ResizableComponentnão estiver anexado, ele vai fornecer um registro de nível INFO em vez de um registro de nível ERROR. - A classe Fov agora é uma classe Kotlin comum.
- Divida
Entity.ktpara colocar cada tipo de entidade concreta no próprio arquivo. - Ao criar um novo
PanelEntity, a maioria das visualizações será reassociada a umFrameLayout. Isso facilita o uso deLayoutInspectorcom painéis espaciais. - A instância
XrExtensionsusada no momento agora 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. - Correção de um problema em que
ResizableComponentfornecia tamanhos desatualizados no callbackonResizeStart. - Correção de uma falha que ocorria 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
- A minificação do Proguard agora é compatível com o código do Jetpack XR
Correções de bugs
- Mais correções para oferecer suporte à minificação do Proguard para o SceneCore do Jetpack XR (I4f47e)
- Atualizamos a regra do Jetpack XR Scenecore
ProGuardpara evitarAbstractMethodErrorpara clientes minificados. (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 alteração 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 precisarão 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 precisarão 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ídaSession.createPersistedAnchorEntity(UUID)foi excluída
Problemas conhecidos
PanelEntity.setCornerRadius()eActivityPanelEntity.setCornerRadius()podem não entrar em vigor até que o painel seja movido novamente. Isso pode ser mitigado movendo 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 chamada deOnSpaceUpdatedemActivitySpace
Mudanças importantes e comportamentais
PanelEntityeActivityPanelEntityterão um raio de canto padrão de 32 dp ou menos se o painel tiver uma largura ou altura menor que 32 dp.
Novas APIs e recursos
- Introdução de
StereoSurface.CanvasShape, que permite a criação de telasSphericaleHemisphericalpara renderizar mídia imersiva. StereoSurfaceEntity.create()agora aceita um parâmetroCanvasShape. (Esse parâmetro é ignorado no momento, 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 de tempo de compilação para 24. Todas as APIs Jetpack XR continuam exigindo a API 34 no ambiente 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 solicitar explicitamente as permissões ao usuário antes de tentar criar as âncoras. A criação da âncora vai falhar se a permissão não for concedida pelo usuário.
Correções de bugs
getActivitySpacePose()foi corrigido para considerar a escala deActivitySpace, retornando valores de translação em metros dimensionados em vez de sempre retornar metros não dimensionados. OtransformPoseToagora também usa as unidades certas para calcular as mudanças de coordenadas quando oActivitySpaceestá envolvido na origem ou no destino.- Agora, a skybox será definida como 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 essa biblioteca, é possível posicionar e organizar modelos 3D e painéis de conteúdo em relação uns aos outros e aos ambientes virtuais ou reais.
- SpatialEnvironment: crie experiências totalmente imersivas com uma imagem de skybox e/ou geometria de modelo 3D como plano de fundo para a cena de XR do seu ambiente. Ou ative o passthrough para que sua 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: posicione, 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 os modelos atuais.
- SpatialAudio: adicione fontes de áudio ambiente e pontual à sua cena 3D para criar um som espacializado totalmente imersivo.
- StereoSurfaceEntity: o SceneCore oferece suporte ao roteamento de conteúdo renderizado em uma superfície do Android para o olho esquerdo/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 em 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 XR, incluindo recursos para que os usuários movam, redimensionem e interajam com modelos e painéis.
- Fixação: com o passthrough ativado, é possível anexar painéis e modelos a superfícies reais, oferecendo aos usuários uma integração perfeita do conteúdo virtual no ambiente real.
- Pose do usuário: acesse a localização do usuário na cena virtual para orientar seu conteúdo em torno da 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, seu 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 se tornar inválida em várias situações que recriam automaticamente a atividade, incluindo o redimensionamento de um painel principal, a conexão de periféricos e a mudança entre os modos claro e escuro. Se você tiver problemas de invalidação de sessão, as soluções alternativas incluem tornar o 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ó é possível em um dispositivo Android XR. No momento, se você criar uma Sessão e tentar usá-la em um dispositivo Android XR que não seja, vai receber uma RuntimeException.
- Definir o skybox como nulo usando `SpatialEnvironment.setSpatialEnvironmentPreference()` não resulta em um skybox preto sólido, como documentado. Isso pode resultar no skybox padrão do sistema ou em nenhuma mudança no 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 incorretamente
com.google.guava:guava-31.1-androidecom.google.protobuf:protobuf-javalitecomo dependências transitivas. Se isso resultar em erros de classe duplicada no 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.