OEM デザイン トークン

OEM デザイン トークンは、マテリアル デザイン システムの Android Automotive OS(AAOS)実装方法の一つです。モバイル上でアルゴリズムやユーザーがトークン値を選択する方法とは異なり、OEM がデザイン トークン値を指定します。デザイン トークンとは、デザイン システムの視覚的なスタイルを構成するために、小規模で繰り返し行われるデザイン上の決定を示すものであり、静的な値をわかりやすい名前で置き換えることができます。OEM トークンはマテリアル デザイン システムで定義されるトークンと同様のものです。

OEM トークン ライブラリ

OEM デザイン トークンは、下記の図に示す 3 つのコンポーネントで構成される OEM トークン ライブラリを介して参照されます。

OEM トークン ライブラリのコンポーネント
図 1. OEM トークン ライブラリのコンポーネント

静的ライブラリ

OEM トークン ライブラリの静的ライブラリ コンポーネントを使用すると、トークン値へのアクセスが、次のように容易になります。

  • トークンの OEM 値にアクセスするための API が提供されます。
  • OEM 値を使用して、テーマ内でのトークン参照をオプトインでオーバーライドできます。

共有ライブラリ

共有ライブラリ コンポーネントは、以下を定義します。

  • ライブラリ名。
  • OEM トークン値を有効にするオプトインのブール値。
  • OEM トークン値を提供するスタイル。

OEM が定義するパッケージ名など、OEM は共有ライブラリの実装のオーバーライドを作成することで、この共有ライブラリのコンポーネントに対して所有権を得ることができます。

共有ライブラリの実装をオーバーライドする
図 2. 共有ライブラリの実装をオーバーライドする

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 をシステムアプリとしてインストールすることは必須ではありませんが、そうすることで望ましい更新動作が提供できます。

  • ユーザーがログインしていないときにアプリを自動更新する。
  • ユーザーがアンインストールできないようにする(アップデートのアンインストールのみ可能)。