Descripción general de la compilación para Android XR

Android XR es una extensión de la plataforma y el ecosistema de Android. El SDK de Android XR está diseñado para permitirte compilar apps de XR con frameworks y herramientas de Android conocidos o con estándares abiertos, como OpenXR y WebXR. Todas las apps compatibles para dispositivos móviles o pantallas grandes estarán disponibles para instalarse en los visores XR desde Play Store. Revisa las consideraciones de compatibilidad para ver si tu app es compatible.

En esta guía, se explican las siguientes áreas:

  • Cómo seleccionar tus herramientas y tecnologías de desarrollo
  • Cómo diseñar apps para Android XR
  • Cómo configurar el archivo de manifiesto de tu app
  • Consideraciones de compatibilidad del manifiesto de la app
  • Información sobre los permisos de Android XR
  • Cómo garantizar la calidad de las apps para Android XR
  • Cómo empaquetar y distribuir tu app para Android XR

Selecciona tus herramientas y tecnologías de desarrollo

Cuando compilas una app para Android XR, puedes elegir entre las siguientes plataformas y tecnologías de desarrollo:

SDK de Jetpack XR

El SDK de Jetpack XR contiene bibliotecas de Jetpack de Android XR compiladas para aprovechar las capacidades únicas de los dispositivos XR. Comienza con este SDK si quieres hacer lo siguiente:

  • Optimiza o mejora una app para tablets o dispositivos móviles Android existente
  • Compila una nueva app para Android XR con Android Studio y Jetpack

Si ya te sientes cómodo desarrollando con Android Jetpack, el SDK de Jetpack XR es una opción ideal para ti. Está diseñado para integrarse sin problemas con esos marcos de trabajo y bibliotecas, y te permite usar el conocimiento existente para crear experiencias de XR envolventes.

Obtén más información para desarrollar con el SDK de Jetpack XR.

Unity

Unity Engine es un motor de desarrollo 3D en tiempo real que permite que artistas, diseñadores y desarrolladores colaboren para crear experiencias interactivas y envolventes. La compatibilidad de Unity con Android XR te brinda un alto nivel de control sobre las experiencias 3D que desarrollas, a la vez que te beneficias del ecosistema de desarrolladores y la compatibilidad con OpenXR establecidos en Unity.

Si ya tienes una experiencia de XR compilada con Unity o si conoces el desarrollo con Unity, comienza con esta opción.

Obtén más información para desarrollar con Unity para Android XR.

OpenXR

OpenXR es un estándar abierto sin regalías que se puede usar para compilar experiencias de XR multiplataforma de alto rendimiento. Android XR es compatible con OpenXR 1.0 y 1.1, y estamos ampliando la especificación con nuevas extensiones para Android XR. Debido a que Android XR se compiló con estándares abiertos, las herramientas de desarrollo que admiten OpenXR y Android deberían ser compatibles con Android XR.

Obtén más información sobre la compatibilidad con OpenXR para Android XR.

WebXR

WebXR te permite crear experiencias inmersivas para la Web. Proporciona acceso a dispositivos de RA y VR en navegadores web compatibles, como Chrome en Android XR.

Comienza con esta opción si quieres compilar una experiencia de XR para la Web o si quieres agregar capacidades de XR a una app web. Las experiencias de WebXR existentes también funcionarán en Android XR.

Obtén más información para crear apps web con WebXR.

Cómo diseñar para la realidad extendida

La XR expande la superficie de diseño más allá de las pantallas planas tradicionales. Puedes diseñar experiencias envolventes que combinen la realidad física y virtual. Ya sea que estés compilando una experiencia nueva o agregando elementos envolventes a una app existente, la guía de diseño para Android XR puede ayudarte a comenzar.

Cómo configurar el archivo de manifiesto de tu app

Al igual que con otros proyectos de apps para Android, tu app para Android XR debe tener un archivo AndroidManifest.xml con una configuración de manifiesto específica. 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. Consulta la guía de descripción general del manifiesto de la app para obtener más información.

