OEM 设计令牌是 Material Design 系统的 Android Automotive OS (AAOS) 实现。与移动设备上令牌值的算法或用户选择方法不同,OEM 会指定设计令牌值。设计令牌表示重复的小设计决策,它们构成了设计系统的外观样式,并将静态值替换为不言自明的名称。令牌类似于 Material Design 系统所定义的令牌。
OEM 令牌库
OEM 设计令牌通过 OEM 令牌库加以引用,该库由三个组件组成,如下图所示。
![OEM 令牌库组件](https://source.android.google.cn/static/docs/devices/automotive/images/token-library-01.png?authuser=5&hl=nl)
静态库
OEM 令牌库的静态库组件便于访问令牌值,如下所示。
- 提供 API 来访问 OEM 令牌值。
- 支持选择使用 OEM 值替换主题中的令牌引用。
共享库
共享库组件负责定义以下内容:
- 库名称。
- 用于选择启用 OEM 令牌值的布尔值。
- 用于提供 OEM 令牌值的样式。
如需调整此共享库组件(包括 OEM 定义的软件包名称)的 OEM 所有权,OEM 可以创建共享库实现的替换。
![替换共享库实现](https://source.android.google.cn/static/docs/devices/automotive/images/token-library-02.png?authuser=5&hl=nl)
OEM 共享库
通过为 OEM 提供一种设置软件包名称和签名的途径,共享库的实现则保留不变,OEM 可以替换共享库组件,获得库的 OEM 所有权,同时与 OEM 令牌库中的其他组件保持兼容。
共享库的替换的定义如下所示:
override_android_app { name: "[OEM]-token-shared-lib", base: "token-shared-lib", package_name: "com.[OEM].sharedlib", rename_resources_package: false, certificate: … }
如需设置令牌值,请参阅指定 OEM 令牌值。
OEM 共享库自定义
如需支持不同的令牌值方案(例如,模型或驾车模式区分),OEM 可以通过运行时资源叠加层 (RRO) 定位 OEM 共享库,为令牌提供动态值。如需了解详情,请参阅在运行时更改应用资源的值。
如需设置令牌值,请参阅指定 OEM 令牌值。
指定 OEM 令牌值
如需指定令牌值,请在样式 OemStyle
中将相应的属性设置为所需的值。
<resources> <style name="OemStyle"> <item name="colorPrimary">#B0C5FF</item> <item name="colorOnPrimary">#002B76</item> <item name="colorPrimaryContainer">#003FA4</item> <item name="colorOnPrimaryContainer">#D9E2FF</item> … </style> </resources>
自选 OEM 值
如果应用要访问 OEM 提供的令牌值,OEM 必须先通过将 enable_oem_tokens
布尔值配置为 true
,来选择替换默认令牌值。
RRO 令牌值
与在 OemStyle
中设置令牌值的方式类似,RRO 可用于修改样式,以提供替代令牌值。
<resources> <style name="OemStyle"> <item name="com.android.oem.tokens:colorPrimary">#B0C5FF</item> <item name="com.android.oem.tokens:colorOnPrimary">#002B76</item> <item name="com.android.oem.tokens:colorPrimaryContainer">#003FA4</item> <item name="com.android.oem.tokens:colorOnPrimaryContainer">#D9E2FF</item> … </style> </resources>
RRO 应通过指定共享库名称来设置样式中的共享库属性。
配置上次加载项
如果系统包含令牌共享库的 OEM 实现,则必须将系统配置为在应用类后加载共享库。为此,请在系统的 config_sharedLibrariesLoadedAfterApp
配置中添加库名称 (com.android.oem.tokens
)。如果您有权访问 Google 汽车服务 (GAS),系统会强制执行该要求。
<!-- The OEM token shared library will be loaded after app classes --> <string-array name="config_sharedLibrariesLoadedAfterApp" translatable="false"> <item>com.android.oem.tokens</item> </string-array>
最佳实践
下文介绍了 OEM 令牌库的最佳实践。
启用灵活的更新策略
请参阅以下策略,确保灵活更新。
OEM 共享库
由于系统映像需要预安装系统共享库,因此设备必须附带该库,或者在无线下载 (OTA) 更新(如需了解详情,请参阅 OTA 更新)过程中添加此库。不过,在系统映像上添加 OEM 令牌共享库的 OEM 替换的存根实现,有助于日后将完整工作实现的更新推送到设备,而无需进行 OTA。
共享库 RRO
虽然不要求将 RRO 作为系统应用进行安装,但这样做可以提供符合预期的更新行为。
- 系统会在用户未登录时,自动更新应用。
- 用户无法卸载(用户只能卸载更新)。