车载屏幕兼容性可让手机和平板电脑应用在汽车设备上顺畅运行。
功能包括:
- DPI 缩放:根据显示屏 DPI 缩放应用界面元素。
- 应用渲染安全区:将应用内容包含在安全区内,避免被系统界面元素遮挡。
- 应用分类逻辑:识别需要车载显示屏兼容性的应用。
兼容性功能
该平台提供了多种机制来优化汽车显示屏上的应用渲染和缩放。
DPI 缩放
借助 DPI 缩放功能,设备制造商可以缩放单个应用或所有需要车载显示屏兼容性的应用的密度 DPI。
如需配置应用的密度缩放,请执行以下操作:
添加配置文件
/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>如需为所有需要 Car Display Compat 的应用设置默认缩放值,请将显示屏 0 的默认缩放值更改为
<scale display="0">1.0</scale>。该值是反向缩放值。例如,如需将需要 Car Display Compat 的应用缩放为 1.5 倍,请将缩放值设置为(1 / 1.5) = 0.67:<config> <scale display="0">0.67</scale> </config>如需为特定应用设置缩放值,请向配置添加新的
scale元素。在此示例中,YouTube Automotive 的缩放比例为 1.43 倍(例如,(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>
如果您在系统运行时更改了 /product/etc/display_compat_config.xml,则必须清除缓存,新配置才能生效。使用此宏可清除缓存:
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
将配置文件和功能声明添加到 AAOS build 中,例如在
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, }
安全应用区域
手机和平板电脑应用通常不是为 Automotive 中较大的系统栏设计的。必须限制这些应用在系统栏或系统叠加层下方绘制内容。否则,它们可能会在最终用户看不到的遮挡区域中呈现互动元素。
安全应用区域是使用可伸缩界面 SafeBounds 实现的。
应用分类逻辑
您可以使用 CarPackageManager.requiresDisplayCompat(..) 构建可增强应用兼容性的其他功能。例如,您可以使用此功能添加返回按钮或其他界面。
应用开发者可以在应用的清单中添加元数据,选择启用车载显示屏兼容性:
<meta-data
android:name="android.software.car.display_compatibility"
android:value="true" />
系统会使用以下逻辑(按顺序评估)来评估应用是否需要汽车显示屏兼容性功能:
- 清单元数据
android.software.car.display_compatibility:- 如果
android:value="true"→ 应用需要兼容性 - 如果
android:value="false"→ 应用不需要兼容性 - 如果缺少元数据,请继续执行下一项检查。
- 如果
- 使用功能
android.hardware.type.automotive:- 如果声明了该功能(无论
android:required是true还是false)→ 应用不需要兼容性 - 如果缺少此功能,请继续执行下一个检查。
- 如果声明了该功能(无论
- 应用活动:
- 如果应用没有 activity(例如 RRO、无头应用或服务)→ 应用不需要兼容性
- 如果应用有 activity,请继续执行下一项检查。
- 申请信息:
- 如果应用是特权应用 → 应用不需要兼容性
- 如果应用是系统应用 (
FLAG_SYSTEM) → 应用不需要兼容性 - 否则,请继续执行下一项检查。
- 签名信息:
- 如果应用是平台签名的(签名与 Android 框架的签名相同)→ 应用不需要兼容性
- 否则,请继续执行下一项检查。
- 后备决策:
- 如果所有检查都通过且未选择停用 → 应用需要兼容性
请参阅 CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked。
设备支持
支持汽车显示屏兼容性的设备必须使用以下功能声明来声明支持:
<feature name="android.software.car.display_compatibility" />