Architecture Android
Noyau Linux ou Linux kernel
Android utilise le puissant noyau Linux et prend en charge une large gamme de pilotes matériels. Le noyau est le cœur du système d'exploitation qui gère les demandes d'entrée et de sortie des logiciels. Il fournit les fonctionnalités de base du système comme la gestion des processus, la gestion de la mémoire, la gestion des périphériques tels que la caméra, le clavier, l'écran, etc. Linux est très bon en réseau et il n'est pas nécessaire de l'interfacer avec le matériel périphérique. Le noyau lui-même n'interagit pas directement avec l'utilisateur mais plutôt avec le shell et d'autres programmes ainsi qu'avec les périphériques du système.
Bibliothèques Android
En plus d'un ensemble de bibliothèques de développement Java standard (fournissant un support pour des tâches d'usage général telles que la manipulation des chaînes de caractères, la mise en réseau et la manipulation des fichiers), l'environnement de développement Android comprend également les bibliothèques Android. Il s'agit d'un ensemble de bibliothèques basées sur Java qui sont spécifiques au développement d'Android. Parmi les exemples de bibliothèques de cette catégorie figurent les bibliothèques du cadre d'application, ainsi que celles qui facilitent la création d'interfaces utilisateur, le dessin graphique et l'accès aux bases de données.
Voici un résumé de certaines des principales bibliothèques de base d'Android mises à la disposition du développeur Android :
android.app - Fournit l'accès au modèle d'application et constitue la pierre angulaire de toutes les applications Android.
android.content - Facilite l'accès au contenu, la publication et la messagerie entre les applications et les composants applicatifs.
android.database - Utilisé pour accéder aux données publiées par les fournisseurs de contenu et comprend des classes de gestion de base de données SQLite.
android.graphics - Une API de dessin graphique 2D de bas niveau comprenant des couleurs, des points, des filtres, des rectangles et des toiles.
android.hardware - Présente une API permettant d'accéder au matériel tel que l'accéléromètre et le capteur de lumière.
android.opengl - Interface Java de l'API de rendu graphique 3D OpenGL ES.
android.os - Fournit aux applications un accès aux services standard du système d'exploitation, notamment les messages, les services système et la communication interprocessus.
android.media - Fournit des classes pour permettre la lecture de fichiers audio et vidéo.
android.net - Ensemble d'API permettant d'accéder à la pile réseau. Comprend android.net.wifi, qui permet d'accéder à la pile sans fil du périphérique.
android.print - Comprend un ensemble de classes qui permettent d'envoyer du contenu à des imprimantes configurées à partir d'applications Android.
android.provider - Ensemble de classes pratiques permettant d'accéder aux bases de données standard des fournisseurs de contenu Android, telles que celles gérées par les applications de calendrier et de contact.
android.text' - Utilisé pour rendre et manipuler le texte sur l'écran d'un appareil.
android.util - Ensemble de classes utilitaires permettant d'effectuer des tâches telles que la conversion de chaînes et de nombres, la manipulation de XML et la manipulation de la date et de l'heure.
android.view - Les blocs de construction fondamentaux des interfaces utilisateur des applications.
android.widget - Une riche collection de composants d'interface utilisateur préconstruits tels que des boutons, des étiquettes, des vues de liste, des gestionnaires de mise en page, des boutons radio, etc.
android.webkit - Ensemble de classes destinées à permettre l'intégration de fonctionnalités de navigation sur le Web dans les applications.
Après avoir couvert les bibliothèques basées sur Java dans le runtime Android, il est maintenant temps de s'intéresser aux bibliothèques basées sur C/C++ contenues dans cette couche de la pile logicielle Android.
Bibliothèques C/C++
Les bibliothèques centrales du moteur d'exécution d'Android décrites dans la section précédente sont basées sur Java et fournissent les principales API aux développeurs qui écrivent des applications Android. Il est important de noter, cependant, que les bibliothèques centrales n'effectuent pas une grande partie du travail réel et sont, en fait, essentiellement des "enveloppes" Java autour d'un ensemble de bibliothèques C/C++. Lorsque l'on fait appel, par exemple, à la bibliothèque android.opengl pour dessiner des graphiques 3D sur l'écran du périphérique, la bibliothèque fait en fait appel à la bibliothèque OpenGL ES C++ qui, à son tour, travaille avec le noyau Linux sous-jacent pour effectuer les tâches de dessin.
Les bibliothèques C/C++ sont incluses pour remplir un large éventail de fonctions, notamment le dessin graphique 2D et 3D, la communication SSL (Secure Sockets Layer), la gestion de la base de données SQLite, la lecture audio et vidéo, le rendu des polices bitmap et vectorielles, la gestion du sous-système d'affichage et de la couche graphique, ainsi qu'une mise en œuvre de la bibliothèque système C standard (libc).
En pratique, le développeur d'applications Android typique accèdera à ces bibliothèques uniquement par le biais des API de la bibliothèque centrale Android basée sur Java. Si un accès direct à ces bibliothèques est nécessaire, il est possible d'utiliser le kit de développement natif Android (NDK), dont le but est d'appeler les méthodes natives des langages de programmation non Java ou Kotlin (tels que C et C++) à partir du code Java en utilisant l'interface native Java (JNI).
Le runtime Android
Au même niveau que les bibliothèques, le moteur d'exécution Android fournit un ensemble de bibliothèques de base qui permettent aux développeurs d'écrire des applications Android à l'aide de la plate-forme Java.
Le runtime Android comprend également la machine virtuelle Dalvik, qui permet à chaque application Android de s'exécuter dans son propre processus, avec sa propre instance de la machine virtuelle Dalvik (les applications Android sont compilées dans les exécutables Dalvik). Dalvik est une machine virtuelle spécialisée conçue spécifiquement pour Android et optimisée pour les appareils mobiles alimentés par batterie et dotés d'une mémoire et d'une unité centrale limitées.
Cadre d'application
Le cadre applicatif est un ensemble de services qui forment collectivement l'environnement dans lequel les applications Android s'exécutent et sont gérées. Ce cadre met en œuvre le concept selon lequel les applications Android sont construites à partir de composants réutilisables, interchangeables et remplaçables. Ce concept est poussé un peu plus loin dans la mesure où une application est également capable de publier ses capacités ainsi que les données correspondantes afin qu'elles puissent être trouvées et réutilisées par d'autres applications.
Le cadre Android comprend les services clés suivants :
Gestionnaire d'activités - Contrôle tous les aspects du cycle de vie de l'application et de la pile d'activités.
Fournisseurs de contenu - Permet aux applications de publier et de partager des données avec d'autres applications.
Gestionnaire de ressources - Permet d'accéder aux ressources intégrées non codées, telles que les chaînes de caractères, les paramètres de couleur et les dispositions de l'interface utilisateur.
Gestionnaire de notifications - Permet aux applications d'afficher des alertes et des notifications à l'utilisateur.
Système de vues - Ensemble extensible de vues utilisé pour créer des interfaces utilisateur d'applications.
Package Manager - Système permettant aux applications de trouver des informations sur les autres applications actuellement installées sur l'appareil.
Telephony Manager - Fournit des informations à l'application sur les services de téléphonie disponibles sur l'appareil, comme l'état et les informations sur les abonnés.
Location Manager - Fournit un accès aux services de localisation permettant à une application de recevoir des mises à jour sur les changements de localisation.
Applications
Au sommet du cadre android, il y a les applications. Toutes les applications telles que l'accueil, les contacts, les paramètres, les jeux, les navigateurs utilisent le cadre android qui utilise le runtime et les bibliothèques android. Le runtime Android et les bibliothèques natives utilisent le noyau linux.