Compilación de apps de video para el SO Android Automotive

El SO Android Automotive permite que los usuarios ejecuten tu app de video en el sistema de infoentretenimiento del vehículo mientras este está estacionado.

Prueba la app en un emulador del SO Android Automotive

A fin de comenzar a compilar tu app para el SO Android Automotive, primero debes probar tu app para dispositivos móviles existente (para teléfonos y tablets) en un emulador de dicho sistema operativo. Si quieres configurar un emulador, sigue los pasos que se indican en el documento para probar apps para Android en vehículos. Para ejecutar la app, sigue estas instrucciones.

Cuando ejecutas tu app, debes tener cuidado con los problemas de compatibilidad, como los siguientes:

  • Las pantallas de infoentretenimiento vienen con orientaciones fijas. Según los lineamientos de calidad de apps para vehículos, estas deben admitir las orientaciones vertical y horizontal.
  • Es posible que las API disponibles en otros dispositivos no estén disponibles en el SO Android Automotive. Por ejemplo, algunas API de los Servicios de Google Play (como la API de Cast) no están disponibles en el SO Android Automotive. Consulta la sección para inhabilitar funciones a fin de obtener más detalles sobre cómo solucionar estos problemas.

Configura los archivos del manifiesto de tu app

A fin de orientar apps al SO Android Automotive, hay una serie de entradas de manifiesto que debe tener tu app. Con ellos, las apps orientadas a este sistema operativo pueden enviarse a Play Store con un tipo de versión Automotive independiente y se someterán a un proceso de revisión manual para garantizar que sean seguras para su uso en un vehículo. Si deseas obtener más información, consulta Cómo distribuir apps para Android en vehículos.

Funciones que requiere el SO Android Automotive

Para aparecer en Play Store en un vehículo, las apps de video creadas para el SO Android Automotive deben incluir el siguiente elemento <uses-library> en el elemento <application> del archivo AndroidManifest.xml.

<uses-library
  android:name="android-automotive-video"
  android:required="true"/>

Las apps que se envían a dispositivos que no son para vehículos no pueden declarar la etiqueta anterior, ya que no pueden depender de hardware específico para ellos. Por lo tanto, a fin de enviar la misma app para dispositivos tanto para vehículos como para otra clase de dispositivos, estas deben generar al menos dos variantes de la app: una para dispositivos de vehículos y otra para dispositivos móviles (teléfonos y tablets). Si quieres obtener más información para crear estos tipos separados, consulta la siguiente documentación:

Las dos variantes de la app pueden compartir el mismo nombre de paquete, pero deben tener códigos de versión diferentes, ya que se subirán a secciones de Play Store por separado.

Como alternativa, en lugar de usar variantes separadas, las apps pueden usar nombres de paquetes independientes para los APK o paquetes de aplicaciones para dispositivos móviles y vehículos. Para conocer las compensaciones de cada enfoque, consulta la documentación sobre nombres de paquetes en la guía para desarrolladores de apps multimedia.

Además del elemento <uses-library>, las apps que se crean para el SO Android Automotive deben incluir los siguientes elementos <uses-feature> en la raíz <manifest>.

<uses-feature
  android:name="android.hardware.wifi"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.portrait"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.landscape"
  android:required="false"/>

La configuración explícita de estas funciones como no obligatorias garantiza que la app no entre en conflicto con las funciones de hardware disponibles en dispositivos con el SO Android Automotive.

Marca tu app como app de video

Para indicar que tienes una app para la industria automotriz que admite videos, agrega un archivo en formato XML que se llama automotive_app_desc.xml al directorio res/xml/ de tu proyecto. Este archivo debe incluir el siguiente contenido:

<automotiveApp>
  <uses name="video"/>
</automotiveApp>

Luego, dentro del elemento <application> de tu manifiesto, agrega el siguiente elemento <meta-data> que hace referencia al archivo en formato XML:

<meta-data
  android:name="com.android.automotive"
  android:resource="@xml/automotive_app_desc"/>

Asegúrate de que no haya actividades con optimización de distracciones

Actualmente, las apps de video están diseñadas para usarse solo mientras el vehículo está estacionado. Por lo tanto, ningún elemento <activity> debe incluir el siguiente elemento <meta-data>:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

Sin estos metadatos, el SO bloqueará automáticamente las actividades de tu app cuando el vehículo entre en modo de conducción a fin de reducir las distracciones para el conductor. En tu app, esto ocurrirá como una devolución de llamada de ciclo de vida onPause, durante la cual debes asegurarte de que se pause la reproducción de video y audio de tu app.

Prueba tu app para el SO Android Automotive

Para brindarles a los usuarios la mejor experiencia posible, es posible que debas habilitar o inhabilitar determinadas funcionalidades según si tu app se ejecuta en un vehículo o no.

Funciones inhabilitadas

Si hay una app para dispositivos móviles existente que estará disponible en el SO Android Automotive, algunas características y funcionalidades podrían no ser relevantes o no estar disponibles. Por ejemplo, por lo general, los vehículos no brindan acceso a las cámaras. Además, solo hay un subconjunto de Servicios de Google Play disponible para el SO Android Automotive. Consulta los Servicios de Google Play para vehículos a fin de obtener más información.

Puedes usar la API de PackageManager.hasSystemFeature para detectar si la app se ejecuta en el SO Android Automotive. Para ello, verifica la función FEATURE_AUTOMOTIVE.

Kotlin

val packageManager: PackageManager = ... // Get a PackageManager from a Context
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Java

PackageManager packageManager = ... // Get a PackageManager from a Context
boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Como alternativa, si tu app también tiene un componente de Android Auto, podría tener sentido usar la API de CarConnection de la Biblioteca de apps para vehículos a fin de detectar si se ejecuta en el SO Android Automotive, Android Auto, o bien no se ejecuta en un vehículo en absoluto.

Controla situaciones sin conexión

Si bien los vehículos se conectan cada vez más con Internet, las apps deberían ser capaces de controlar la ejecución sin una conexión a Internet, como en los siguientes casos:

  • Los fabricantes de vehículos pueden ofrecer datos móviles como parte de un paquete de suscripción (que los usuarios pueden o no comprar).
  • Es posible que los usuarios tengan habilitados los datos móviles, pero es posible que se limite el acceso en determinadas áreas (al igual que con un teléfono).
  • Los vehículos pueden tener o no tener radios Wi-Fi. En esos casos, es posible que un vehículo nunca llegue a estar dentro del rango de conexión Wi-Fi o que un OEM haya inhabilitado esa conexión a fin de priorizar una red móvil.

Las apps deben estar preparadas para manejar estas situaciones y degradarse de forma elegante (por ejemplo, mediante contenido sin conexión). Si deseas obtener más información, consulta las prácticas recomendadas para optimizar las herramientas de redes.

Cómo probar apps de video en el SO Android Automotive

En general, los desarrolladores pueden seguir las instrucciones disponibles en Cómo probar apps de Android para vehículos. Actualmente, solo el emulador del SDK 32 que está disponible en Android Studio incluye la biblioteca Android Automotive Video, por lo que debería usarse para las pruebas. Los emuladores de SDK inferiores no permitirán la instalación de adb de apps con la biblioteca de videos requerida, aunque podría estar incluida en vehículos de producción en esos niveles de SO.

Preguntas frecuentes

¿Widevine DRM es compatible?

Sí, Widevine DRM L3 es compatible con el SO Android Automotive.