Además de admitir apps compiladas para su uso mientras conduces, el SO Android Automotive admite apps de navegadores, juegos y video para usar mientras el vehículo está estacionado. Con solo unos pequeños cambios, puedes enviar la misma app a vehículos como lo haces a otros dispositivos con pantalla grande.
Prueba la app en un emulador del SO Android Automotive
Para comenzar a compilar la app para el SO Android Automotive, primero debes probar la app existente en un emulador del SO Android Automotive. Para configurar un emulador, sigue los pasos que se indican en Cómo realizar pruebas con el emulador del SO Android Automotive. Luego, puedes seguir las instrucciones que se indican en Cómo ejecutar tu app en el emulador.
Cuando ejecutes la 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 la app
Para orientarla al SO Android Automotive, la 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 vehículos.
Funciones obligatorias del SO Android Automotive
Para que se las muestre en Play Store en un vehículo, las apps compiladas para el SO Android Automotive deben incluir el siguiente elemento <uses-feature>
en el archivo AndroidManifest.xml
:
<manifest ...>
...
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
...
</manifest>
Las apps que se envían a segmentos no relacionados con vehículos 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 de un 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 sobre cómo 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 Nombres de paquetes en 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.
Cómo asegurarte de que no haya actividades con optimización de distracciones
Para asegurarte de que la app solo esté disponible para su uso cuando el vehículo esté estacionado, no incluyas el siguiente elemento <meta-data>
en ningún elemento <activity>
dentro del manifiesto:
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Sin estos metadatos, el SO bloquea automáticamente las actividades de la app cuando el automóvil entra 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 la app.
Entradas del manifiesto específicas de la categoría
Además de los requisitos anteriores, que se aplican a todas las apps para usar con el vehículo estacionado, las categorías de video y juegos tienen requisitos adicionales:
- En el caso de las apps de video, consulta Cómo marcar tu app como app de video.
- Para juegos, consulta Cómo marcar tu app como juego.
Optimiza tu app para el SO Android Automotive
Para brindarles a los usuarios la mejor experiencia posible, ten en cuenta lo siguiente cuando compiles tu app para el SO Android Automotive.
Optimiza tu contenido para pantallas grandes
Las pantallas de los vehículos con el SO Android Automotive son más similares en tamaño, resolución y relación de aspecto a las tablets y los dispositivos plegables que a los teléfonos. Por lo tanto, optimizar tu app para pantallas grandes también beneficia a los usuarios en vehículos.
En particular, consulta las guías Cómo brindar compatibilidad con diferentes tamaños de pantalla y Cómo migrar tu IU a diseños responsivos para obtener detalles sobre cómo aprovechar al máximo los tamaños de visualización grandes, así como las galerías de contenido multimedia y juegos para obtener inspiración y orientación sobre el diseño.
Otras optimizaciones para pantalla grande, como la compatibilidad de entrada, no son directamente beneficiosas para el SO Android Automotive, pero aun así pueden mejorar la experiencia del usuario. Por ejemplo, la navegación con teclado usa las mismas APIs que la navegación rotativa, por lo que cualquier optimización que se realice allí puede beneficiar a ambos factores de forma.
Cómo trabajar con inserciones de ventana y cortes de pantalla
Al igual que con otros factores de forma, el SO Android Automotive incluye elementos de la IU del sistema, como barras de estado y de navegación, y compatibilidad con pantallas no rectangulares.
De forma predeterminada, las apps se dibujan en un área que no se superpone con las barras del sistema ni los cortes de pantalla. Sin embargo, es posible que quieras que tu app oculte las barras del sistema, dibuje contenido detrás de ellas o muestre contenido en un corte de pantalla, como se describe en Cómo diseñar tu app en las inserciones de ventana. Si tu app realiza alguna de estas acciones, consulta las siguientes subsecciones para obtener detalles sobre cómo permitir que tu app funcione bien en el ecosistema de dispositivos del SO Android Automotive.
Barras del sistema, modo envolvente y renderización de borde a borde
Es posible que las barras del sistema de los vehículos tengan un tamaño y una posición diferentes que en otros factores de forma. Por ejemplo, las barras de navegación pueden colocarse a la izquierda, a la derecha o en la parte inferior de la pantalla. Incluso en el caso de que haya una barra de estado en la parte superior y una barra de navegación en la parte inferior (como sucede con la mayoría de los teléfonos y tablets), es probable que el tamaño de estos elementos sea mucho mayor en los vehículos.
Además, el SO Android Automotive permite a los OEM controlar si las apps pueden ocultar o mostrar las barras del sistema para ingresar al modo envolvente y salir de él. Por ejemplo, al evitar que las apps oculten las barras del sistema, los OEM pueden asegurarse de que siempre se pueda acceder a los controles del vehículo, como los de climatización, en la pantalla. Si un OEM impide que las apps controlen las barras del sistema, no sucede nada cuando una app llama a las WindowInsetsController
(o WindowInsetsControllerCompat
) para mostrar u ocultar las barras del sistema. Consulta la documentación de show
y hide
para obtener más información sobre cómo detectar si tu app pudo modificar las inserciones.
Del mismo modo, los OEM también pueden controlar si las apps pueden configurar el color y la translucidez de las barras del sistema para garantizar que las barras y los elementos contenidos dentro de ellas sean claramente visibles en todo momento. Si tu app dibuja de borde a borde, comprueba que solo se dibuje el contenido que no es crítico detrás de las barras del sistema. Es posible que este contenido no sea visible si el OEM del dispositivo impide configurar el color o la translucidez de las barras.
<!-- Depending on OEM configuration, these style declarations
(and the corresponding runtime calls) may be ignored -->
<style name="...">
<item name="android:statusBarColor">...</item>
<item name="android:navigationBarColor">...</item>
<item name="android:windowTranslucentStatus">...</item>
<item name="android:windowTranslucentNavigation">...</status>
</style>
Si tu app va de borde a borde, no hagas suposiciones sobre el tamaño, la cantidad, el tipo o la ubicación de las barras del sistema. En su lugar, usa las APIs de inserciones de ventana para distribuir el contenido de tu app en relación con las barras del sistema. Consulta Cómo mostrar el contenido de borde a borde en tu app para obtener más detalles sobre cómo usar estas APIs. Valores de padding hard-coded que, si bien nunca se recomiendan, pueden mantener el contenido en el área segura de otros dispositivos que probablemente no aparezcan en los vehículos.
Cómo adaptar a pantallas con formas irregulares
Además de las pantallas rectangulares, algunos vehículos pueden tener pantallas con forma irregular, como se muestra en la Figura 1:
![Diagrama de un dispositivo con el SO Android Automotive con una pantalla curva en el lado derecho.](https://developer.android.com/static/images/training/cars/aaos-curved.png?authuser=8&hl=es)
Si tu app no procesa de borde a borde, no necesitas realizar ninguna acción para que se renderice dentro del área segura.
Si tu app renderiza de borde a borde, puedes elegir cómo quieres que se comporte con respecto a los cortes de pantalla. Para lograrlo, usa recursos y configura el atributo android:windowLayoutInDisplayCutoutMode
para el tema de tu app, o bien, modifica el atributo layoutInDisplayCutoutMode
de la ventana en el tiempo de ejecución.
Debido a que los tipos de cortes de pantalla presentes en los dispositivos con el SO Android Automotive son diferentes a los de los dispositivos móviles, no uses LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
ni LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
, ya que tienen un comportamiento optimizado para los cortes que se encuentran en los dispositivos móviles. En su lugar, usa LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
o LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
para siempre evitar o ingresar el corte. Cuando elijas la última opción, consulta Cómo brindar compatibilidad con cortes de pantalla para obtener más detalles sobre las APIs relacionadas con estos cortes.
Si tu app se renderiza en el área de corte de pantalla y quieres que el comportamiento sea diferente entre el SO Android Automotive y los dispositivos móviles, consulta Cómo inhabilitar funciones para obtener orientación si tu app establece este comportamiento durante el tiempo de ejecución, y Cómo usar recursos alternativos si tu app establece este comportamiento con archivos de recursos.
Funciones inhabilitadas
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 la 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 o en 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.
Cómo controlar situaciones sin conexión
Si bien los vehículos se conectan cada vez más con Internet, se recomienda que las apps controlen la ejecución sin 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 desactive a favor de una red móvil.
Prepárate para manejar estas situaciones en la 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.
Cómo usar recursos alternativos
Si deseas adaptar la app para 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 distribuir la app
Después de probar la app con los lineamientos de calidad de apps para vehículos de su categoría y de compilarla con el SO Android Automotive con los cambios necesarios en su categoría, podrás publicarla en los segmentos de factores de forma de Automotive OS en Play Store. Si quieres obtener más información sobre el proceso de publicación, consulta Cómo distribuir apps para Android en vehículos.
Cómo enviar comentarios sobre las apps para usar con el vehículo estacionado
Si tienes un problema o una solicitud de función mientras desarrollas la app para usar con el vehículo estacionado, para el SO Android Automotive, puedes informarlo con la Herramienta de seguimiento de errores de Google. Asegúrate de completar toda la información solicitada en la plantilla de problemas. Antes de informar un problema nuevo, verifica si ya se informó en la lista de problemas. Para suscribirte a un problema o votarlo, haz clic en el ícono de estrella que aparece en la herramienta de seguimiento. Para obtener más información, consulta Cómo suscribirte a un problema.