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 :
- Elle pèse environ 200Ko soit la moitié de la glibc
- L'implémentation des pthreads (POSIX thread) a été complètement réécrit pour supporter les threads de la machine virtuelle Dalvik. De ce fait la Bionic libc ne supporte les threads POSIX
- Les exceptions C++ et les "wide char" ne sont pas supportés
- Il n'y a pas de "Standard Template Library" (STI)
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.