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 |
|
product |
|
product (interfaces appliquées) |
|
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 dansPRODUCT_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
enAndroid.bp
LOCAL_PRODUCT_MODULE := true
enAndroid.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
.