En el caso de las apps diferenciadas para XR, el archivo de manifiesto debe contener los siguientes elementos y atributos:

Propiedad PROPERTY_ACTIVITY_XR_START_MODE

La propiedad android:name="android.window.PROPERTY_ACTIVITY_XR_START_MODE" le informa al sistema que se debe iniciar una actividad en un modo específico cuando se inicia.

Hay tres valores posibles para esta propiedad:

  • 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_FULL_SPACE_UNMANAGED (solo OpenXR)

XR_ACTIVITY_START_MODE_HOME_SPACE

(Solo para apps compiladas con el SDK de Jetpack XR)

Usa este modo de inicio para iniciar tu app en Home Space. En Home Space, se pueden ejecutar varias apps en paralelo, por lo que los usuarios pueden realizar varias tareas a la vez. Cualquier app para Android para dispositivos móviles o pantallas grandes puede funcionar en Home Space, así como las apps de XR compiladas 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

(solo para apps compiladas con el SDK de Jetpack XR)

Usa este modo de inicio para iniciar tu app en el espacio completo. En Full Space, solo se ejecuta una app a la vez, sin límites de espacio, y se ocultan todas las demás.


<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

(solo para apps compiladas con OpenXR)

Las apps compiladas con OpenXR se inician en Full Space 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>

Funciones de PackageManager para apps de RA

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 de XR.

android.software.xr.immersive

Si tu app está orientada a la plataforma de Android XR y solo se ejecuta en plataformas que admiten XR, establece el valor en "true". Si tu app tiene algunas funciones optimizadas para XR, pero también se puede ejecutar en dispositivos que no son XR, establece el valor en "false".

Las apps compiladas con OpenXR o Unity deben tener este valor establecido en verdadero.

<uses-feature android:name="android.software.xr.immersive" android:required="true" />

android.hardware.xr.input.controller

Esta función indica que la app requiere la entrada de un controlador de movimiento de 6 DoF (grados de libertad) de alta precisión para funcionar correctamente. Si tu app admite controladores y no puede funcionar sin ellos, establece el valor en "true". Si tu app admite controladores, pero puede funcionar sin ellos, configúralo como "false".

<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, incluida 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".

<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 ocular 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 verdadero. Si tu app admite el seguimiento ocular para la entrada, pero puede funcionar sin él, configúralo como "false".

<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />

Consideraciones de compatibilidad del manifiesto de apps 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 en un elemento <uses-feature> del manifiesto de la app. Es posible que algunas funciones, como la telefonía o el GPS, no sean compatibles con todos los dispositivos.

Características no admitidas

Google Play Store filtra las aplicaciones disponibles para instalarse en un dispositivo con las siguientes declaraciones de funciones de Android.

Hardware de la cámara

android.hardware.camera.ar

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

android.hardware.camera.level.full

Conectividad

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Configuración del dispositivo

android.hardware.ram.low

Configuración del factor de forma

android.hardware.type.automotive

android.hardware.type.embedded

android.hardware.type.pc

android.hardware.type.television

android.hardware.type.watch

android.software.leanback

android.software.leanback_only

android.software.live_tv

Entrada

android.hardware.consumerir

android.software.input_methods

Ubicación

android.hardware.location.gps

Comunicación de campo cercano

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Configuración de seguridad y hardware

android.hardware.se.omapi.ese

android.hardware.se.omapi.sd

android.hardware.se.omapi.uicc

android.hardware.biometrics.face

android.hardware.fingerprint

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

android.hardware.sensor.relative_humidity

android.hardware.sensor.stepcounter

android.hardware.sensor.stepdetector

Configuración de software

android.software.backup

android.software.connectionservice

android.software.expanded_picture_in_picture

android.software.live_wallpaper

android.software.picture_in_picture

android.software.telecom

android.software.wallet_location_based_suggestions

Telefonía

android.hardware.telephony

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

android.software.sip

android.software.sip.voip

