La compatibilidad con pantallas de vehículos permite que las apps para teléfonos y tablets funcionen bien en dispositivos automotrices.
Se incluyen las siguientes funciones:
- Escalamiento de DPI: Ajusta los elementos de la IU de la app según el DPI de la pantalla.
- Área segura para la renderización de apps: Contiene el contenido de la app dentro de un área segura, lo que evita que los elementos de la IU del sistema lo oculten.
- Lógica de clasificación de apps: Identifica las apps que requieren compatibilidad con pantallas de vehículos.
Funciones de compatibilidad
La plataforma proporciona varios mecanismos para optimizar la renderización y el escalamiento de apps en pantallas automotrices.
Escalamiento de DPI
La función de escalamiento de DPI permite que los fabricantes de dispositivos ajusten el DPI de densidad de apps individuales o de todas las apps que requieren compatibilidad con pantallas de vehículos.
Para configurar el escalamiento de densidad de las apps, haz lo siguiente:
Agrega un archivo de configuración
/product/etc/display_compat_config.xml:<?xml version="1.0" encoding="utf-8"?> <!-- Each scale factor can have the following attributes display (required) Specifies the displayId to which this scale factor will be applied. packageName (optional) Specifies the packageName to which the scale factor will be applied. If omitted, the scaling will apply to all packages. For example: <scale display="0" packageName="com.android.car.media.localmediaplayer">0.5</scale> This means that only package `com.android.car.media.localmediaplayer` on display `0` will be scaled. --> <config> <scale display="0">1.0</scale> </config>Para establecer un valor de escala predeterminado para todas las apps que requieren compatibilidad con pantallas de vehículos, cambia la escala predeterminada para la pantalla 0 a
<scale display="0">1.0</scale>. El valor es el valor de escala inversa. Por ejemplo, para escalar apps que requieren compatibilidad con pantallas de vehículos a 1.5x, establece el valor de escala en(1 / 1.5) = 0.67:<config> <scale display="0">0.67</scale> </config>Para establecer un valor de escala para una app específica, agrega un nuevo elemento
scalea la configuración. En este ejemplo, YouTube Automotive se escala a 1.43x (por ejemplo,(1 / 1.43) = 0.7).<config> <scale display="0">0.67</scale> <scale display="0" packageName="com.google.android.apps.automotive.youtube">0.7</scale> </config>
Si el sistema se estaba ejecutando cuando cambiaste /product/etc/display_compat_config.xml, debes borrar la caché para que la nueva configuración surta efecto. Usa esta macro para borrar la caché:
SECURE_SETTING_KEY="android.software.car.display_compatibility:settings:secure"
USER_ID_LIST=$(adb shell cmd user list -v | grep 'id=' | cut -d'=' -f2 | cut -d',' -f1)
for USER_ID in $USER_ID_LIST; do
echo "Deleting Display Compat config for user: $USER_ID"
adb shell settings delete secure --user $USER_ID $SECURE_SETTING_KEY
sleep 1
echo
done
Agrega el archivo de configuración y la declaración de funciones a una compilación de AAOS, por ejemplo, en
vendor/OEM_NAME/products/displaycompat:# File: vendor/OEM_NAME/products/displaycompat/Android.bp prebuilt_etc { name: "display_compat_config", filename: "display_compat_config.xml", src: "display_compat_config.xml", product_specific: true, }
Área segura de la app
Las apps para teléfonos y tablets no suelen estar diseñadas para las barras grandes del sistema que se encuentran en Automotive. Se debe restringir que estas apps dibujen contenido debajo de las barras del sistema o las superposiciones del sistema. De lo contrario, podrían renderizar elementos interactivos en un área oculta para el usuario final.
El área segura de la app se implementa con la IU escalable SafeBounds.
Lógica de clasificación de apps
Puedes usar CarPackageManager.requiresDisplayCompat(..) para compilar funciones adicionales que mejoren la compatibilidad de las apps. Por ejemplo, puedes usar esta función para agregar un botón Atrás o una IU adicional.
Los desarrolladores de apps pueden habilitar la compatibilidad con pantallas de vehículos si incluyen metadatos en el manifiesto de la app:
<meta-data
android:name="android.software.car.display_compatibility"
android:value="true" />
El sistema evalúa si una app requiere funciones de compatibilidad con pantallas de vehículos con la siguiente lógica (evaluada en orden):
- Metadatos del manifiesto
android.software.car.display_compatibility:- Si
android:value="true"→ La app requiere compatibilidad - Si
android:value="false"→ La app no requiere compatibilidad - Si faltan metadatos, continúa con la comprobación siguiente.
- Si
- Usa la función
android.hardware.type.automotive:- Si se declara la función (independientemente de si
android:requiredestrueofalse) → La app no requiere compatibilidad - Si falta la función, continúa con la comprobación siguiente.
- Si se declara la función (independientemente de si
- Actividades de la app:
- Si la app no tiene actividades (como RRO, apps sin interfaz gráfica o servicios) → La app no requiere compatibilidad
- Si la app tiene actividades, continúa con la comprobación siguiente.
- Información de la aplicación:
- Si la app tiene privilegios → La app no requiere compatibilidad
- Si la app es una app del sistema (
FLAG_SYSTEM) → La app no requiere compatibilidad - De lo contrario, continúa con la comprobación siguiente.
- Información de la firma:
- Si la app está firmada por la plataforma (firmada con la misma firma que el framework de Android) → La app no requiere compatibilidad
- De lo contrario, continúa con la comprobación siguiente.
- Decisión de resguardo:
- Si todas las verificaciones se aprueban sin inhabilitar la función → La app requiere compatibilidad
Consulta
CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked.
Dispositivos compatibles
Los dispositivos que admiten la compatibilidad con pantallas de vehículos deben declarar la compatibilidad con la declaración de funciones:
<feature name="android.software.car.display_compatibility" />