Después de instalar y configurar Android Studio, crear un proyecto y configurar el SDK de Jetpack XR, ya puedes comenzar a compilar experiencias inmersivas.
Antes de comenzar a explorar todas las formas en que puedes compilar, 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_HOME_SPACE(solo para el SDK de Jetpack XR)XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED(solo para el SDK de Jetpack XR)
XR_ACTIVITY_START_MODE_HOME_SPACE
Usa este modo de inicio para abrir tu app en el Espacio principal. En el espacio principal, varias apps pueden ejecutarse una al lado de la otra, por lo que los usuarios pueden realizar varias tareas a la vez. Cualquier app para dispositivos móviles o pantallas grandes de Android puede funcionar en el espacio principal, así como las apps de XR creadas con el SDK de 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
Usa este modo de inicio para abrir tu app en el modo de espacio completo. En el modo de espacio completo, solo se ejecuta una app a la vez, sin límites de espacio, y todas las demás apps están ocultas.
<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>
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>
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.spatial
Las apps compiladas con el SDK de Jetpack XR deben incluir esta función en el manifiesto de la app. El valor que establezcas para el atributo android:required depende del carril de lanzamiento de tu app.
Si tu app incluye funciones o contenido diferenciados para XR en un APK para dispositivos móviles existente y se publica en el segmento de versiones para dispositivos móviles, establece el atributo android:required en 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" />
Si tu app se creó específicamente para dispositivos compatibles con XR y se publicó en el segmento exclusivo de Android XR, establece el atributo android:required en 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.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" />
Consideraciones sobre la compatibilidad del manifiesto de la app para apps para dispositivos móviles y pantallas grandes
Como se describe en la sección Funciones de PackageManager para apps de XR, las apps declaran que usan una función declarándola en un elemento <uses-feature> en el manifiesto de la app. Es posible que algunas funciones, como la telefonía o el GPS, no sean compatibles con todos los dispositivos.
Para obtener una lista de las funciones habilitadas en un dispositivo, ejecuta adb
shell pm list features.
Características no admitidas
Google Play Store filtra las aplicaciones disponibles para instalar en un dispositivo con las siguientes declaraciones de funciones de Android.
Hardware de la cámara
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
Conectividad
android.hardware.ipsec_tunnel_migration
Configuración del dispositivo
Configuración del factor de forma
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
Entrada
android.software.input_methods
Ubicación
Comunicación de campo cercano
Configuración de seguridad y 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
Configuración del 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
Telefonía
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
Realidad virtual (heredada)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
Widgets
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 crear experiencias inmersivas:
- Cómo llevar tu app para Android al 3D con XR
- Cómo desarrollar una IU espacial con Jetpack Compose para XR
- Implementa Material Design en tu IU espacial
- Agrega entornos espaciales a tu app
- Crea, controla y administra entidades