Começar a usar o OpenXR para Android XR

Dispositivos XR aplicáveis
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos de XR.
Headsets de realidade estendida
Óculos XR com fio

Antes de começar a criar com extensões OpenXR compatíveis ou com um mecanismo compatível, revise as informações e conclua as tarefas nas seções a seguir para garantir que seu app esteja configurado para o desenvolvimento de XR imersivo.

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.

Essa propriedade tem os seguintes valores:

  • XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED (somente OpenXR)

XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED

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 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>

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 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

Os aplicativos OpenXR precisam declarar o uso da biblioteca nativa do OpenXR para carregar o tempo de execução corretamente. Sem essa declaração, o ambiente de execução não é carregado.

<manifest ... >

    <application ... >

    <uses-native-library android: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 para apps diferenciados de XR.

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 Unity OpenXR: pacote Android XR 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 precisa de 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 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 puder 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" />

Próximas etapas

Agora que você terminou de configurar o manifesto do app e revisar informações importantes, confira maneiras de criar com o OpenXR: