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
bootanimationspé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_imagespermet 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_imagesne peut pas être généré à l'aide du système de compilation Soong. - Compatibilité avec les mises à jour OTA
custom_imagessont 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_PRODUCTIMAGEBOARD_PRODUCTIMAGE_PARTITION_SIZEBOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPEPRODUCT_PRODUCT_PROPERTIESpour/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: trueenAndroid.bpLOCAL_PRODUCT_MODULE := trueenAndroid.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.