Visão geral do desenvolvimento para o Android XR

O Android XR é uma extensão da plataforma e do ecossistema Android. O SDK do Android XR foi criado para permitir que você crie apps de realidade estendida usando frameworks e ferramentas do Android conhecidos ou usando padrões abertos, como o OpenXR e o WebXR. Todos os apps compatíveis para dispositivos móveis ou telas grandes poderão ser instalados na Play Store para headsets de realidade estendida. Analise as considerações de compatibilidade para saber se o app é compatível.

Este guia explica as seguintes áreas:

  • Como selecionar ferramentas e tecnologias de desenvolvimento
  • Como projetar apps para o Android XR
  • Como configurar o arquivo de manifesto do app
  • Considerações sobre a compatibilidade do manifesto do app
  • Noções básicas sobre permissões para o Android XR
  • Como garantir a qualidade do app Android XR
  • Como empacotar e distribuir seu app para Android XR

Selecionar ferramentas e tecnologias de desenvolvimento

Ao criar um app para o Android XR, você pode escolher entre as seguintes plataformas e tecnologias de desenvolvimento:

SDK do Jetpack XR

O SDK do Jetpack XR contém bibliotecas do Jetpack para Android XR criadas para aproveitar os recursos exclusivos de dispositivos XR. Comece com esse SDK se quiser fazer o seguinte:

  • Otimizar ou melhorar um app para dispositivos móveis ou tablets Android
  • Criar um novo app Android XR usando o Android Studio e o Jetpack

Se você já sabe como desenvolver com o Android Jetpack, o SDK do Jetpack XR é uma opção natural para você. Ele foi projetado para se integrar perfeitamente a esses frameworks e bibliotecas e permite usar o conhecimento atual para criar experiências de XR imersivas.

Saiba mais sobre o desenvolvimento com o SDK do Jetpack XR.

Unity

O Unity Engine é um mecanismo de desenvolvimento 3D em tempo real que permite que artistas, designers e desenvolvedores colaborem para criar experiências imersivas e interativas. O suporte do Android XR do Unity oferece um alto nível de controle sobre as experiências 3D que você desenvolve, além de se beneficiar do suporte do OpenXR e do ecossistema de desenvolvedores do Unity.

Se você já tem uma experiência de XR criada com o Unity ou se já conhece o desenvolvimento com o Unity, comece com essa opção.

Saiba mais sobre o desenvolvimento com o Unity para Android XR.

OpenXR

O OpenXR é um padrão aberto sem royalties que pode ser usado para criar experiências de RA de alto desempenho e multiplataforma. O Android XR oferece suporte ao OpenXR 1.0 e 1.1, e estamos ampliando a especificação com novas extensões para o Android XR. Como o Android XR é baseado em padrões abertos, as ferramentas de desenvolvimento que oferecem suporte ao OpenXR e ao Android precisam ser compatíveis com o Android XR.

Saiba mais sobre o suporte do OpenXR para Android XR.

WebXR

O WebXR permite criar experiências imersivas para a Web. Ele oferece acesso a dispositivos de RV e RA em navegadores da Web compatíveis, como o Chrome no Android XR.

Comece com essa opção se quiser criar uma experiência de XR para a Web ou adicionar recursos de XR a um app da Web. As experiências atuais do WebXR também funcionam no Android XR.

Saiba mais sobre como criar apps da Web com o WebXR.

Design para XR

A XR expande a superfície de design além das telas planas tradicionais. É possível projetar experiências imersivas que misturam realidade física e virtual. Seja criando uma experiência totalmente nova ou adicionando elementos imersivos a um app existente, o guia de design para Android XR pode ajudar você a começar.

Configurar o arquivo de manifesto do app

Assim como em outros projetos de apps Android, seu app Android XR precisa ter um arquivo AndroidManifest.xml com configurações específicas. O arquivo de manifesto descreve informações essenciais sobre o app para as ferramentas de build do Android, para o sistema operacional Android e para o Google Play. Consulte o guia de visão geral do manifesto do app para mais informações.

Para apps diferenciados de RA/RV, o arquivo de manifesto precisa conter os seguintes elementos e atributos:

Propriedade PROPERTY_ACTIVITY_XR_START_MODE

A propriedade android:name="android.window.PROPERTY_ACTIVITY_XR_START_MODE" informa ao sistema que uma atividade precisa ser iniciada em um modo específico quando é iniciada.

Há três valores possíveis para essa propriedade:

  • XR_ACTIVITY_START_MODE_HOME_SPACE (somente SDK do Jetpack XR)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED (somente SDK do Jetpack XR)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED (somente OpenXR)

XR_ACTIVITY_START_MODE_HOME_SPACE

(Somente para apps criados com o SDK do Jetpack XR)

Use esse modo de início para iniciar o app no espaço da tela inicial. No espaço da tela inicial, vários apps podem ser executados lado a lado, para que os usuários possam realizar várias tarefas. Qualquer app Android para dispositivos móveis ou telas grandes pode operar no Espaço da casa, assim como apps XR criados usando o SDK Jetpack XR.

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_HOME_SPACE" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED

(Somente para apps criados com o SDK do Jetpack XR)

Use esse modo de início para iniciar o app no modo de tela cheia. No modo "Espaço total", apenas um app é executado por vez, sem limites de espaço, e todos os outros apps ficam ocultos.


<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED

(Somente para apps criados com o OpenXR)

Os apps criados com o OpenXR são iniciados no modo de espaço total e precisam usar o modo de início XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED. O espaço total não gerenciado sinaliza para o Android XR que o app usa o OpenXR.


<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

Recursos do PackageManager para apps de realidade estendida

Ao distribuir apps pela Google Play Store, você pode especificar os recursos de hardware ou software necessários no manifesto do app. O elemento uses-feature permite que a Play Store filtre adequadamente os apps exibidos aos usuários.

Os recursos a seguir são específicos para apps de RA.

android.software.xr.immersive

Se o app for destinado à plataforma Android XR e só funcionar em plataformas que ofereçam suporte a XR, defina o valor como "true". Se o app tiver alguns recursos otimizados para XR mas também puder ser executado em dispositivos que não são de XR, defina o valor como "false".

Os apps criados com o OpenXR ou o Unity precisam ter esse valor definido como "true".

<uses-feature android:name="android.software.xr.immersive" android:required="true" />

android.hardware.xr.input.controller

Esse recurso indica que o app exige a entrada de um controlador de movimento de 6 graus de liberdade (DOF) de alta precisão para funcionar corretamente. Se o app oferecer suporte a controladores e não funcionar sem eles, defina o valor como "true". Se o app oferece suporte a controladores, mas pode operar sem eles, defina como "false".

<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />

android.hardware.xr.input.hand_tracking

Essa flag indica que o app exige um rastreamento de mão de alta fidelidade para funcionar corretamente, incluindo posição, orientação e velocidade das articulações na mão do usuário. Se o app oferece suporte ao rastreamento de mãos e não pode funcionar sem ele, defina o valor como "true". Se o app oferece suporte ao rastreamento de mãos, mas pode funcionar sem ele, defina como "false".

<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />

android.hardware.xr.input.eye_tracking

Essa flag indica que o app exige rastreamento ocular de alta fidelidade para que a entrada funcione corretamente. Se o app oferece suporte ao rastreamento ocular para entrada e não pode funcionar sem ele, defina o valor como "true". Se o app oferece suporte ao rastreamento ocular para entrada, mas pode operar sem ele, defina como "false".

<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />

Considerações sobre a compatibilidade do manifesto do app para dispositivos móveis e telas grandes

Conforme descrito na seção Recursos do PackageManager para apps de RA, os apps declaram que usam um recurso em um elemento <uses-feature> no manifesto do app. Alguns recursos, como telefonia ou GPS, podem não ser compatíveis com todos os dispositivos.

Recursos não compatíveis

A Google Play Store filtra aplicativos disponíveis para instalação em um dispositivo usando as seguintes declarações de recursos do Android.

Hardware da câmera

android.hardware.camera.ar

android.hardware.camera.autofocus

android.hardware.camera.capability.manual_post_processing

android.hardware.camera.capability.manual_sensor

android.hardware.camera.capability.raw

android.hardware.camera.concurrent

android.hardware.camera.external

android.hardware.camera.flash

android.hardware.camera.level.full

Conectividade

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Configuração do dispositivo

android.hardware.ram.low

Configuração do formato

android.hardware.type.automotive

android.hardware.type.embedded

android.hardware.type.pc

android.hardware.type.television

android.hardware.type.watch

android.software.leanback

android.software.leanback_only

android.software.live_tv

Entrada

android.hardware.consumerir

android.software.input_methods

Local

android.hardware.location.gps

Comunicação a curta distância (NFC)

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Configuração de segurança e hardware

android.hardware.se.omapi.ese

android.hardware.se.omapi.sd

android.hardware.se.omapi.uicc

android.hardware.biometrics.face

android.hardware.fingerprint

android.hardware.identity_credential

android.hardware.identity_credential_direct_access

android.hardware.keystore.limited_use_key

android.hardware.keystore.single_use_key

android.hardware.strongbox_keystore

Sensores

android.hardware.sensor.accelerometer_limited_axes

android.hardware.sensor.accelerometer_limited_axes_uncalibrated

android.hardware.sensor.ambient_temperature

android.hardware.sensor.barometer

android.hardware.sensor.gyroscope_limited_axes

android.hardware.sensor.gyroscope_limited_axes_uncalibrated

