Jetpack Compose para XR

Crie de forma declarativa layouts de interface espacial que aproveitem os recursos espaciais do Android XR.
Atualização mais recente Versão estável Versão candidata a lançamento Versão Beta Versão Alfa
12 de dezembro de 2024 - - - 1.0.0-alpha01

Declarar dependências

Para adicionar uma dependência ao XR Compose, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.

Adicione as dependências dos artefatos necessários ao arquivo build.gradle do seu app ou módulo:

Groovy

dependencies {
    implementation "androidx.xr.compose:compose:1.0.0-alpha01"

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

Kotlin

dependencies {
    implementation("androidx.xr.compose:compose:1.0.0-alpha01")

    // Use to write unit tests
    testImplementation("androidx.xr.compose:compose-testing:1.0.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.0

Versão 1.0.0-alpha01

12 de dezembro de 2024

Lançamento de androidx.xr.compose:compose-*1.0.0-alpha01.

Recursos da versão inicial

  • Versão inicial para desenvolvedores do Jetpack Compose para XR. Use conceitos familiares do Compose, como linhas e colunas, para criar layouts de interface espacial em XR, seja para portar um app 2D para XR ou criar um novo app XR do zero. Essa biblioteca oferece elementos combináveis espaciais e de subespaço, como painéis e orbitadores espaciais, que permitem colocar a interface 2D do Compose ou baseada em visualizações em um layout espacial. Ele apresenta o elemento combinável do subespaço de volume, que permite posicionar entidades do SceneCore, como modelos 3D, em relação à sua interface. Saiba mais neste guia para desenvolvedores:

    • Subspace: esse elemento combinável pode ser colocado em qualquer lugar na hierarquia da interface do app, permitindo que você mantenha layouts para interfaces 2D e espaciais sem perder o contexto entre os arquivos. Isso facilita o compartilhamento de coisas como a arquitetura do app entre XR e outros formatos sem precisar elevar o estado por toda a árvore de interface ou reprojetar o app.

    • SpatialPanel: um painel espacial é um elemento combinável de subespaço que permite exibir o conteúdo do app. Por exemplo, você pode exibir a reprodução de vídeo, imagens estáticas ou qualquer outro conteúdo em um painel espacial.

    • Orbiter: um orbiter é um componente de IU espacial. Ele foi projetado para ser anexado a um painel espacial correspondente e contém itens de navegação e ação contextual relacionados a esse painel. Por exemplo, se você criou um painel espacial para mostrar conteúdo de vídeo, pode adicionar controles de reprodução de vídeo dentro de um orbitador.

    • Volume: posicione entidades do SceneCore, como modelos 3D, em relação à sua interface.

  • Layout espacial: é possível criar vários painéis espaciais e colocá-los em um layout espacial usando SpatialRow, SpatialColumn, SpatialBox e SpatialLayoutSpacer. Use SubspaceModifiers para personalizar seu layout.

  • Componentes da interface espacial: esses elementos podem ser reutilizados na interface 2D, e os atributos espaciais só ficam visíveis quando os recursos espaciais estão ativados.

    • SpatialDialog: o painel será empurrado ligeiramente para trás na profundidade Z para mostrar uma caixa de diálogo elevada.
    • SpatialPopUp: o painel é empurrado ligeiramente para trás na z-depth para mostrar um pop-up elevado.
    • SpatialElevation: o SpatialElevationLevel pode ser definido para adicionar elevação.
  • SpatialCapabilities: as capacidades espaciais podem mudar à medida que os usuários interagem com o app ou o sistema, ou até mesmo podem ser alteradas pelo próprio app, por exemplo, ao mudar para o espaço da casa ou o espaço total. Para evitar problemas, o app precisa verificar o LocalSpatialCapabilities.current para determinar quais APIs têm suporte no ambiente atual. isSpatialUiEnabled: elementos da IU espacial (por exemplo, SpatialPanel) isContent3dEnabled: objetos 3D isAppEnvironmentEnabled: o ambiente isPassthroughControlEnabled: se o aplicativo pode ou não controlar o estado de passagem isSpatialAudioEnabled: áudio espacial

Problemas conhecidos

  • No momento, um minSDK de 30 é necessário para usar o Jetpack Compose para XR. Como solução alternativa, adicione a seguinte entrada de manifesto <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> para poder criar e executar com um minSDK de 23.
  • Atualmente, os apps do Jetpack XR exigem a solicitação da permissão android.permission.SCENE_UNDERSTANDING no AndroidManifest.
  • Quando um app é iniciado diretamente no espaço total usando a propriedade PROPERTY_XR_ACTIVITY_START_MODE no manifesto, as atividades/apps são abertos inicialmente no espaço inicial antes de fazer a transição para o espaço total.
  • Os glTFs em elementos combináveis de volume podem piscar inicialmente no local errado.
  • Usar uma SpatialDialog em um painel que foi movido significativamente vai empurrar o conteúdo na direção errada.