OEM 设计令牌

OEM 设计令牌是 Material Design 系统的 Android Automotive OS (AAOS) 实现。与移动设备上令牌值的算法或用户选择方法不同,OEM 指定设计令牌值。设计令牌代表构成设计系统视觉风格的小型、重复的设计决策,并将静态值替换为不言自明的名称。令牌类似于 Material Design 系统定义的令牌。

OEM 令牌库

OEM 设计令牌通过 OEM 令牌库引用,该库由图 1 所示的三个组件组成。

图 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 Automotive Services (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 安装为系统应用,但这样做会提供一些可能需要的更新行为。

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