Jetons de conception OEM

Les jetons de conception OEM sont une implémentation du système d'exploitation Android Automotive OS (AAOS) du système Material Design . Contrairement à l’approche algorithmique ou de sélection par l’utilisateur pour les valeurs des jetons sur mobile, les OEM désignent les valeurs des jetons de conception. Les jetons de conception représentent les petites décisions de conception répétées qui composent le style visuel d'un système de conception et remplacent les valeurs statiques par des noms explicites. Les jetons sont analogues à ceux définis par le système Material Design.

Bibliothèque de jetons OEM

Les jetons de conception OEM sont référencés via la bibliothèque de jetons OEM, qui comprend les trois composants illustrés dans la figure 1.

Figure 1. Composants de la bibliothèque de jetons OEM.

Bibliothèque statique

Le composant de bibliothèque statique de la bibliothèque de jetons OEM facilite l'accès aux valeurs des jetons comme suit.

  • Fournit des API pour accéder aux valeurs OEM des jetons.
  • Permet le remplacement volontaire des références de jetons dans le thème avec des valeurs OEM.

Bibliothèque partagée

Le composant de bibliothèque partagée est chargé de définir les éléments suivants :

  • Nom de la bibliothèque.
  • Opt-in booléen pour l’activation des valeurs de jeton OEM.
  • Style qui fournit des valeurs de jeton OEM.

Pour permettre la propriété OEM de ce composant de bibliothèque partagée, y compris un nom de package défini par l'OEM, les OEM peuvent créer un remplacement de l'implémentation de la bibliothèque partagée.

Figure 2. Remplacer une implémentation de bibliothèque partagée.

Bibliothèque partagée OEM

Les remplacements OEM du composant de bibliothèque partagée permettent à l'OEM de devenir propriétaire de la bibliothèque tout en maintenant la compatibilité avec d'autres composants de la bibliothèque de jetons OEM en fournissant un moyen pour que le nom et la signature du package soient définis par les OEM tout en laissant la mise en œuvre de la bibliothèque partagée inchangée.

Les remplacements pour une bibliothèque partagée peuvent être définis comme indiqué ci-dessous :

override_android_app {
    name: "[OEM]-token-shared-lib",
    base: "token-shared-lib",
    package_name: "com.[OEM].sharedlib",
    rename_resources_package: false,
    certificate: …
}

Pour définir les valeurs des jetons, consultez Spécifier les valeurs des jetons OEM .

Personnalisations de la bibliothèque partagée OEM

Pour prendre en charge divers schémas de valeurs de jeton (par exemple, différenciation de modèle ou de mode de conduite), les OEM peuvent fournir des valeurs dynamiques pour les jetons en ciblant la bibliothèque partagée OEM avec des superpositions de ressources d'exécution (RRO). Pour en savoir plus, consultez Modifier la valeur des ressources d'une application au moment de l'exécution .

Pour définir les valeurs des jetons, consultez Spécifier les valeurs des jetons OEM .

Spécifier les valeurs des jetons OEM

Pour spécifier des valeurs de jeton, définissez l'attribut correspondant dans le style OemStyle sur la valeur requise.

<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>

Acceptez les valeurs OEM

Pour que les applications puissent accéder aux valeurs de jeton fournies par les OEM, les OEM doivent d'abord choisir de remplacer les valeurs de jeton par défaut en configurant le booléen enable_oem_tokens sur true .

Valeurs des jetons RRO

De la même manière que les valeurs de jeton sont définies dans OemStyle , les RRO peuvent être utilisées pour modifier le style afin de fournir des valeurs de jeton alternatives.

<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>

Les RRO doivent définir les attributs de la bibliothèque partagée sur le style en spécifiant le nom de la bibliothèque partagée.

Configurer le chargement en dernier

Les systèmes qui incluent une implémentation OEM d'une bibliothèque partagée de jetons doivent configurer le système pour charger la bibliothèque partagée après les classes d'application. Pour ce faire, incluez le nom de la bibliothèque ( com.android.oem.tokens ) dans la configuration config_sharedLibrariesLoadedAfterApp sur le système. Si vous avez accès à Google Automotive Services (GAS), cela est obligatoire.

<!-- 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>

Les meilleures pratiques

Les meilleures pratiques pour la bibliothèque de jetons OEM sont décrites ci-dessous.

Activer une stratégie de mise à jour flexible

Consultez les stratégies ci-dessous pour garantir une certaine flexibilité en ce qui concerne les mises à jour.

Bibliothèque partagée OEM

Étant donné que les bibliothèques partagées par le système doivent être préinstallées sur les images système, les appareils doivent soit être livrés avec la bibliothèque, soit la bibliothèque doit être ajoutée dans le cadre d'une mise à jour Over-the-Air (OTA) (pour en savoir plus, voir Mises à jour OTA ). Cependant, l’inclusion d’une implémentation stub d’un remplacement OEM d’une bibliothèque partagée de jetons OEM sur une image système permet de transmettre ultérieurement une mise à jour vers une implémentation entièrement fonctionnelle aux appareils sans nécessiter d’OTA.

RRO de bibliothèque partagée

Bien qu'il ne soit pas obligatoire d'installer les RRO en tant qu'applications système, cela fournit un certain comportement de mise à jour qui pourrait être souhaité.

  • Mises à jour automatiques des applications lorsque les utilisateurs ne sont pas connectés.
  • Ne peut pas être désinstallé par l'utilisateur (les utilisateurs ne peuvent désinstaller que les mises à jour ).