android.hardware.sensor.heading

android.hardware.sensor.heartrate

android.hardware.sensor.heartrate.ecg

android.hardware.sensor.hinge_angle

android.hardware.sensor.light

android.hardware.sensor.relative_humidity

android.hardware.sensor.stepcounter

android.hardware.sensor.stepdetector

Configuração de software

android.software.backup

android.software.connectionservice

android.software.expanded_picture_in_picture

android.software.live_wallpaper

android.software.picture_in_picture

android.software.telecom

android.software.wallet_location_based_suggestions

Telefonia

android.hardware.telephony

android.hardware.telephony.calling

android.hardware.telephony.cdma

android.hardware.telephony.data

android.hardware.telephony.euicc

android.hardware.telephony.euicc.mep

android.hardware.telephony.gsm

android.hardware.telephony.ims

android.hardware.telephony.mbms

android.hardware.telephony.messaging

android.hardware.telephony.radio.access

android.hardware.telephony.subscription

android.software.sip

android.software.sip.voip

Realidade virtual (legado)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Widgets

android.software.app_widgets

Entender as permissões para XR

Assim como em apps para dispositivos móveis e outros formatos, algumas funcionalidades oferecidas por apps de RA podem exigir que seu app declare permissões no arquivo AndroidManifest. No caso de permissões perigosas, o app pode precisar solicitar permissões de execução. Leia Permissões no Android e práticas recomendadas de permissões para mais informações detalhadas.

Permissões para recursos de XR

As permissões a seguir podem ser usadas por apps de realidade estendida. Todas as permissões nesta seção são consideradas perigosas. Por isso, você precisa declará-las no manifesto do app e solicitá-las no momento da execução.

android.permission.EYE_TRACKING

Casos de uso que exigem essa permissão

Representação da pose e orientação dos olhos do usuário para fins de avatares

Recursos do SDK do Jetpack XR que exigem essa permissão

N/A

Extensões do OpenXR que exigem essa permissão

XR_ANDROID_avatar_eyes

Recursos do Unity que exigem essa permissão

Android XR: AR Face

android.permission.EYE_TRACKING_FINE

Casos de uso que exigem essa permissão

Entrada e interações de rastreamento ocular

Recursos do SDK do Jetpack XR que exigem essa permissão

N/A

Extensões do OpenXR que exigem essa permissão

XR_EXT_eye_gaze_interaction

Recursos do Unity que exigem essa permissão

Eye Gaze Interaction

android.permission.FACE_TRACKING

Casos de uso que exigem essa permissão

Rastrear e renderizar expressões faciais

Recursos do SDK do Jetpack XR que exigem essa permissão

N/A

Extensões do OpenXR que exigem essa permissão

XR_ANDROID_face_tracking

Recursos do Unity que exigem essa permissão

XRFaceTrackingFeature

android.permission.HAND_TRACKING

Casos de uso que exigem essa permissão

Rastrear poses das articulações das mãos e velocidades angulares e lineares; usar uma representação de malha das mãos do usuário

Recursos do SDK do Jetpack XR que exigem essa permissão

N/A

Extensões do OpenXR que exigem essa permissão

XR_ANDROID_hand_mesh

XR_EXT_hand_tracking

Recursos do Unity que exigem essa permissão

XR Hands

XRHandMeshFeature

android.permission.SCENE_UNDERSTANDING

Casos de uso que exigem essa permissão

Estimativa de luz; projeção de passagem em superfícies de malha; execução de raycasts contra rastreáveis no ambiente; rastreamento de plano; rastreamento de objeto; trabalho com profundidade para testes de obstrução e hit; âncoras persistentes.

Recursos do SDK do Jetpack XR que exigem essa permissão

Rastreamento de aviões

Teste de hit

Persistência de âncora

Extensões do OpenXR que exigem essa permissão

XR_ANDROID_anchor_persistence

XR_ANDROID_depth_texture

XR_ANDROID_light_estimation

XR_ANDROID_composition_layer_passthrough_mesh

XR_ANDROID_raycast

XR_ANDROID_trackables

XR_ANDROID_trackables_object

Recursos do Unity que exigem essa permissão

XRAnchorFeature

XRDepthTextureFeature

XRLightEstimationFeature

XRPassthroughFeature

XRTrackableFeature

XRObjectTrackingFeature

Garantir a qualidade do app Android XR

Para garantir que seu app ofereça uma ótima experiência do usuário, consulte nossas diretrizes de qualidade de apps Android XR.

Empacotar e distribuir seu app para o Android XR

O Android XR oferece uma grande variedade de apps e experiências para headsets de XR pelo Google Play. No guia de empacotamento e distribuição de apps para Android XR, você encontra informações sobre como começar a usar a Play Store e o Play Console, publicar faixas, preparar pacotes de apps Android e restrições de tamanho de apps.