Architecture Android

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

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

Vue d'ensemble de l'architecture du système Android
Figure 1. Architecture du système Android
  • Cadre applicatif . 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 être conscient des API de développeur, car nombre d'entre elles correspondent directement aux interfaces HAL sous-jacentes et peuvent fournir des informations utiles sur la mise en œuvre des pilotes.
  • Classeur CIB . Le mécanisme Binder Inter-Process Communication (IPC) permet au cadre de l'application de franchir les frontières 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 de l'infrastructure de l'application, cette communication est cachée au développeur et les choses semblent "fonctionner simplement".
  • Services système . Les services système sont des composants modulaires 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 du framework d'application communiquent avec les services système pour accéder au matériel sous-jacent. Android comprend deux groupes de services : système (tels que le gestionnaire de fenêtres et le gestionnaire de notifications) et multimédia (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 que les fournisseurs de matériel doivent implémenter, 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 ni modifier le système de niveau supérieur. Les implémentations HAL sont regroupées dans des modules et chargées par le système Android au moment opportun. Pour plus de détails, consultez Couche d'abstraction matérielle (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. Android utilise une version du noyau Linux avec quelques ajouts spéciaux tels que Low Memory Killer (un système de gestion de la mémoire plus agressif dans la préservation de la mémoire), les wakelocks (un service système PowerManager ), le pilote Binder IPC et d'autres fonctionnalités importantes. pour une plateforme embarquée mobile. Ces ajouts concernent principalement les fonctionnalités du système et n'affectent pas le développement des pilotes. 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 Construction de noyaux .

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

Android 8.0 a repensé l'architecture du système d'exploitation Android (dans un projet connu sous le nom de Treble ) pour permettre aux fabricants de mettre à jour plus facilement, plus rapidement et moins cher les appareils 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 cadre du système d'exploitation Android via une nouvelle interface de fournisseur. Les fournisseurs ou les fabricants de SOC créent les HAL une fois et les placent dans une partition /vendor sur l'appareil ; le framework, dans sa propre partition, peut alors être remplacé par une mise à jour over-the-air (OTA) sans recompiler les HAL.

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

  • Dans Android 7.x et les versions antérieures, aucune interface de 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. Environnement de mise à jour Android hérité
  • Dans Android 8.0 et versions ultérieures, une nouvelle interface de 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 cadre du système d'exploitation Android, sans travail supplémentaire requis de la part des fabricants de silicium :

    Figure 3. Environnement de mise à jour Android actuel

Tous les nouveaux appareils lancés avec Android 8.0 et versions ultérieures peuvent tirer parti de la nouvelle architecture. Pour assurer la compatibilité ascendante des implémentations des fournisseurs, l'interface du fournisseur est validée par la suite de tests de fournisseurs (VTS) , qui est analogue à la suite de tests de compatibilité (CTS) . Vous pouvez utiliser VTS pour automatiser les tests du noyau HAL et OS dans les architectures Android héritées et actuelles.

Ressources architecturales

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

  • Types HAL . Décrit les HAL binderisées, passthrough, Same-Process (SP) et héritées.
  • AIDL . Documentation sur AIDL, qu'il soit utilisé de manière générale ou comme interface HAL.
  • HIDL (Général) . Contient des informations générales sur l'interface entre une HAL et ses utilisateurs.
  • HIDL (C++) . Contient des détails sur la création d'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 permettant d'accéder aux éléments de configuration en lecture seule utilisés pour configurer le framework Android.
  • Superpositions d'arborescence de périphériques . Fournit des détails sur l'utilisation des superpositions d'arborescence d'appareils (DTO) dans Android.
  • Kit de développement natif du fournisseur (VNDK) . Décrit l'ensemble de bibliothèques exclusives aux fournisseurs pour l'implémentation des HAL des fournisseurs.
  • Objet d'interface fournisseur (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 personnalisations de SELinux.

En plus des ressources sur ce site, les membres de l'équipe Treble ont publié Treble: Fast Software Updates by Creating an Equilibrium in an Active Software Ecosystem of Globally Distributed Stakeholders . Le document est gratuit pour les membres de l'ACM et les non-membres peuvent acheter ou lire le résumé.