O Android XR é uma extensão da plataforma e do ecossistema Android. O SDK do Android XR foi projetado para permitir que você crie apps de realidade estendida usando ferramentas e frameworks Android conhecidos ou padrões abertos, como OpenXR e WebXR. Todos os apps compatíveis para dispositivos móveis ou telas grandes estarão disponíveis para instalação em headsets XR na Play Store. Analise as considerações de compatibilidade para saber se o app é compatível.
Este guia explica as seguintes áreas:
- Selecionar ferramentas e tecnologias de desenvolvimento
- Como criar apps para Android XR
- Como configurar o arquivo de manifesto do app
- Considerações sobre a compatibilidade do manifesto do app
- Noções básicas sobre as permissões do Android XR
- Como verificar a qualidade do app Android XR
- Empacotar e distribuir seu app para Android XR
Selecionar suas ferramentas e tecnologias de desenvolvimento
Ao criar um app para Android XR, você pode escolher entre as seguintes plataformas e tecnologias de desenvolvimento:
SDK XR do Jetpack
O SDK do Jetpack para XR contém bibliotecas Jetpack do Android XR criadas para aproveitar os recursos exclusivos dos dispositivos de XR. Comece com este SDK se você 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á tem experiência com o desenvolvimento usando 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, permitindo que você use o conhecimento atual para criar experiências imersivas de XR.
Saiba mais sobre o desenvolvimento com o SDK do Jetpack para 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 aproveitar o suporte OpenXR estabelecido e o ecossistema de desenvolvedores do Unity.
Se você já tem uma experiência de RV criada com o Unity ou se conhece o desenvolvimento com essa plataforma, comece com essa opção.
Saiba mais sobre o desenvolvimento com Unity para Android XR.
OpenXR
O OpenXR é um padrão aberto e livre de royalties que pode ser usado para criar experiências de XR multiplataforma de alto desempenho. O Android XR é compatível com o OpenXR 1.0 e 1.1, e estamos expandindo a especificação com novas extensões para o Android XR. Como o Android XR é criado com base em padrões abertos, as ferramentas de desenvolvimento que oferecem suporte ao OpenXR e ao Android devem ser compatíveis com o Android XR.
Saiba mais sobre a compatibilidade com OpenXR para Android XR.
WebXR
Com o WebXR, é possível 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 criar experiências imersivas que misturam realidade física e virtual. Se você estiver 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 outros projetos de apps Android, seu app Android XR precisa ter um arquivo AndroidManifest.xml com configurações de manifesto específicas. O arquivo de manifesto descreve informações essenciais sobre o app para as ferramentas de build do Android, o sistema operacional Android e o Google Play. Consulte o guia de visão geral do manifesto do app para mais informações.
Para apps diferenciados de XR, o arquivo de manifesto precisa conter os seguintes elementos e atributos:
Propriedade PROPERTY_XR_ACTIVITY_START_MODE
A propriedade android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
informa ao sistema que uma atividade precisa ser iniciada em um modo específico quando
ela é 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 apps criados com o SDK do Jetpack para XR)
Use esse modo de início para abrir o app no Espaço Compacto. No Espaço Compacto, 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 Compacto, 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 apps criados com o SDK do Jetpack para XR)
Use esse modo de início para abrir o app no Modo de Espaço Ampliado. No Modo de Espaço Ampliado, 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 apps criados com OpenXR)
Os apps criados com o OpenXR são iniciados no Modo de Espaço Ampliado e precisam usar o modo de início
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
. O espaço ampliado não gerenciado
indica ao 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>
Propriedade PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED
A propriedade android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
indica que o aplicativo deve ser iniciado com um tipo específico
de limite. Seu app precisa especificar XR_BOUNDARY_TYPE_LARGE
se ele
for projetado para permitir que os usuários se movam pelo espaço físico. Especificar XR_BOUNDARY_TYPE_NO_RECOMMENDATION
não fornece recomendações para o tipo de limite de segurança. Portanto, o sistema usa o tipo que já está em uso.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
android:value="XR_BOUNDARY_TYPE_LARGE" />
</application>
</manifest>
<uses-native-library> OpenXR
(Somente apps criados com OpenXR)
Os aplicativos OpenXR precisam declarar o uso da biblioteca nativa do OpenXR para carregar o tempo de execução com sucesso. Sem essa declaração, o ambiente de execução não vai carregar.
<manifest ... >
<application ... >
<uses-native-library andro id:name="libopenxr.google.so" android:required="false" />
<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 XR
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
mostrados aos usuários.
Os recursos a seguir são específicos de apps diferenciados por XR.
android.software.xr.api.spatial
Os apps criados com o SDK do Jetpack para XR precisam incluir esse
recurso no manifesto do app. O valor definido para o atributo android:required
depende da faixa de lançamento do app.
Se o app agrupar recursos ou conteúdo diferenciados de XR em um
APK para dispositivos móveis e for publicado na faixa de lançamento para dispositivos móveis, defina o
atributo android:required
como false
:
<!-- If you are publishing an existing mobile APK using the mobile release track, set android:required to false.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="false" />
Se o app foi criado especificamente para dispositivos compatíveis com XR e publicado na faixa de lançamento dedicada do Android XR, defina o atributo android:required
como true
:
<!-- If you are publishing a separate APK for XR using the dedicated Android XR release track, set android:required to true.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="true" />
android.software.xr.api.openxr
Os apps destinados à plataforma Android XR e criados com OpenXR ou Unity precisam
incluir esse recurso no manifesto do app com o atributo android:required
definido como true
.
Os apps que usam o Pacote de extensões do Android XR para Unity versão 1.0.0 ou mais recente ou o Pacote Android XR do Unity OpenXR versão 0.5.0-exp.1 ou mais recente não precisam adicionar esse elemento manualmente ao manifesto do app. Esses dois pacotes vão injetar esse elemento no manifesto do app para você.
Os dispositivos podem especificar uma versão para esse recurso, que indica a versão mais recente do OpenXR compatível com o dispositivo. Os 16 bits mais altos representam o
número principal, e os 16 bits mais baixos representam o número secundário. Por exemplo, para especificar a versão 1.1 do OpenXR, o valor seria definido como "0x00010001"
.
Os apps podem usar a versão do recurso para indicar uma versão mínima do OpenXR exigida pelo app. Por exemplo, se o app exigir suporte para a versão 1.1 do OpenXR, declare o seguinte recurso:
<uses-feature android:name="android.software.xr.api.openxr"
android:version="0x00010001"
android:required="true" />
android.hardware.xr.input.controller
Esse recurso indica que o app exige entrada de um controlador de movimento de alta precisão e 6DoF
(graus de liberdade) para funcionar corretamente. Se o app
for compatível com controles e não funcionar sem eles, defina o valor como true
.
Se o app for compatível com controles, mas puder funcionar sem eles, defina-o como
false
.
<!-- Sets android:required to true, indicating that your app can't function on devices without controllers. -->
<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 rastreamento de mãos 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 for compatível com o rastreamento de mãos e não funcionar sem
ele, defina o valor como true
. Se o app oferecer suporte ao rastreamento de mãos, mas puder operar
sem ele, defina como false
.
<!-- Sets android:required to true, indicating that your app can't function on devices without hand tracking. -->
<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 for compatível com rastreamento ocular para entrada e não puder
funcionar sem ele, defina o valor como true
. Se o app oferecer suporte ao rastreamento ocular
para entrada, mas puder operar sem ele, defina como false
.
<!-- Sets android:required to true, indicating that your app can't function on devices without eye tracking. -->
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />
Considerações sobre a compatibilidade do manifesto do app para apps de dispositivos móveis e telas grandes
Conforme descrito na seção Recursos do PackageManager para apps de realidade estendida, os apps
declaram que usam um recurso ao declará-lo 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 os 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 de 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
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 (legada)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
Widgets
Entender as permissões para XR
Assim como apps em dispositivos móveis e outros formatos, alguns recursos oferecidos por apps de RV exigem que seu app declare permissões no arquivo AndroidManifest do app. No caso de permissões perigosas, talvez o app precise solicitar permissões de execução. Leia Permissões no Android e práticas recomendadas de permissões para mais informações detalhadas.
Os apps de RV podem usar as seguintes permissões. Todas as permissões nesta seção são consideradas perigosas. Portanto, você precisa declará-las no manifesto do app e solicitá-las no tempo de execução.
android.permission.EYE_TRACKING_COARSE
Representa a postura, o status e a orientação dos olhos do usuário, como para uso com avatares. Use essa permissão quando forem necessários dados de rastreamento ocular de baixa precisão.
SDK XR do Jetpack
N/A
Extensões OpenXR
Recursos do Unity
android.permission.EYE_TRACKING_FINE
Rastreamento ocular para seleção, entrada e interações.
SDK XR do Jetpack
N/A
Extensões OpenXR
Recursos do Unity
android.permission.FACE_TRACKING
Rastreamento e renderização de expressões faciais.
SDK XR do Jetpack
N/A
Extensões OpenXR
Recursos do Unity
android.permission.HAND_TRACKING
Rastreamento de poses de articulações das mãos e velocidades angulares e lineares; uso de uma representação de malha das mãos do usuário.
SDK XR do Jetpack
Extensões OpenXR
Recursos do Unity
android.permission.SCENE_UNDERSTANDING_COARSE
Estimativa de luz, projeção de transmissão em superfícies de malha, execução de raycasts em rastreáveis no ambiente, rastreamento de planos e objetos, âncoras persistentes.
SDK XR do Jetpack
Extensões OpenXR
Recursos do Unity
android.permission.SCENE_UNDERSTANDING_FINE
Textura de profundidade.
SDK XR do Jetpack
N/A
Extensões OpenXR
Recursos do Unity
Verificar a qualidade do app Android XR
Para verificar se o app oferece uma ótima experiência do usuário, consulte as diretrizes de qualidade do app Android XR.
Empacotar e distribuir seu app para Android XR
O Android XR oferece uma grande variedade de apps e experiências para headsets de realidade virtual pelo Google Play. No guia para empacotar e distribuir apps para Android XR, você encontra informações sobre como começar a usar a Play Store e o Play Console, publicar faixas, preparar Android App Bundles e restrições de tamanho de apps.
OpenXR™ e o logotipo OpenXR são marcas registradas de propriedade da The Khronos Group Inc. e estão registradas como marcas comerciais na China, na União Europeia, no Japão e no Reino Unido.