OEM 设计令牌

OEM 设计令牌是 Material Design 系统的 Android Automotive OS (AAOS) 实现。与移动设备上令牌值的算法或用户选择方法不同,OEM 会指定设计令牌值。设计令牌表示重复的小设计决策,它们构成了设计系统的外观样式,并将静态值替换为不言自明的名称。令牌类似于 Material Design 系统所定义的令牌。

OEM 令牌库

OEM 设计令牌通过 OEM 令牌库加以引用,该库由三个组件组成,如下图所示。

OEM 令牌库组件
图 1. OEM 令牌库组件

静态库

OEM 令牌库的静态库组件便于访问令牌值,如下所示。

  • 提供 API 来访问 OEM 令牌值。
  • 支持选择使用 OEM 值替换主题中的令牌引用。

共享库

共享库组件负责定义以下内容:

  • 库名称。
  • 用于选择启用 OEM 令牌值的布尔值。
  • 用于提供 OEM 令牌值的样式。

如需调整此共享库组件(包括 OEM 定义的软件包名称)的 OEM 所有权,OEM 可以创建共享库实现的替换。

替换共享库实现
图 2. 替换共享库实现

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 作为系统应用进行安装,但这样做可以提供符合预期的更新行为。

  • 系统会在用户未登录时,自动更新应用。
  • 用户无法卸载(用户只能卸载更新)。