Realidad virtual (heredada)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Widgets

android.software.app_widgets

Información sobre los permisos de XR

Al igual que las apps para dispositivos móviles y otros factores de forma, es posible que algunas funciones que ofrecen las apps de XR requieran que tu app declare permisos en el archivo AndroidManifest. En el caso de los permisos peligrosos, es posible que tu app necesite solicitar permisos de tiempo de ejecución. Lee Permisos en Android y las prácticas recomendadas para permisos para obtener información más detallada.

Permisos para funciones de RA

Las apps de XR pueden usar los siguientes permisos. Todos los permisos de esta sección se consideran peligrosos, por lo que debes declararlos en el manifiesto de tu app y solicitarlos durante el tiempo de ejecución.

android.permission.EYE_TRACKING

Casos de uso que requieren este permiso

Representa la posición y la orientación de los ojos del usuario para los avatares

Funciones del SDK de Jetpack XR que requieren este permiso

N/A

Extensiones de OpenXR que requieren este permiso

XR_ANDROID_avatar_eyes

Funciones de Unity que requieren este permiso

Android XR: Cara de RA

android.permission.EYE_TRACKING_FINE

Casos de uso que requieren este permiso

Entradas y interacciones de la mirada

Funciones del SDK de Jetpack XR que requieren este permiso

N/A

Extensiones de OpenXR que requieren este permiso

XR_EXT_eye_gaze_interaction

Funciones de Unity que requieren este permiso

Eye Gaze Interaction

android.permission.FACE_TRACKING

Casos de uso que requieren este permiso

Seguimiento y renderización de expresiones faciales

Funciones del SDK de Jetpack XR que requieren este permiso

N/A

Extensiones de OpenXR que requieren este permiso

XR_ANDROID_face_tracking

Funciones de Unity que requieren este permiso

XRFaceTrackingFeature

android.permission.HAND_TRACKING

Casos de uso que requieren este permiso

Hacer un seguimiento de las poses de las articulaciones de la mano y las velocidades angulares y lineales; usar una representación de malla de las manos del usuario

Funciones del SDK de Jetpack XR que requieren este permiso

N/A

Extensiones de OpenXR que requieren este permiso

XR_ANDROID_hand_mesh

XR_EXT_hand_tracking

Funciones de Unity que requieren este permiso

XR Hands

XRHandMeshFeature

android.permission.SCENE_UNDERSTANDING

Casos de uso que requieren este permiso

Estimación de la luz; proyección de la transmisión directa en las superficies de malla; realización de proyecciones de rayos en elementos rastreables en el entorno; seguimiento de planos; seguimiento de objetos; trabajo con profundidad para oclusiones y pruebas de impacto; anclas persistentes.

Funciones del SDK de Jetpack XR que requieren este permiso

Seguimiento de aviones

Prueba de posicionamiento

Persistencia de ancla

Extensiones de OpenXR que requieren este permiso

XR_ANDROID_anchor_persistence

XR_ANDROID_depth_texture

XR_ANDROID_light_estimation

XR_ANDROID_composition_layer_passthrough_mesh

XR_ANDROID_raycast

XR_ANDROID_trackables

XR_ANDROID_trackables_object

Funciones de Unity que requieren este permiso

XRAnchorFeature

XRDepthTextureFeature

XRLightEstimationFeature

XRPassthroughFeature

XRTrackableFeature

XRObjectTrackingFeature

Cómo garantizar la calidad de las apps para Android XR

Para asegurarte de que tu app brinde una excelente experiencia del usuario, consulta nuestros lineamientos de calidad de apps para Android XR.

Empaqueta y distribuye tu app para Android XR

Android XR ofrece una amplia variedad de apps y experiencias a los visores de XR a través de Google Play. En la guía para empaquetar y distribuir apps para Android XR, encontrarás información para comenzar a usar Play Store y Play Console, publicar segmentos, preparar paquetes de aplicaciones para Android y conocer las restricciones de tamaño de las apps.