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.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.level.full
Conectividade
android.hardware.ipsec_tunnel_migration
Configuração do dispositivo
Configuração do formato
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
Entrada
android.software.input_methods
Local
Comunicação a curta distância (NFC)
Configuração de segurança e hardware
android.hardware.se.omapi.uicc
android.hardware.biometrics.face
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.relative_humidity
android.hardware.sensor.stepcounter
android.hardware.sensor.stepdetector
Configuração de software
android.software.connectionservice
android.software.expanded_picture_in_picture
android.software.live_wallpaper
android.software.picture_in_picture
android.software.wallet_location_based_suggestions
Telefonia
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
Realidade virtual (legado)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
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
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
Recursos do Unity que exigem essa permissão
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
Recursos do Unity que exigem essa permissão
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
Recursos do Unity que exigem essa permissão
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
Recursos do Unity que exigem essa permissão
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.