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 automóvil mientras este está estacionado.

Prueba la app en un emulador del SO Android Automotive

Para comenzar a compilar tu app para el SO Android Automotive, primero debes probar tu app para dispositivos móviles existente en un emulador del SO Android Automotive. Si quieres configurar un emulador, sigue los pasos que se indican en el documento para probar apps para Android en automóviles. Luego, puedes seguir las instrucciones en Cómo ejecutar tu app en el emulador.

Cuando ejecutes tu app, busca problemas de compatibilidad, como los siguientes:

  • Las pantallas de infoentretenimiento tienen orientaciones fijas. Para cumplir con los lineamientos de calidad de apps para automóviles, estas deben admitir las orientaciones vertical y horizontal.
  • Es posible que las APIs disponibles en otros dispositivos no estén disponibles en el SO Android Automotive. Por ejemplo, algunas APIs de los Servicios de Google Play no están disponibles en el SO Android Automotive. Consulta la sección Cómo inhabilitar funciones para obtener más detalles acerca de cómo solucionar estos problemas.

Cómo configurar los archivos de manifiesto de tu app

Para orientarla al SO Android Automotive, tu app debe tener ciertas entradas de manifiesto. Con ellas, las apps orientadas al SO Android Automotive se envían a Play Store a través de un tipo de versión independiente de Automotive. Se someten a un proceso de revisión manual para garantizar que sean seguras para su uso en un automóvil. Si deseas obtener más información, consulta Cómo distribuir apps para Android en automóviles.

Funciones obligatorias del SO Android Automotive

Para aparecer en Play Store en un automóvil, las apps de video creadas para el SO Android Automotive deben incluir los siguientes elementos <uses-feature> y <uses-library> en el archivo AndroidManifest.xml.

<manifest ...>
    ...
    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />
    ...
    <application ...>
        ...
        <uses-library
            android:name="android-automotive-video"
            android:required="true"/>
        ...
    </application>
</manifest>

Las apps que se envían a secciones no automotrices no pueden declarar los elementos <uses-feature> que se indican en la muestra de código anterior, ya que no pueden depender de hardware específico del automóvil. Por lo tanto, si quieres ofrecer la misma app para automóviles y otros tipos de dispositivos, debes generar al menos dos variantes de esta: una para dispositivos de automóviles y otra para dispositivos móviles. Si quieres obtener más información para crear estas variantes separadas, 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 APKs o paquetes de aplicaciones para dispositivos móviles y automóviles. Para conocer las compensaciones de cada enfoque, consulta la documentación sobre nombres de paquetes de la guía para desarrolladores de apps multimedia.

Además de los elementos que se muestran en el ejemplo de código anterior, las apps compiladas para el SO Android Automotive deben incluir los siguientes elementos <uses-feature> en el elemento <manifest> raíz:

<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 tu app para automóviles admite videos, agrega un archivo en formato XML llamado automotive_app_desc.xml al directorio res/xml/ de tu proyecto. En este archivo, incluye 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"/>

No incluyas actividades con optimización de distracciones

Las apps de video están diseñadas para usarse solo mientras el automóvil está estacionado. Por lo tanto, no incluyas el siguiente elemento <meta-data> en ningún elemento <activity>:

<!-- 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 automóvil entre en modo de conducción para reducir las distracciones para el conductor. Esto sucede como una devolución de llamada de ciclo de vida onPause, durante la cual debes pausar la reproducción de video y audio de tu app.

Optimiza tu app para el SO Android Automotive

Para brindarles a los usuarios la mejor experiencia posible, tal vez debas habilitar o inhabilitar determinadas funcionalidades según si tu app se ejecuta en un automóvil o no.

Inhabilitar funciones

Si quieres que una app para dispositivos móviles existente esté disponible en el SO Android Automotive, es posible que algunas características y funcionalidades no sean relevantes o no estén disponibles. Por ejemplo, por lo general, los automóviles no proporcionan 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 automóviles para 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, busca la función FEATURE_AUTOMOTIVE, como se muestra en el siguiente ejemplo:

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, puedes usar la API de CarConnection de la Biblioteca de apps de Android para vehículos para detectar si se ejecuta en el SO Android Automotive, Android Auto, o si directamente no está conectada a ningún automóvil.

Para la función pantalla en pantalla (PIP), sigue las prácticas recomendadas establecidas para verificar si la función está disponible y reaccionar de forma adecuada.

Controla situaciones sin conexión

Si bien los automóviles 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 usuarios pueden inhabilitar los datos móviles que ofrece el fabricante de automóviles como parte de un paquete de suscripción.
  • Es posible que el acceso a los datos móviles esté limitado en ciertas áreas.
  • Es posible que los automóviles con radios Wi-Fi estén fuera del alcance del Wi-Fi o que un OEM los inhabilite a favor de una red móvil.

Prepárate para manejar estas situaciones en tu app a través de la degradación elegante de la funcionalidad que depende del acceso a Internet, por ejemplo, cuando ofreces contenido sin conexión. Si deseas obtener más información, consulta las prácticas recomendadas para optimizar las herramientas de redes.

Usa recursos alternativos

Si deseas adaptar tu app para que sea compatible con vehículos, puedes usar el calificador de recursos car y proporcionar recursos alternativos cuando se ejecuta en un vehículo con el SO Android Automotive. Por ejemplo, si usas recursos de dimensión para almacenar valores de relleno, puedes usar un valor mayor en el conjunto de recursos car para agrandar los objetivos táctiles.

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

En general, sigue las instrucciones disponibles en Cómo probar apps para Android en automóviles. Solo los emuladores del SDK 30 y 32 que están disponibles en Android Studio incluyen la biblioteca de android-automotive-video, así que úsalos para probar la compilación de Automotive OS de tu app. Los emuladores de SDK inferiores no tienen la biblioteca, por lo que fallarán las instalaciones de adb de las apps que lo requieran. La biblioteca podría estar incluida en automóviles de producción en los niveles de SO inferiores.

Preguntas frecuentes

¿Widevine DRM es compatible?

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