Architecture 1

1.Linux kernel

          • Il est basé sur un noyau 2.6 de Linux,
          • il assure la gestion multitâche préemptive des processus.
          • Il fournit les services système de bas-niveau tel que la gestion de la mémoire, stockage, énergie, communication réseaux et les drivers des différentes unités matérielles.

2. Hardware Abstraction Layer (HAL)

          • Cette couche se situe entre les librairies et le kernel linux, elle fournit les interfaces que doivent implémenter les drivers kernel. Cette couche sépare la plateforme logique des interfaces matérielles. Le but de cette couche est de faciliter le portage des librairies sur différents matériels.

Les ingénieurs d'Android ont décidé de faire cette couche car : 

les drivers kernel n’ont pas tous des interfaces standardisées.

les drivers kernel sont sous licence GPL ce qui exposerait les interfaces propriétaires des fabricants. Les fabricants veulent pouvoir garder ces interfaces en "closed source".

Android a des besoins spécifiques pour les drivers kernel. 

3. Librairies

Un ensemble de bibliothèques C/C++ (Natives) utilisées par les composants systèmes ; elles peuvent être aussi utilisées par les développeurs via le SDK.

Elle contient entre autres :

Libc : bibliothèque c standard, SSL: Secure Socket Layer communication

SGL : dessin 2D, OpenGL|ES: image 3D

Media Framework : media codecs, SQLite: gestionnaire de BDD SQLite

WebKit : noyau du browser web, FreeType: fonts Bitmap et vectorielles

SufraceManager : window manager with off-screen buffering.

4. Runtime

Cette couche se situe au-dessus des libraires C/C++, elle se compose du "cœur" du Framework et de la machine virtuel dalvik.

Les applications Java développées pour Android doivent être compilées au format dalvik exécutable (.dex) avec l'outil dx. Cet outil compile les .java en .class et ensuite il convertit ces .class en .dex. Un .dex peut contenir plusieurs classes. Les strings dupliquées et autre constantes utilisées dans de multiples classes sont regroupées dans un .dex. Le bytecode utilisé dans les .dex est le Dalvik bytecode et non le java Bytecode.   

La VM Dalvik a quelques caractéristiques spécifiques par rapport aux autres VM:

la VM a été "dégraissée" pour utiliser moins d'espace mémoire,

pas de  compilation à la volée (JIT),

elle utilise son propre bytecode et pas le Java bytecode,

la table des constantes a été modifié pour n'utiliser que des indexes de

32 bits afin de simplifier l'interpréteur.

Core Libraries : un ensemble d’API écrites en java que le développeur peut appeler dans son programme. Ceci inclut les packages qui sont dans la racine telles que : android.view, android.widget, android.media, …

5. Application framework

C’est l’ensemble des services offerts par Android pour l’utilisateur. Ces composants peuvent être réutilisés par le développeur pour les étendre à d’autres finalités.

Les développeurs ont le plein accès à tous les API de la Framework utilisées par les applications de base (core apps)

Les développeurs peuvent remplacer ces composants.

6. Applications

Cette couche englobe toutes les applications tournant sous Android, que se soient celles livré par la plateforme, telle que google Map, mail, …ou celles développées par des tiers.

Sécurité dans le système Android

Chaque application est exécutée dans une sandbox:

Android est un système Linux multi‐utilisateur

Chaque application est un utilisateur différent

Chaque fichier de l'application n'est accessible que par cette application

Par défaut, chaque processus possède sa machine virtuelle

Chaque application a son propre processus Linux

Les composants fondamentaux d’une application Android

Une application Android est construite sur la base de quatre composants fondamentaux : Activity, Service, ContentProvider et BroadcastReceiver. Chaque composant est un point d'entrée par lequel le système ou un utilisateur peut entrer dans votre application. Ces composants communiquent entre eux, et entre d’autres applications, via les Intents.

1. Activité

Une activité est la composante principale d’une application sous Android. L'activity est le métier de l'application et possède généralement une View au minimum, c'est-à-dire un écran graphique.

Elle hérite de la classe Activity (ou AppCompatActivity) de la plateforme et doit obligatoirement surcharger le callback onCreate.


2. Service

C’est un  composant polyvalent qui s'exécute en arrière-plan pour effectuer des opérations de longue durée ou des tâches pour des processus distants. Il ne fournit pas, généralement, l'interface utilisateur.  


3. BroadCast Receiver

C’est un composant qui permet au système de transmettre des événements à l'application en dehors d’un flux utilisateur normal, permettant à l'application de répondre aux annonces de diffusion à l’échelle du système.


4. Content Provider

Gère un ensemble partagé de données d'application que vous pouvez stocker dans le système de fichiers, dans une base de données SQLite, sur le Web ou dans tout autre emplacement de stockage persistant auquel votre application peut accéder.

ANDROID SDK

Contient les bibliothèques (packages ou libraries) de bases fournies par le  système pour le développement d’applications, plus d’autres outils de  compilation et de construction du package apk.

Il fournit aussi des outils nécessaires au test des applications :

émulateurs Android Virtual Device,

L’outil de débogage (DDMS)

l’Android Device Bridge (adb) pour la communication avec le mobile virtuel ou physique.

Un certain nombre d’exemples d’applications