Architecture Android

L'architecture du système Android contient les composants suivants :

Présentation de l'architecture du système Android
Figure 1. Architecture du système Android
  • Cadre d'application. Le framework d'application est le plus souvent utilisé par les développeurs d'applications. En tant que développeur de matériel, vous devez connaître les API de développeur, car beaucoup correspondent directement aux interfaces HAL sous-jacentes et peuvent fournir des informations utiles sur la mise en œuvre des pilotes.
  • Binder IPC. Le mécanisme Binder Inter-Process Communication (IPC) permet à l'infrastructure d'application de franchir les limites des processus et d'appeler le code des services système Android. Cela permet aux API de framework de haut niveau d'interagir avec les services système Android. Au niveau du framework d'application, cette communication est cachée au développeur et les choses semblent "fonctionner".
  • Services système. Les services système sont des composants modulaires et ciblés tels que le gestionnaire de fenêtres, le service de recherche ou le gestionnaire de notifications. Les fonctionnalités exposées par les API d'infrastructure d'application communiquent avec les services système pour accéder au matériel sous-jacent. Android comprend deux groupes de services: système (comme gestionnaire de fenêtres et le gestionnaire de notification) et des médias (services impliqués dans la lecture et l' enregistrement des médias).
  • Couche d'abstraction matérielle (HAL). Un HAL définit une interface standard à mettre en œuvre par les fournisseurs de matériel, ce qui permet à Android d'être agnostique quant aux implémentations de pilotes de niveau inférieur. L'utilisation d'un HAL vous permet d'implémenter des fonctionnalités sans affecter ou modifier le système de niveau supérieur. Les implémentations HAL sont empaquetées dans des modules et chargées par le système Android au moment opportun. Pour plus de détails, consultez la section Hardware Abstraction Layer (HAL) .
  • Noyau Linux. Le développement de vos pilotes de périphérique est similaire au développement d'un pilote de périphérique Linux typique. Utilise Android une version du noyau Linux avec quelques ajouts spéciaux tels que tueur à faible mémoire (un système de gestion de la mémoire qui est plus agressive dans la préservation de la mémoire), serrures de réveil (un PowerManager service système), le pilote IPC Binder, et d' autres caractéristiques importantes pour une plate-forme mobile embarquée. Ces ajouts concernent principalement les fonctionnalités du système et n'affectent pas le développement du pilote. Vous pouvez utiliser n'importe quelle version du noyau tant qu'elle prend en charge les fonctionnalités requises (telles que le pilote de classeur). Cependant, nous vous recommandons d'utiliser la dernière version du noyau Android. Pour plus de détails, voir bâtiment Noyaux .

Langage de définition d'interface HAL (AIDL/HIDL)

Android 8.0 re-architecturé le cadre Android OS (dans un projet connu sous le nom Treble) pour le rendre plus facile, plus rapide et moins coûteux pour les fabricants de dispositifs de mise à jour vers une nouvelle version d'Android. Dans cette nouvelle architecture, le langage de définition d'interface HAL (HIDL, prononcé "hide-l") spécifie l'interface entre un HAL et ses utilisateurs, permettant de remplacer le framework Android sans reconstruire les HAL. Dans Android 10, les fonctionnalités HIDL ont été intégrées à AIDL. Depuis lors, HIDL est obsolète et n'est utilisé que par les sous-systèmes qui n'ont pas encore été convertis en AIDL.

Treble sépare l'implémentation du fournisseur (logiciel de niveau inférieur spécifique à l'appareil écrit par les fabricants de silicium) du framework Android OS via une nouvelle interface de fournisseur. Les vendeurs ou les fabricants de construire SOC HALs une fois et les placer dans un /vendor partition sur le périphérique; le cadre, dans sa propre partition, peut alors être remplacée par une mise à jour over-the-air (OTA) sans recompiler les HALs.

La différence entre l'ancienne architecture Android et l'architecture actuelle basée sur IDL réside dans l'utilisation de l'interface du fournisseur :

  • Dans Android 7.x et versions antérieures, aucune interface fournisseur formelle n'existe, les fabricants d'appareils doivent donc mettre à jour de grandes parties du code Android pour déplacer un appareil vers une version plus récente d'Android :

    Figure 2. Héritage environnement mise à jour Android
  • Dans Android 8.0 et versions ultérieures, une nouvelle interface fournisseur stable permet d'accéder aux parties spécifiques au matériel d'Android, afin que les fabricants d'appareils puissent fournir de nouvelles versions d'Android simplement en mettant à jour le framework Android OS, sans travail supplémentaire requis de la part des fabricants de silicium :

    Figure 3. actuel environnement de mise à jour Android

Tous les nouveaux appareils lancés avec Android 8.0 et versions ultérieures peuvent profiter de la nouvelle architecture. Pour assurer la compatibilité ascendante des implémentations de fournisseur, l'interface fournisseur est validée par le test du fournisseur Suite (VTS) , qui est analogue au test de compatibilité Suite (CTS) . Vous pouvez utiliser VTS pour automatiser les tests du noyau HAL et OS dans les architectures Android existantes et actuelles.

Ressources d'architecture

Pour plus de détails sur l'architecture Android, consultez les sections suivantes :

  • Types HAL . Décrit les HALs binderized, passthrough, Same-Process (SP) et hérités.
  • AIDL . Documentation sur AIDL, qu'il soit utilisé en général ou comme interface HAL.
  • HIDL (général) . Contient des informations générales sur l'interface entre un HAL et ses utilisateurs.
  • HIDL (C ++) . Contient des détails pour créer des implémentations C++ d'interfaces HIDL.
  • HIDL (Java) . Contient des détails sur l'interface Java pour les interfaces HIDL.
  • ConfigStore HAL . Décrit les API pour accéder aux éléments de configuration en lecture seule utilisés pour configurer le framework Android.
  • Arbre appareil Superpositions . Fournit des détails sur l'utilisation des superpositions d'arborescence de périphériques (DTO) dans Android.
  • Native Development Kit fournisseur (VNDK) . Décrit l'ensemble des bibliothèques exclusives aux fournisseurs pour la mise en œuvre des HAL des fournisseurs.
  • Object Interface fournisseur (de VINTF) . Décrit les objets qui regroupent les informations pertinentes sur un appareil et rendent ces informations disponibles via une API interrogeable.
  • SELinux pour Android 8.0 . Détails des modifications et des personnalisations de SELinux.

En plus des ressources sur ce site, les membres de l'équipe des aigus publié des aigus: rapide Mises à jour du logiciel en créant un équilibre dans un logiciel actif de l' écosystème dispersés géographiquement les parties prenantes . L'article est gratuit pour les membres de l'ACM et les non-membres peuvent acheter ou lire le résumé.