Partitions de produits

Android 9 et versions ultérieures prennent en charge la création de partitions product à l'aide du système de compilation Android. Auparavant, Android 8.x imposait la séparation des composants spécifiques au SoC de la partition system vers la partition vendor sans réserver d'espace pour les composants spécifiques à l'OEM créés à partir du système de compilation Android. Android 9 et versions ultérieures fournit des autorisations et fonctionnalités de liste blanche supplémentaires qui s'appliquent aux applications privées sur différentes partitions.

À propos des partitions de produits

De nombreux OEM personnalisent l'image système AOSP pour implémenter leurs propres fonctionnalités, ainsi que les exigences des opérateurs. Toutefois, de telles personnalisations rendent impossible l'utilisation d'une seule image système pour plusieurs SKU logiciels. Chaque image doit être différente pour prendre en charge les personnalisations, par exemple avec différentes langues ou opérateurs. L'utilisation d'une partition product distincte pour contenir les personnalisations permet d'utiliser une seule image système pour plusieurs SKU logiciels. (La partition system héberge du code générique qui peut être partagé entre de nombreux SKU logiciels). La partition vendor continue d'héberger le code BSP spécifique au SoC, qui peut être partagé entre plusieurs appareils en fonction du SoC donné.

L'utilisation de partitions distinctes présente certains inconvénients, tels que la gestion de l'espace disque (une quantité limitée d'espace doit rester réservée pour une future croissance) et la maintenance d'une interface binaire d'application (ABI) stable entre les partitions. Avant de décider d'utiliser des partitions product, prenez le temps d'examiner votre implémentation AOSP unique et les tactiques d'atténuation possibles (telles que le repartitionnement d'un appareil lors d'une mise à jour OTA, qui n'est pas effectué par Google, mais par certains OEM). Le partitionnement dynamique est une bonne solution pour cela.

Partitions et autorisations des produits

Sous Android 9 et versions ultérieures, une modification du processus d'autorisation et de liste blanche affecte la façon dont vous accordez des autorisations aux applications privées sur vos partitions de "produit". Le fichier permissions.xml doit se trouver dans la même partition que les applications privées. Placer un fichier permissions.xml dans la partition system pour les applications privées n'étend pas ces autorisations aux applications privées de la partition product, même si la première est une extension de la seconde. Pour en savoir plus sur les autorisations et les processus d'ajout à la liste blanche, consultez la section Ajout à la liste blanche des autorisations privilégiées.

Ancien /oem par rapport à /product

Il existe deux types d'attributs de la partition product en fonction de l'application de l'interface produit. De plus, la partition product est différente de l'ancienne partition oem:

Partition Attributs
oem
  • Non modifiable. Il est généralement flashé une fois en usine.
  • Elles sont conçues en fonction de petites variations, comme le branding et la couleur. Avoir des contenus de partition oem différents ne signifie pas que le logiciel du produit est différent.
  • La partition system ne dépend pas de la partition oem. (Il n'utilise la partition oem que lorsqu'un fichier spécifique y est trouvé).
  • N'utilise que l'API publique sur la partition system.
product
  • Mise à jour possible
  • Associé à l'image système (mise à jour simultanée)
  • Elles sont créées par produit ou par famille de produits.
  • La partition système peut dépendre de la partition product.
  • Peut utiliser des API non publiques, car elles sont mises à jour simultanément.
product (interfaces appliquées)
  • Mise à jour possible
  • Désassocié de l'image système.
  • Elles sont créées par produit ou par famille de produits.
  • La partition system ne dépend pas de la partition product.
  • Ne peut pas utiliser d'API masquées, mais n'utilise que des API publiques et système sur la partition system.

Pour ces raisons, Android 9 est compatible avec la partition product tout en conservant la compatibilité avec l'ancienne partition oem pour les appareils qui en dépendent. Pour dissocier la partition product de la partition system, Android 11 permet d'appliquer des interfaces product.

/composants de produit

La partition product contient les composants suivants:

  • Propriétés système spécifiques au produit (/product/build.prop)
  • RRO spécifiques aux produits (/product/overlay/*.apk)
  • Applications spécifiques aux produits (/product/app/*.apk)
  • Applications privées spécifiques au produit (/product/priv-app/*.apk)
  • Bibliothèques spécifiques aux produits (/product/lib/*)
  • Bibliothèques Java spécifiques au produit (/product/framework/*.jar)
  • Configurations système du framework Android spécifiques au produit (/product/etc/sysconfig/* et /product/etc/permissions/*)
  • Fichiers multimédias spécifiques aux produits (/product/media/audio/*)
  • Fichiers bootanimation spécifiques au produit

Aucune custom_images

Vous ne pouvez pas utiliser custom_images. Ils ne sont pas compatibles avec les éléments suivants:

  • Installer des modules dans une cible spécifique custom_images permet de copier des artefacts dans une image, mais ne peut pas installer un module dans une partition spécifique en spécifiant sa partition cible dans le cadre d'une règle de compilation.
  • Assistance Soong custom_images ne peut pas être généré à l'aide du système de compilation Soong.
  • Compatibilité avec les mises à jour OTA custom_images sont utilisés comme images ROM d'usine qui ne peuvent pas recevoir de mises à jour OTA.

Gérer les ABI entre les partitions

La partition product d'Android 9 est une extension de la partition system. Il existe une ABI faible entre les partitions product et system. Par conséquent, les deux doivent être mises à niveau en même temps, et l'ABI doit être basée sur le SDK système. Si le SDK système ne couvre pas toutes les surfaces d'API entre product et system, les OEM doivent gérer leurs propres ABI entre les deux partitions.

Les partitions product et system peuvent dépendre les unes des autres. Toutefois, les tests avec l'image système générique (GSI) doivent fonctionner correctement sans la partition product.

Lorsque les interfaces product sont appliquées, la partition product est dissociée de la partition system. La partition product n'utilise que les interfaces autorisées de la partition system.

La partition product ne doit pas présenter de dépendance via des interfaces instables sur la partition vendor. L'interaction directe entre les partitions product et vendor est interdite. (Cette mesure est appliquée par SEpolicy.)

Implémenter des partitions de produits

Avant d'implémenter une nouvelle partition de produit, consultez les modifications de partition de produit associées dans AOSP. Ensuite, pour configurer product, incluez les options de carte ou de compilation du produit suivantes:

  • BOARD_USES_PRODUCTIMAGE
  • BOARD_PRODUCTIMAGE_PARTITION_SIZE
  • BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
  • PRODUCT_PRODUCT_PROPERTIES pour /product/build.prop. Ils doivent se trouver dans un $(call inherit-product path/to/device.mk), comme dans PRODUCT_PRODUCT_PROPERTIES += product.abc=ok.

Installer un module dans la partition de produits

Utilisez les indicateurs de compilation suivants pour installer un module dans la partition product.

  • product_specific: true en Android.bp
  • LOCAL_PRODUCT_MODULE := true en Android.mk

Activer le démarrage validé

Pour éviter que la partition product ne soit altérée par un logiciel malveillant, activez le démarrage validé Android (AVB) pour cette partition (comme vous le faites pour les partitions vendor et system). Pour activer l'AVB, incluez les options de compilation suivantes : BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.