Antes de comenzar a compilar con extensiones de OpenXR compatibles o con un motor compatible, revisa la información y completa las tareas de las siguientes secciones para asegurarte de que tu app esté configurada para el desarrollo de XR inmersivo.
Configura el archivo de manifiesto de tu app
Al igual que con otros proyectos de apps para Android, tu app de Android XR debe tener un archivo AndroidManifest.xml con parámetros de configuración específicos del manifiesto. El archivo de manifiesto describe información esencial sobre tu app para las herramientas de compilación de Android, el sistema operativo Android y Google Play. Para obtener más información, consulta la guía de descripción general del manifiesto de la app.
En el caso de las apps diferenciadas para XR, el archivo de manifiesto debe contener los siguientes elementos y atributos:
Propiedad PROPERTY_XR_ACTIVITY_START_MODE
La propiedad android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" le permite al sistema saber que una actividad debe iniciarse en un modo específico cuando se inicia la actividad.
Esta propiedad tiene los siguientes valores:
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED(solo OpenXR)
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
Las apps compiladas con OpenXR se inician en el modo de espacio completo y deben usar el modo de inicio XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED. El espacio completo no administrado indica a Android XR que la app usa 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>
Propiedad PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED
La propiedad android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" indica que la aplicación debe iniciarse con un tipo específico de límite. Tu app debe especificar XR_BOUNDARY_TYPE_LARGE si está diseñada para permitir que los usuarios se muevan por su espacio físico. Si se especifica XR_BOUNDARY_TYPE_NO_RECOMMENDATION, no se proporcionan recomendaciones para el tipo de límite de seguridad, por lo que el sistema usa el tipo que ya está en 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
Las aplicaciones de OpenXR deben declarar el uso de la biblioteca nativa de OpenXR para cargar correctamente su tiempo de ejecución. Sin esta declaración, el tiempo de ejecución no se cargará.
<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>
Funciones de PackageManager para apps de RE
Cuando distribuyes apps a través de Google Play Store, puedes especificar las funciones de hardware o software requeridas en el manifiesto de la app. El elemento uses-feature permite que Play Store filtre de forma adecuada las apps que se muestran a los usuarios.
Las siguientes funciones son específicas de las apps diferenciadas para XR.
android.software.xr.api.openxr
Las apps que segmentan la plataforma de Android XR y se compilan con OpenXR o Unity deben incluir esta función en el manifiesto de la app con el atributo android:required establecido en true.
Las apps que usan la versión 1.0.0 o una posterior del paquete de extensiones de Android XR para Unity o la versión 0.5.0-exp.1 o una posterior del paquete de Unity OpenXR: Android XR no tienen que agregar este elemento de forma manual al manifiesto de la app. Estos dos paquetes insertarán este elemento en el manifiesto de la app por ti.
Los dispositivos pueden especificar una versión para esta función, que indica la versión más alta de OpenXR compatible con el dispositivo. Los 16 bits superiores representan el número principal, y los 16 bits inferiores, el número secundario. Por ejemplo, para especificar la versión 1.1 de OpenXR, el valor se establecería en "0x00010001".
Las apps pueden usar la versión de la función para indicar una versión mínima de OpenXR que requiere la app. Por ejemplo, si tu app requiere compatibilidad con OpenXR 1.1, declara la siguiente función:
<uses-feature android:name="android.software.xr.api.openxr"
android:version="0x00010001"
android:required="true" />
android.hardware.xr.input.controller
Esta función indica que la app requiere la entrada de un controlador de movimiento de alta precisión y 6 DoF (grados de libertad) para funcionar correctamente. Si tu app admite controles y no puede funcionar sin ellos, establece el valor en true.
Si tu app admite controles, pero puede funcionar sin ellos, configúrala 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
Esta marca indica que la app requiere un seguimiento de manos de alta fidelidad para funcionar correctamente, lo que incluye la posición, la orientación y la velocidad de las articulaciones de la mano del usuario. Si tu app admite el seguimiento de manos y no puede funcionar sin él, establece el valor en true. Si tu app admite el seguimiento de manos, pero puede funcionar sin él, configúralo 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
Esta marca indica que la app requiere un seguimiento de ojos de alta fidelidad para que la entrada funcione correctamente. Si tu app admite el seguimiento ocular para la entrada y no puede funcionar sin él, establece el valor en true. Si tu app admite el seguimiento ocular para la entrada, pero puede funcionar sin él, configúralo 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óximos pasos
Ahora que terminaste de configurar el manifiesto de tu app y revisar la información importante, explora las formas en que puedes compilar con OpenXR: