Android

Librairies

Au dessus du kernel, il y a les librairies natives. Ces librairies sont écrites en C/C++. Elles fournissent les fonctionnalités de bas niveau d'Android.




Bionic libc

Comme cela a été dit précédemment, Android ne supporte pas la glibc, donc les ingénieurs d'Android ont développé une librairie C (libc) nommé Bionic libc . Elle est optimisée pour les appareils mobiles et a été développé spécialement pour Android.

Les ingénieurs d'Android ont décidé de développer une libc propre à la plateforme Android car ils avaient besoin d'une libc légère (la libc sera chargé dans chaque processus) et rapide (les appareils mobiles ne disposent de CPU puissant).

La Bionic libc a été écrit pour supporter les CPU ARM, bien que le support x86 est présent. Il n'y pas de support pour les autres architecture CPU tel que PowerPC ou MIPS. Néanmoins, pour le marché des appareils mobiles, seulement l'architecture ARM est importante.

Cette libc est sous licence BSD, elle reprend une grande partie du code des glibc issue d'OpenBSD, FreeBSD et NetBSD.

Caractéristique importante :


WebKit

Le navigateur web présent dans Android est basé sur le moteur de rendu sous licence BSD WebKit.
WebKit est moteur de rendu, qui fournit une "fondation" sur lequel on peut développer un navigateur web. Il a été originellement dérivé par Apple du moteur de rendu KHTML pour être utilisé par la navigateur web Safari et maintenant il est développé par KDE project, Apple, Nokia, Google et d'autres. WebKit est composé de deux librairies : WebCore et JavascriptCore qui sont disponible sous licence GPL.

WebKit supporte le CSS, Javascript, DOM, AJAX. La dernière version à obtenu 100% au test Acid 3. La version de WebKit présent dans Android à été légèrement modifiée pour s'adapter aux appareils mobiles. Ainsi le moteur de rendu basé sur WebKit présent dans Android supporte l'affichage sur une colonne.


Media Framework

La librairie Media Framework est basée sur OpenCore de PacketVideo. Elle permet le support des standards audio/vidéo/images.
Le schema ci dessous decrit toutes les fonctionnalitées fournit par cette librarie : 




Surface et Audio Flinger




Le Surface Flinger permet de construire le rendu graphique, il manipule toutes les surfaces à afficher provenant du frame buffer. Il peut combiner de la 2D et de la 3D provenant de différentes applications. Les surfaces à afficher sont passées par buffers via le Binder. Le surface flinger utilise un double buffer permettant de basculer d'une surfaces à une autres rapidement. Ce double buffer permet également de ne jamais afficher des surfaces incomplètes, car le deuxième buffer n'est affiché que lorsque celui est complet. Les deux buffers sont utilisés tour à tour.
Il peut utiliser OpenGL ES et l'accélération matérielle pour le rendu 2D en utilisant l'API khronos.




L'audio flinger gère tous périphériques audio. Il traite les flux audio et les route vers les périphériques de sortie (haut parleur, Bluetooth, casque).