Partitions de produits

Android 9 et versions ultérieures permettent de compiler Partitions product à l'aide du système de compilation Android. Auparavant, Android 8.x a forcé la séparation des composants spécifiques au SoC depuis la partition system vers vendor sans dédier de l'espace aux composants OEM créés à partir du Système de compilation Android Android 9 ou version ultérieure offre autorisations et de liste blanche 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 celles des opérateurs. Cependant, de telles personnalisations impossible d'utiliser une seule image système pour plusieurs SKU de logiciels. Chaque l'image doit être différente pour prendre en charge les personnalisations, par exemple avec pays ou opérateurs différents. Avec un la partition product distincte pour y inclure les personnalisations. d'utiliser une seule image système pour plusieurs SKU de logiciels. (Le La partition system héberge du code générique pouvant être partagé entre de nombreux SKU). La partition vendor continue d'héberger Code BSP spécifique au SoC, qui peut être partagé entre plusieurs en fonction du SoC donné.

L'utilisation de partitions distinctes présente certains inconvénients, tels que la gestion de l'espace disque (un espace limité doit rester réservé pour de futurs (croissance) et maintenir une interface binaire d'application (ABI) stable entre les partitions. Avant si vous décidez d'utiliser des partitions product, prenez le temps de réfléchir à vos une implémentation unique de l'AOSP et des tactiques d'atténuation possibles (comme le repartitionnement d'un périphérique lors d'une opération Over The Air (OTA), qui n'est pas effectuée par Google, mais par certains OEM). Le partitionnement dynamique est est une bonne solution à cela.

Partitions et autorisations des produits

Dans Android 9 et versions ultérieures, une modification des autorisations et d'ajout à la liste blanche affecte la façon dont vous accordez des autorisations d'applications privées vos partitions "product". Le fichier permissions.xml doivent se trouver sur 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 dans le product. partition, même si la première est une extension de la seconde. Pour plus d'informations sur les autorisations et les processus d'ajout à la liste blanche, consultez Liste d'autorisation des autorisations privilégiées

Comparaison entre /oem et /product

Nous avons deux types d'attributs de la partition product en fonction sur le produit de l'interface utilisateur. De plus, la partition product est différente que l'ancienne partition oem:

Partition Attributs
oem
  • Non modifiable généralement flashé une fois en usine.
  • Il est conçu pour de petites variations, telles que l'image de marque et la couleur. Avoir des contenus de partition oem différents ne signifie pas que le produit les logiciels sont différents.
  • La partition system ne dépend pas la partition oem. (Il utilise la classe oem partition uniquement lorsqu'un fichier spécifique y est trouvé).
  • N'utilise l'API publique que sur la partition system.
product
  • Mise à jour possible
  • Associés à l'image système (mises à jour simultanées)
  • Créé par produit ou famille de produits.
  • La partition système peut dépendre de la partition product.
  • Possibilité d'utiliser des API non publiques puisqu'elles sont mises à jour simultanément.
product (interfaces forcées)
  • Mise à jour possible
  • Elle est découplée avec l'image système.
  • Créé par produit ou famille de produits.
  • La partition system ne dépend pas du product partition.
  • Vous ne pouvez pas utiliser d'API masquées, mais uniquement des API publiques et système sur le system.

C'est pourquoi Android 9 prend en charge la partition product tout en conserve la prise en charge de l'ancienne partition oem, pour les appareils qui dépendent de Pour dissocier la partition product de la system partition, Android 11 prend en charge application forcée de product de commande.

/composants du produit

La partition product contient les composants suivants:

  • Propriétés système spécifiques au produit (/product/build.prop)
  • RRO spécifiques au produit (/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 au produit (/product/media/audio/*)
  • Fichiers bootanimation spécifiques au produit

Aucune image personnalisée

Vous ne pouvez pas utiliser custom_images. Ils ne sont pas compatibles avec suivantes:

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

Conserver les ABI entre les partitions

La partition product dans Android 9 est une extension de la partition system. L'ABI est faible entre les partitions product et system, donc les deux doivent être sont mises à niveau en même temps, et l'ABI doit être basée sur le SDK du système. Si le 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 entre les deux partitions.

Les partitions product et system peuvent avoir de dépendance les uns des autres aux autres. Toutefois, les tests avec la méthode Image système générique (GSI) doit fonctionner correctement sans la partition product.

Lorsque les interfaces product sont appliquées, le product est découplée avec la partition system. product utilise uniquement les interfaces autorisées de la partition system.

La partition product ne doit avoir aucune dépendance via des interfaces instables sur la partition vendor. Interaction directe Les partitions product et vendor sont interdites. (Cette règle est appliquée par SEpolicy.)

Implémenter des partitions de produits

Avant d'implémenter une nouvelle partition de produits, consultez le modifications de la partition des produits dans AOSP. Ensuite, pour configurer product, inclure les indicateurs de tableau ou de build de produit suivants:

  • BOARD_USES_PRODUCTIMAGE
  • BOARD_PRODUCTIMAGE_PARTITION_SIZE
  • BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
  • PRODUCT_PRODUCT_PROPERTIES pour /product/build.prop. Ils doivent être compris 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 options de compilation suivantes pour installer un module sur 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 des logiciels malveillants, Sur Android le démarrage validé pour cette partition (tout comme vous partitions vendor et system). Pour activer l'AVB, inclure les indicateurs de compilation suivants: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS