Android est une pile logicielle Open Source basée sur Linux, créée pour un large éventail d'appareils et de facteurs de forme. La figure 1 présente les principaux composants de la plate-forme Android.
![Pile logicielle Android](https://developer.android.com/static/guide/platform/images/android-stack_2x.png?authuser=6&hl=fr)
Figure 1 : Pile logicielle Android
Noyau Linux
Le noyau Linux constitue le fondement de la plate-forme Android. Par exemple, Android Runtime (ART) s'appuie sur le noyau Linux pour les fonctionnalités sous-jacentes telles que les threads et la gestion de la mémoire de bas niveau.
L'utilisation d'un noyau Linux permet à Android de tirer parti des fonctionnalités de sécurité clés et permet aux fabricants d'appareils de développer des pilotes matériels pour un noyau bien connu.
Couche d'abstraction matérielle (HAL)
La couche d'abstraction matérielle (HAL) fournit des interfaces standards qui exposent les fonctionnalités matérielles de l'appareil au framework d'API Java de niveau supérieur. Le HAL se compose de plusieurs modules de bibliothèque, chacun implémentant une interface pour un type de composant matériel spécifique, tel que la caméra ou le module Bluetooth. Lorsqu'une API de framework effectue un appel pour accéder au matériel de l'appareil, le système Android charge le module de bibliothèque de ce composant matériel.
Environnement d'exécution Android
Pour les appareils équipés d'Android version 5.0 (niveau d'API 21) ou ultérieure, chaque application s'exécute dans son propre processus et avec sa propre instance d'Android Runtime (ART). ART est écrit pour exécuter plusieurs machines virtuelles sur des appareils à faible mémoire via l'exécution de fichiers au format exécutable Dalvik (DEX), un format de bytecode spécialement conçu pour Android et optimisé pour une quantité de mémoire minimale. Les outils de compilation, tels que d8
, compilent des sources Java en bytecode DEX pouvant s'exécuter sur la plate-forme Android.
Voici quelques-unes des principales fonctionnalités d'ART:
- Compilation anticipée (AOT) et juste-à-temps (JIT)
- Récupération de mémoire optimisée
- Sur Android 9 (niveau d'API 28) ou version ultérieure, conversion des fichiers DEX d'un package d'application en code machine plus compact
- Amélioration de la prise en charge du débogage, y compris un profileur d'échantillonnage dédié, des exceptions de diagnostic détaillées, des rapports d'erreur et la possibilité de définir des points d'observation pour surveiller des champs spécifiques.
Avant la version 5.0 d'Android (niveau d'API 21), Dalvik était l'environnement d'exécution Android. Si votre application s'exécute correctement sur ART, elle peut également fonctionner sur Dalvik, mais l'inverse peut ne pas être vrai.
Android inclut également un ensemble de bibliothèques d'exécution principales qui fournissent la plupart des fonctionnalités du langage de programmation Java, y compris certaines fonctionnalités du langage Java 8, utilisées par le framework d'API Java.
Bibliothèques C/C++ natives
De nombreux composants et services système Android essentiels, tels qu'ART et HAL, sont créés à partir de code natif nécessitant des bibliothèques natives écrites en C et C++. La plate-forme Android fournit des API de framework Java permettant d'exposer les fonctionnalités de certaines de ces bibliothèques natives aux applications. Par exemple, vous pouvez accéder à OpenGL ES via l'API Java OpenGL du framework Android pour prendre en charge le dessin et la manipulation des graphiques 2D et 3D dans votre application.
Si vous développez une application nécessitant du code C ou C++, vous pouvez utiliser le NDK Android pour accéder à certaines de ces bibliothèques de plates-formes natives directement à partir de votre code natif.
Framework de l'API Java
L'ensemble des fonctionnalités du système d'exploitation Android est disponible via des API écrites en langage Java. Ces API constituent les composants de base dont vous avez besoin pour créer des applications Android en simplifiant la réutilisation des composants et services système modulaires principaux, qui incluent les éléments suivants:
- Système de vues riche et extensible que vous pouvez utiliser pour créer l'interface utilisateur d'une application, avec des listes, des grilles, des zones de texte, des boutons et même un navigateur Web intégrable
- Un gestionnaire de ressources donnant accès à des ressources sans code telles que des chaînes, des images et des fichiers de mise en page localisés
- Un gestionnaire de notifications qui permet à toutes les applications d'afficher des alertes personnalisées dans la barre d'état
- Un gestionnaire d'activités qui gère le cycle de vie des applications et fournit une pile "Retour" de navigation commune
- Fournisseurs de contenu qui permettent aux applications d'accéder aux données d'autres applications (comme Contacts) ou de partager leurs propres données
Les développeurs ont un accès complet aux mêmes API framework que celles utilisées par les applications système Android.
Applis système
Android est fourni avec un ensemble d'applications principales pour les e-mails, les SMS, les agendas, la navigation sur Internet, les contacts et plus encore. Les applications incluses avec la plate-forme n'ont pas de statut particulier parmi celles que l'utilisateur choisit d'installer. Ainsi, une application tierce peut devenir le navigateur Web par défaut de l'utilisateur, sa messagerie SMS ou même son clavier par défaut. Certaines exceptions s'appliquent, telles que l'application Paramètres du système.
Les applications système fonctionnent à la fois comme des applications pour les utilisateurs et pour fournir des fonctionnalités clés auxquelles les développeurs peuvent accéder à partir de leur propre application. Par exemple, si vous souhaitez que votre application distribue des SMS, vous n'avez pas besoin de créer cette fonctionnalité vous-même. À la place, vous pouvez appeler l'application de SMS déjà installée pour envoyer un message au destinataire que vous spécifiez.