Jetpack SceneCore

Crie e manipule o gráfico de cena do Android XR com conteúdo 3D.
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.

Criar novo problema

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.updateIndexData e um construtor CustomMesh.BuilderFromMeshData dinâ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.getBufferIndex para recuperar facilmente o índice de buffer de um determinado VertexAttribute ou VertexBufferLayout. (I1a9e3).
  • Transformamos CustomMesh.bounds em 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.getAnimations e GltfModelEntity.stopAllAnimations) foram promovidas para públicas/estáveis, mantendo o setter GltfAnimation.loop como experimental e GltfAnimationStartOptions e start(options) como experimentais e descontinuados. (Iacdae).
  • Adicionamos stopAllAnimations() a GltfModelEntity, removemos os parâmetros de GltfAnimation.start(), adicionamos as propriedades loop e speed a GltfAnimation e descontinuamos GltfAnimationStartOptions, start(options) e seekTo(Duration). (I53105).
  • Atualizamos as APIs GltfModelEntity para documentar IllegalStateException (especificamente Entity.DisposedException) quando chamadas em entidades descartadas. I65a76f

Correções de bugs

  • A dependência androidx.lifecycle:lifecycle-runtime foi 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 AudioOutputProvider para destacar que ele não deve ser reutilizado com várias instâncias de ExoPlayer (I6b18e).
  • Remoção de dependências desnecessárias de impress de 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 perceptionRuntimeCache em SessionExt e refatorando-o para recuperar o PerceptionRuntime diretamente da instância Session. (Ie35b1).
  • Correção de um possível vazamento de contexto usando applicationContext para identificadores nativos OpenXR para garantir que o ambiente de execução nativo não mantenha referências a um contexto Activity. (Ie35b1).
  • Correção de disputas em XrInstanceManager com a introdução de bloqueio de sincronização e inicialização adequados. (Ie35b1).
  • Correção de ReferenceCleaner para oferecer suporte ao cancelamento do registro de ações de limpeza e garantia de que as ações de limpeza de Entity sejam executadas explicitamente durante dispose(), evitando a execução duplicada na coleta de lixo. (Ie35b1).
  • Correção de um vazamento de memória em Scene removendo o sceneCache em SessionExt e refatorando Scene para buscar a instância diretamente de sessionConnectors. (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 retornar null se 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 GltfAnimation e SpatialGltfModelAnimation foram marcadas como experimentais. Algumas propriedades foram transformadas em getters. (I8d689, b/524771027).
  • O método de fábrica público MovableComponent.createTrackingMovable foi removido. (I00912, b/477169015).
  • Session.create foi convertida em uma função de suspensão. (I5d27f).
  • ActivitySpace e AnchorSpace agora estendem uma classe SpaceEntity comum que contém o comportamento comum para entidades com posições controladas pelo sistema (I506ec, b/513619219).
  • AnchorEntity foi atualizado para AnchorSpace (Ifa95e, b/513619219).
  • Fornece a API de teste público SoundEffectPoolComponentTester. (I87df7, b/498104417).
  • Adição de um parâmetro cornerRadius opcional ao construtor SurfaceEntity.Shape.Quad e definição da propriedade cornerRadius como pública. Agora os desenvolvedores podem especificar um raio de canto ao criar uma forma Quad para renderizar telas SurfaceEntity com cantos arredondados e consultar o raio de Quads existentes. (Ia7809, b/474681085).
  • Fornece sobrecargas de API de teste público SpatialAudioTrackBuilderTester, SpatialAudioTrackTester e SceneCoreTestRule.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, setIndexData e addSubset a CustomMesh.BuilderFromMeshData e CustomMesh.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, como ByteBufferRegion ou MeshSubset. (I84d5c).
  • Scene.requestFullSpaceMode() e Scene.requestHomeSpaceMode() foram renomeados como requestFullSpace() e requestHomeSpace(), 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 PanelEntityTester e MainPanelEntityTester (I961e4).
  • A propriedade pointSourceParams foi adicionada a SoundEffectPoolComponent (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 GltfModelTester e SceneCoreTestRule.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, TestGltfModelNode e TestGltfAnimation. (I72c4d).
  • Fornece as APIs de teste públicas SceneTester e SceneCoreTestRule.sceneTester. (Ib4ec5).
  • Fornece as APIs de teste públicas PerceptionSpaceTester e SceneCoreTestRule.perceptionSpaceTester. (Icf739).
  • Fornece a API de teste público MeshEntityTester. (I63801).
  • Fornece sobrecargas de API de teste público ImageBasedLightingAssetTester e SceneCoreTestRule.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 ActivitySpaceTester e SceneCoreTestRule.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 PixelDensity foi adicionada e exposta usando Scene#virtualPixelDensity para fornecer uma proporção de pixels por metro baseada em hardware para um mapeamento preciso de dimensões físicas em ActivitySpace. (I0e3ac).
  • Adicionamos APIs públicas para criar e renderizar malhas personalizadas. (I7ad2f).
  • A API VertexLayout foi atualizada para usar uma lista de VertexBufferLayouts, em que cada VertexBufferLayout descreve 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.createTrackingMovable para transformar um Trackable do ARCore em uma pose relativa ao Activity Space. (I12249).
  • O valor padrão do elemento pai em Entity.create foi atualizado para nulo. (Ic3145).
  • Entity foi 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, BaseEntity foi removido. (I7fbc9).
  • GltfModel, ExrImage e ImageBasedLightingAsset agora implementam AutoCloseable para permitir o gerenciamento idiomático de recursos usando o bloco use do Kotlin. (I1ac79).
  • Introdução da classe ImageBasedLightingAsset para substituir ExrImage na definição da iluminação do ambiente espacial. ExrImage foi descontinuado e removido da API pública. SpatialEnvironmentPreference foi atualizado para usar ImageBasedLightingAsset. (I6c92a)
  • O parâmetro skybox em SpatialEnvironment foi renomeado como imageBasedLightingAsset para 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 chamar dispose() em instâncias de Entity, os apps podem tornar as instâncias limpáveis definindo parent como null e limpando todas as referências fortes a essas instâncias. (I396c9).
  • Os métodos set/clearOnLoadCompleteListener de SoundEffectPool foram excluídos. Em vez disso, use add/removeLoadCompleteListener. (Iae78d).
  • O set/clearSpatialVisibilityChangedListener da cena foi substituído por add/removeSpatialVisibilityChangedListener. (I67dff).
  • Todos os métodos add/removeOnFooListener do SceneCore foram renomeados como add/removeFooListener, removendo On do nome. (Ibe50b).
  • Os métodos AnchorEntity.setOnOriginChangedListener e AnchorEntity.setOnStateChangedListener foram substituídos por métodos add/removeFooListener para oferecer suporte a vários listeners simultâneos. (I13749).
  • AnchorEntity.State.TIMEDOUT foi renomeado como State.TIMED_OUT (Id2b8d).
  • A API Component foi refatorada para melhorar a segurança e a extensibilidade. Component agora é uma classe abstrata. Os métodos onAttach() e onDetach() agora são protected para evitar chamadas diretas. Use Entity.addComponent() e Entity.removeComponent() para gerenciar os ciclos de vida dos componentes. (Id04e8).
  • As constantes PlaneSemanticType PlaneOrientation do SceneCore foram migradas de Ints para tipos personalizados. As constantes ANY serã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ábrica AnchorEntity agora 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 boneCount ao criar um MeshEntity e atualizar a animação em tempo real usando MeshEntity.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 usando CustomMesh, MeshBuffer e MeshEntity. (I94617)
  • Contato removido: androidx.xr.scenecore.SpatializerConstants.SourceType.SOURCE_TYPE_SOUND_FIELD. Use SourceType.SOUND_FIELD. (Ia68b9).
  • Adição de componentes de áudio espacial: PositionalAudioComponent, SoundEffectPoolComponent e SoundFieldAudioComponent (Ieda89).
  • AnchorEntity.getAnchor foi substituído por AnchorEntity.anchor e agora vai retornar um Anchor quando o AnchorEntity for criado de um Anchor do ARCore (I5c7c8).
  • O valor padrão do parâmetro parent nos métodos de fábrica ActivityPanelEntity, GltfModelEntity, GroupEntity, PanelEntity e SurfaceEntity foi alterado de ActivitySpace para null. 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 usando Entity.parent = ... (Ie7cc1).

Correções de bugs

  • O SceneCore agora recupera automaticamente as instâncias de Entity quando elas se tornam acessíveis por fantasma, eliminando a necessidade de os desenvolvedores invocarem explicitamente dispose() 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 parent como null.
    • 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).
  • Regras de manutenção do Proguard restritas para todas as bibliotecas SceneCore. (I98447).

Problemas conhecidos

  • Anexar um PositionalAudioComponent a um Entity com uma instância ExoPlayer inativa vai causar uma falha. Não chame setPointSourceParams nem 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

  • TrackingState e VpsAvailabilityResult foram movidos para androidx.xr.arcore package, e os tipos em androidx.xr.runtime foram descontinuados. (Ic7930, b/480462213).
  • Plane.Type foi renomeado como PlaneType (I8c90c, b/482675376).
  • Plane.Label foi renomeado como PlaneLabel (Ic6b67, b/482675376).
  • O uso de androidx.xr.runtime.FieldOfView foi descontinuado Use androidx.xr.runtime.math.FieldOfView. (Ia01a0, b/480233045).
  • Matrix4.pose foi renomeado como Matrix4.toPose() A propriedade de pose foi descontinuada. (I329b4, b/493383490).
  • Os valores de tipo enumerado HandJointType foram renomeados. (Ifbc83, b/482670596).
  • Component.onAttach e onDetach foram expostos como API pública para permitir implementações personalizadas de Component. (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 com SpatialAudioTrack, SpatialSoundPool e SpatialMediaPlayer (Ib3685, b/489421980, b/436634048).
  • Renomeamos DeviceTrackingMode.LAST_KNOWN como SPATIAL_LAST_KNOWN (com um substituto descontinuado), adicionamos INERTIAL_LAST_KNOWN para rastreamento de 3DoF e adicionamos TRACKING_DEGRADED a TrackingState. (Ie661c, b/445466590).
  • O uso de GroupEntity foi descontinuado. Para ter uma entidade apenas com a funcionalidade básica, chame Entity.create, que vai retornar uma interface Entity. (I4c450, b/473867483)
  • Adição da API XrLog. Defina XrLog.isEnabled como true para ativar a geração de registros no JetpackXR e use XrLog.Level para definir o nível de registro. (I76a1f, b/463460895, b/487378441)

Correções de bugs

  • Scene.keyEntity agora tem como padrão mainPanelEntity. (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 unscaledGravityAlignedActivitySpace foi removida de Session.create. ActivitySpace agora é sempre sem escala e alinhado à gravidade. (If6f11, b/458173423).
  • As funções descontinuadas setMaterialOverride e clearMaterialOverride foram removidas de GltfModelEntity, que agora são chamadas no GltfModelNode individual. (I2e5d2).
  • Adicionamos transformPixelCoordinatesToLocalPosition e transformNormalizedCoordinatesToLocalPosition a PanelEntity e removemos métodos experimentais equivalentes que retornavam poses em vez de posições Vector3. (Ib6960, b/460123106, b/458333591).
  • Adicionamos APIs GltfAnimation para controlar animações glTF em SceneCore. (I2c172, b/466065486, b/465819070, b/465818617).
  • ScenePose.activitySpacePose foi renomeado como ScenePose.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 MovableComponent pode não aparecer para SurfaceEntity e outros tipos de entidade que não são do painel. Definir explicitamente MovableComponent.size faz 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 no androidx.xr.scenecore:scenecore-*:1.0.0-alpha13 e nas versões subsequentes. Os apps afetados precisam ser atualizados para as versões mais recentes.

Mudanças na API

  • ActivitySpace.addOnSpaceUpdatedListener e ActivitySpace.removeOnSpaceUpdatedListener foram renomeados como addOnOriginChangedListener e removeOnOriginChangedListener. AnchorEntity.setOnSpaceUpdatedListener foi renomeado como setOnOriginChangedListener. (I5d8fb).
  • Adicionamos a propriedade de nome público a FakeEntity e tornamos a visualização pública em FakePanelEntity. (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.InvalidCameraView como PerceivedResolutionResult.InvalidRenderViewpoint, já que as APIs getPerceivedResolution agora dependem da API RenderViewpoint do ARCore em vez de CameraViewScenePose. Esse nome reflete melhor a nova implementação. (I8c967, b/446989745, b/419311998).
  • Os métodos PanelEntity/SurfaceEntity.getPerceivedResolution agora usam um RenderViewpoint fornecido pelo desenvolvedor como argumento. Antes, o ambiente de execução escolhia arbitrariamente o RenderViewpoint usado no cálculo da resolução percebida. (I8c967, b/446989745, b/419311998).
  • SpatialUser, ScenePose.Head e ScenePose.CameraView foram removidos. A funcionalidade dessas APIs é coberta pelas APIs ArDevice e RenderViewpoint no ARCore para Jetpack XR. Para receber um ScenePose correspondente à cabeça ou ao olho esquerdo ou direito do usuário, os desenvolvedores podem usar PerceptionSpace.getScenePoseFromPerceptionPose com 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

  • transformPixelCoordinatesToPose e transformNormalizedCoordinatesToPose foram adicionados a PanelEntity (I462b3).
  • Adicionamos uma classe auxiliar, Utils, ao ambiente de execução do SceneCore com base na lógica em SceneCore (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 IllegalStateException fosse 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 ScenePose que 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.State foram alterados de Ints para subtipos de State. (Ib0c49).
  • Adição de getChildren() à interface Entity. Ciclo de vida de MainPanelEntity atualizado. (Ia69d6).

Mudanças na API

  • Os tipos de constante PointerCaptureComponent.PointerCaptureState mudaram de Ints para subtipos PointerCaptureState. (Ic888a).
  • Scene.spatialCapabilities agora é do tipo Set<SpatialCapability> em vez de um campo Int. As constantes SpatialCapability foram renomeadas. (I9c109).
  • Os tipos de constante SurfaceEntity foram renomeados e mudaram de Ints para subtipos SurfaceEntity. (I419ed).
  • Os tipos de constante SpatializerConstant foram renomeados e mudaram de Ints para subtipos SpatializerConstant. (Ia0e18).
  • Os tipos de constante TextureSampler foram renomeados e mudaram de Ints para subtipos TextureSampler. (I44078).
  • Os tipos de constante SpatialVisibility foram alterados de Ints para subtipos SpatialVisibility. (I70739).
  • Os tipos de constante ResizeEvent.ResizeState foram renomeados e mudaram de Ints para subtipos ResizeState. (I384d5).
  • Os tipos de constante InputEvent foram renomeados e mudaram de Ints para herdar do respectivo tipo de inclusão. (I82817).
  • Os tipos de constante GltfModelEntity.AnimationState mudaram de Ints para subtipos AnimationState. (I24f4e).
  • Os tipos de constante AlphaMode foram renomeados e mudaram de Ints para subtipos AlphaMode. (I27b56).
  • Os tipos de constante Space foram alterados de Ints para subtipos de Space. (I9255b).
  • ScenePose.hitTest e os métodos relacionados agora retornam null se nenhuma interseção for encontrada, em vez de um HitTestResult com um hitPosition nulo. HitTestResult.hitPosition não é mais anulável. (I1400a).
  • As referências de ActivityPose foram alteradas para ScenePose. (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.moveActivity foi renomeado como transferActivity (I273c5, b/430332856).

Correções de bugs

  • :xr:scenecore:scenecore-spatial-rendering e :xr:scenecore:scenecore-spatial-core foram adicionados como dependência de implementação de :xr:scenecore:scenecore (I6ab65, b/447000520).
  • Uma exceção será gerada se session.scene for 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

  • fixedAspectRatio foi renomeado como isFixedAspectRatioEnabled e transformado em uma propriedade booleana (I5c4e8, b/440588971).
  • Scenecore Os fakes agora estão localizados no módulo xr:scenecore:scenecore-testing. (Idd951).
  • shouldAutoHideContent foi renomeado como isAutoHideContentWhileResizingEnabled e shouldAlwaysShowOverlay como isAlwaysShowOverlayEnabled (I97c36, b/432335421).
  • Atualizamos as constantes TextureSampler de SceneCore para facilitar a leitura. Por exemplo, TextureSampler.MinFilter.LINEAR agora é TextureSampler.MIN_FILTER_LINEAR (Ib159c).
  • O setter setKeyEntity da cena foi mesclado com a variável keyEntity. Definir o keyEntity como uma entidade imóvel, como AnchorEntity, vai gerar um IllegalArgumentException em vez de retornar um booleano falso. (I62080, b/428721695, b/422215745).
  • A variável SpatialModeChangeListener da cena foi substituída por setSpatialModeChangedListener. Ele usa um Consumer<SpatialModeChangeEvent> em vez de um SpatialModeChangedListener. setSpatialModeChangedListener agora pode usar um Executor. (I62080, b/428721695, b/422215745).
  • O parâmetro bundle foi removido de ActivityPanelEntity.startActivity (I64344, b/430332856, b/430333040).
  • SpatializerConstants.SOURCE_TYPE_BYPASS foi renomeado como SpatializerConstants.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 SpatialAudioTrackBuilder foi removido. (Ifc7fe, b/422215565).
  • Mudanças em SurfaceEntity
    • SurfaceEntity.CanvasShape renomeou Shape
    • SurfaceEntity.CanvasShape.Vr180Hemisphere renomeou Hemisphere
    • SurfaceEntity.CanvasShape.Vr360Sphere renomeou Sphere
    • SurfaceEntity.EdgeFeatheringParams.SmoothFeather renomeou RectangleFeather
    • SurfaceEntity.EdgeFeathingParams.SolidEdge renomeou NoFeathering
    • SurfaceEntity.ContentSecurityLevel renomeou SurfaceProtection
    • SurfaceEntity.ContentSecurityLevel.{values} adicionou um prefixo SURFACE_PROTECTION_.
    • SurfaceEntity.SuperSampling.{$values} adicionou um prefixo SUPER_SAMPLING_
    • SurfaceEntity.StereoMode.{values} adicionou um prefixo STEREO_MODE_
    • SurfaceEntity.ContentColorMetadata.maxCLL foi renomeado como maxContentLightLevel (I7eb5f, b/422216050, b/427529950).
  • launchActivity foi renomeado como startActivity (I7db90, b/430332856).
  • Contato removido: Scene.activitySpaceRoot. Use Scene.activitySpace. (I05ee8, b/378706624, b/422215745)
  • configureBundleForFullSpaceModeLaunch e configureBundleForFullSpaceModeLaunchWithEnvironmentInherited foram renomeados como createBundleForFullSpaceModeLaunch e createBundleForFullSpaceModeLaunchWithEnvironmentInherited, 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 GroupEntity agora retorna o tipo GroupEntity em vez de Entity. (I66042).

Correções de bugs

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 BaseEntity e BaseScenePose de SceneCore (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).
  • PerceivedResolution Mé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 recommendedContentBoxInFullSpace foi adicionada a ActivitySpace. 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.PixelDimensions para androidx.xr.runtime.math.IntSize2d; androidx.xr.scenecore.Dimensions para androidx.xr.runtime.math.FloatSize3d; androidx.xr.scenecore.ActivityPose para ScenePose, androidx.xr.scenecore.ContentlessEntity para GroupEntity, androidx.xr.scenecore.PlaneType para PlaneOrientation; androidx.xr.scenecore.PlaneSemantic para PlaneSemanticType. (Ifd405)(I3b622) (If534d)
  • Vários setters para as propriedades de Scene foram tornados particulares. Eles não foram criados para serem modificados por clientes de SceneCore: activitySpace, activitySpaceRoot, mainPanelEntity, perceptionSpace, spatialCapabilities, spatialEnvironment e spatialUser. (I2f506).
  • Em Entity: as seguintes propriedades foram alteradas: get/setParent(), setContentDescription. Entity.is/setHidden() foi descontinuado, use Entity.is/setEnabled. (Ibc4c6).
  • A classe androidx.xr.scenecore.BasePanelEntity foi removida. Use PanelEntity diretamente. Substituição de getters e setters de PanelEntity por propriedades. A propriedade PanelEntity.size foi modificada de Float3dSize para Float2dSize. O método descontinuado androidx.xr.scenecore.PanelEntity.getPixelDimensions foi removido. Use getSizeInPixels. (Icc174).
  • A androidx.xr.scenecore.OnSpaceUpdatedListener foi substituída pela Runnable (I19308).
  • Substituição de SpatialUser.getCameraViews() por uma propriedade. (Ib0cc5) Para ExrImage e GltfModel:, os métodos create foram alterados para serem funções de suspensão. Os parâmetros de criação foram modificados para aceitar um Uri ou Path em vez de um String. (Id8883) (I0d247), (I25706)
  • SpatialEnvironment.requestFullSpaceMode e SpatialEnvironment.requestHomeSpaceMode foram movidos para Scene. Por exemplo, use session.scene.requestFullSpaceMode() em vez de session.scene.spatialEnvironment.requestFullSpaceMode(). addOnPassthroughOpacityChangedListener e addOnSpatialEnvironmentChangedListener agora têm substituições que aceitam Executors opcionais. (I12fe0) (I6b21e)
  • Os seguintes métodos SpatialEnvironment descontinuados foram removidos: togglePassthrough, setPassthrough, setPassthroughOpacity, getPassthroughMode, getPassthroughOpacity, setSkybox e setGeometry. A classe descontinuada SpatialEnvironment.PassthroughMode também foi removida (I927bd) (I927bd) (I927bd).
  • Os seguintes getters e setters de SpatialEnvironment foram substituídos por propriedades do Kotlin: getCurrentPassthroughOpacity(), get/setPassthroughOpacityPreference(), get/setSpatialEnvironmentPreference(), isSpatialEnvironmentPreferenceActive() (I33a7b) (Ie06e2) (Ie06e2).
  • O tipo de SpatialEnvironmentPreference.preferredPassthroughOpacity mudou de Float? para Float. 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 windowBoundsPx foi atualizado para pixelDimensions, e o tipo dele foi alterado de Rect para IntSize2d no método de criação. (I1926e).
  • O construtor SpatialEnvironment agora é interno (I75a51).
  • As classes SpatialPointerIconNone e SpatialPointerIconCircle foram substituídas pelos objetos complementares SpatialPointerIcon.NONE e SpatialPointerIcon.CIRCLE (I416d2).
  • SpatialPointerIcon em SpatialPointerComponent não é mais anulável. Use SpatialPointerIcon.DEFAULT em 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étodo AnchorEntity.create() foram renomeados para fins de esclarecimento. Nos métodos de AnchorEntity para definir e adicionar listeners, o listener foi movido para o argumento final para ativar lambdas finais. androidx.xr.scenecore.OnStateChangedListener foi substituído por AnchorEntity com Consumer<AnchorEntity.State>. (I472e0).
  • GltfModelEntity.getAnimationState() agora é uma propriedade. (I10b29).
  • Substituição de ActivitySpace.getBounds() por uma propriedade. ActivitySpace.addBoundsChangedListener foi renomeado como ActivitySpace.addOnBoundsChangedListener. Substituição de ActivitySpace.setOnSpaceUpdatedListener por métodos de adição/remoção. (I4c956).
  • Para AnchorPlacement: planeTypeFilter, foi renomeado como anchorablePlaneOrientations, planeSemanticFilter foi renomeado como anchorablePlaneSemanticTypes. Adicionar um MovableComponent a um AnchorEntity ou ActivitySpace vai retornar falso, MoveListener foi renomeado como EntityMoveListener shouldDisposeParentAnchor, que foi renomeado como disposeParentOnReAnchor systemMovable, que foi removido da função create em favor de creeateCustomMovable, createSystemMovable e createAnchorable (If11c4).
  • Remoção de SurfaceEntity.featherRadiusX/Y e adição de um conceito de classe EdgeFeatheringParams. (Ic78fc).
  • O método PanelEntity.enablePanelDepthTest() foi substituído pela propriedade panelClippingConfig. Defina Scene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true) para ativar o teste de profundidade ou PanelClippingConfig(isDepthTestEnabled = false) para desativá-lo. (I0cbe0).
  • Scene.mainPanelEntity agora é do tipo MainPanelEntity em vez de PanelEntity (I7125a).
  • O método setFullSpaceMode da Scene foi renomeado como configureBundleForFullSpaceModeLaunch, e o método setFullSpaceModeWithEnvironmentInherited foi renomeado como configureBundleForFullSpaceModeLaunchWithEnvironmentInherited. (I0cbe0) (I0cbe0)
  • Os valores UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV e WITHIN_FOV de SpatialVisibility foram 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 SpatialVisibility foi substituída por um objeto público com valores Int constantes. setSpatialVisibilityChangedListener agora aceita um Consumer<Int> em vez de Consumer<SpatialVisibility> (Ie7e8c)
  • As constantes PointerCaptureComponent foram renomeadas e movidas para o objeto PointerCaptureComponent.PointerCaptureState (I9c7ac).
  • A PointerCaptureComponents' StateListener foi substituída pela Consumer<Int> (I9c7ac).
  • InputEventListener foi substituído por Consumer<InputEvent> (I9c7ac).
  • setPreferredAspectRatio foi movido da classe Scene para o objeto SpatialWindow e usa Session como primeiro parâmetro. (I7b717)
  • Entity.setHidden() foi substituído por Entity.setEnabled(), e Entity.isHidden() foi substituído por Entity.isEnabled(). setHidden(false) é igual a setEnabled(true) e isHidden() == !isEnabled(). (Icf0de).
  • O tipo de Entity.contentDescription mudou de String para CharSequence. (Ie59be).
  • Session.create e Session.configure agora geram SecurityException quando as permissões suficientes não são concedidas, em vez de retornar SessionCreatePermissionsNotGranted ou SessionConfigurePermissionsNotGranted. (I7c488).
  • ResizableComponent.create agora exige que Consumer<ResizeEvent> ResizeEventListener seja substituído por Consumer<ResizeEvent> ResizableComponent.size, que foi renomeado como ResizableComponent.affordanceSize ResizableComponent.minimumSize, que foi renomeado como ResizableComponent.minimumEntitySize ResizableComponent.maximumSize, que foi renomeado como ResizableComponent.maximumEntitySize, ResizableComponent.autoHideContent foi renomeado como ResizableComponent.shouldAutoHideContent, ResizableComponent.forceShowResizeOverlay foi renomeado como ResizableComponent.shouldAlwaysShowOverlay (I97a2d).
  • Reduzimos o minSDK para 24 em androidx.xr.scenecore e androidx.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 biblioteca xr:scenecore:scenecore-guava para 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 ListenableFuture foram substituídos por funções de suspensão do Kotlin. Os desenvolvedores Java que quiserem usar métodos assíncronos baseados em ListenableFuture em vez de funções de suspensão do Kotlin agora precisam usar funções de extensão em :xr:scenecore-scenecore-guava. Por exemplo, GuavaExrImage contém as funções assíncronas ExrImage equivalentes ao Guava, GuavaScenePose contém as funções assíncronas ScenePose equivalentes ao Guava, GuavaGltfModel contém as funções assíncronas Guava-equivalent GltfModel etc. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)

Correções de bugs

  • Atualizamos a regra do Jetpack XR Scenecore ProGuard para evitar AbstractMethodError para 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 InteractableComponent poderia causar uma falha se o hitPosition no HitInfo do InputEvent pudesse causar uma falha se o hitPosition retornado 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 HitTest no TestApp do SceneCore. (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_BOTTOM atualizado 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.
  • StereoSurfaceEntity agora oferece suporte à reprodução de MV-HEVC com dois novos valores de StereoMode: MULTIVIEW_LEFT_PRIMARY e MULTIVIEW_RIGHT_PRIMARY.
  • PanelEntity.setSize e PanelEntity.getSize agora retornam tamanhos no espaço pai.
  • Entity.setPose, Entity.getPose, Entity.setScale, Entity.getScale, Entity.setAlpha e Entity.getAlpha agora usam um novo parâmetro relativeTo, 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.kt para monitorar quando o conteúdo da cena se move para dentro ou para fora do campo de visão do usuário.
  • setPointSourceParams foi adicionado a SpatialAudioTrack, 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 de SessionExt foram movidas para Scene, então as importações precisam ser ajustadas, por exemplo, SessionExt.getScene(session).addSpatialCapababilitiesChangedListener x SessionExt.addSpatialCapabilitiesChangedListener.
  • ActivityPose.hitTestAsync foi adicionado, permitindo um hitTest em 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âncias PanelEntity.
  • Introdução da nova fábrica PanelEntity, que usa dimensões de painel em metros ou pixels. A fábrica PanelEntity mais 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 PermissionHelper foi removida.
  • O uso de PanelEntity.getPixelDensity foi descontinuado.
  • PanelEntity.setPixelDimensions e PanelEntity.getPixelDimension foram removidos e substituídos por setSizeInPixels e getSizeInPixels.
  • Opção Entity.getActivitySpaceAlpha removida. Pode ser substituído por Entity.getAlpha(Space.Activity).
  • Opção Entity.getWorldSpaceScale removida. Pode ser substituído por Entity.getScale(Space.REAL\_WORLD).
  • A classe Session em SceneCore foi excluída em favor da Session no XR Runtime.
  • StereoSurfaceEntity foi renomeado como SurfaceEntity
  • Entity.setSize e Entity.getSize foram removidos, e os mesmos métodos foram adicionados a PanelEntity.
  • PointSourceAttributes foi renomeado como PointSourceParams
  • SpatializerConstants.SOURCE\_TYPE\_BYPASS foi renomeado como SpatializerConstants.SOURCE\_TYPE\_DEFAULT
  • A entidade PointSourceParams foi modificada de acesso público para interno.
  • O AnchorEntity.create agora exige que o PlaneTrackingMode seja configurado em Session.configure().
  • As APIs SpatialUser agora exigem que HeadTrackingMode seja configurado em Session.configure().
  • Quando ResizableComponent nã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.kt para colocar cada tipo de entidade concreta no próprio arquivo.
  • Ao criar um novo PanelEntity, a maioria das visualizações será reassociada a um FrameLayout. Isso facilita o uso de LayoutInspector com painéis espaciais.
  • A instância XrExtensions usada 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 PanelEntity com MovableComponent e AnchorPlacement era movido.
  • Correção de um problema em que ResizableComponent fornecia tamanhos desatualizados no callback onResizeStart.
  • Correção de uma falha que ocorria quando o dispose() de JxrPlatformAdapterAxr era 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 ProGuard para evitar AbstractMethodError para 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 Session para um método complementar em cada tipo respectivo:
    • Session.createActivityPanelEntity(Dimensions, String, Activity, Pose) foi excluído e substituído por ActivityPanelEntity.create(Session, Dimensions, String, Pose)
    • Session.createAnchorEntity(Anchor) foi excluído e substituído por AnchorEntity.create(Session, Anchor)
    • Session.createAnchorEntity(Dimensions, Int, Int, Duration) foi excluído e substituído por AnchorEntity.create(Session, Dimensions, Int, Int, Duration)
    • Session.createEntity(String, Pose) foi excluído e substituído por ContentlessEntity.create(Session, String, Pose)
    • Session.createExrImageResource(String) foi excluído e substituído por ExrImage.create(Session, String)
    • Session.createGltfEntity(GltfModel, Pose) foi excluído e substituído por GltfModelEntity.create(Session, GltfModel, Pose)
    • Session.createGltfModelResource(String) foi excluído e substituído por GltfModel.create(Session, String)
    • Session.createInteractableComponent(Executor, InputEventListener) foi excluído e substituído por InteractableComponent.create(Session, Executor, InputEventListener)
    • Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean) foi excluído e substituído por MovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
    • Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose) foi excluído e substituído por PanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
    • Session.createResizableComponent(Dimensions, Dimensions) foi excluído e substituído por ResizableComponent.create(Session, Dimensions, Dimensions)
    • Session.createStereoSurfaceEntity(Int, Dimensions, Pose) foi excluído e substituído por StereoSurface.create(Session, Int, Dimensions, Pose)
  • Os seguintes métodos descontinuados foram removidos:
    • Session.canEmbedActivityPanel(Activity) foi excluído. Use getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY).
    • Session.hasSpatialCapability(Int) foi excluído. Ele foi substituído pelo uso de getSpatialCapabilities().hasCapability() como uma maneira mais compartimentada de verificar a presença de recursos espaciais, já que getSpatialCapabilities() retorna um objeto SpatialCapabilities.
    • Session.requestFullSpaceMode() foi excluído e substituído por SpatialEnvironment.requestFullSpaceMode()
    • Session.requestHomeSpaceMode() foi excluído e substituído por SpatialEnvironment.requestHomeSpaceMode()
  • Session.setFullSpaceMode(Bundle) e Session.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.setFullSpaceMode
    • import 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>) e Session.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.getEntitiesOfType
    • import androidx.xr.scenecore.getEntityForRtEntity
  • Session.unpersistAnchor(Anchor) foi excluída
  • Session.createPersistedAnchorEntity(UUID) foi excluída

Problemas conhecidos

  • PanelEntity.setCornerRadius() e ActivityPanelEntity.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 no ActivitySpace, alguns ActivityPoses podem não ter sido atualizados corretamente. Ele será atualizado na próxima chamada de OnSpaceUpdated em ActivitySpace

Mudanças importantes e comportamentais

  • PanelEntity e ActivityPanelEntity terã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 telas Spherical e Hemispherical para renderizar mídia imersiva.
  • StereoSurfaceEntity.create() agora aceita um parâmetro CanvasShape. (Esse parâmetro é ignorado no momento, mas será usado em uma versão futura)
  • StereoSurfaceEntity.create() não usa mais um parâmetro Dimensions. Os aplicativos precisam controlar o tamanho da tela definindo o CanvasShape.
  • StereoSurfaceEntity tem um membro CanvasShape que pode ser definido dinamicamente.
  • StereoSurfaceEntity.dimensions agora é uma propriedade somente leitura. Os aplicativos precisam definir CanvasShape para mudar as dimensões.
  • StereoSurfaceEntity agora permite que o StereoMode seja 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ão SCENE_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 de ActivitySpace, retornando valores de translação em metros dimensionados em vez de sempre retornar metros não dimensionados. O transformPoseTo agora também usa as unidades certas para calcular as mudanças de coordenadas quando o ActivitySpace está 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, use setSpatialEnvironmentPreference(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_UNDERSTANDING no 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ência api para que os clientes não precisem declará-la explicitamente.
  • O SceneCore inclui incorretamente com.google.guava:guava-31.1-android e com.google.protobuf:protobuf-javalite como 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.