\label{fig:fragmentacionAndroid}
\end{figure}
-Desde estos datos, un desarrollador Android probablemente elegirá como objetivo mínimo para su aplicación las versión de Android 1.6 y 2.0 a menos que realmente se necesiten características de las últimas versiones.
+Desde estos datos, un desarrollador Android probablemente elegirá como objetivo mínimo para su aplicación las versión de Android 1.6 y 2.0 a menos que realmente se necesiten características de las últimas versiones.
+
+\subsection{Arquitectura}
+
+En la Figura~\ref{fig:AndroidSystemArchitecture}) se muestran los principales componentes de la arquitectura Android. El color verde muestra la capa escrita en C o C++, el azul indica código Java que se ejecuta sobre la Máquina Virtual Dalvik.
+
+\begin{figure}[H]
+ \centering
+ \includegraphics[width=1\textwidth]{fig/AndroidSystemArchitecture}
+ \caption{\emph{Arquitectura del sistema Android.}}
+ \label{fig:AndroidSystemArchitecture}
+\end{figure}
+
+Android hace uso de la versión 2.6 del kernel de Linux, modificado debido a requisitos especiales en la gestión de la energía, la memoria y el entorno de ejecución. Justo por encima del kernel se ejecutan algunos demonios como \emph{bluez} para dar soporte a dispositivos Bluetooth y \emph{wpa\_supplicant} para la encriptación WiFi.
+Como Android debe ejecutarse en dispositivos con poca memoria y CPUs con bajo poder de ejecución, las librerías como la libc fueron modificadas para reducir el consumo de memoria. También el código relacionado con la reproducción de audio y vídeo (los \emph{codecs} y \emph{decodecs}) se ejecuta con código nativo y ha sido fuertemente optimizado.
+Android hace uso de la máquina virtual Dalvik, la cual es un interpretador de un byte code que ha sido transformado desde el byte code de Java al byte code especial de Dalvik. Dalvik en sí mismo es compilado como código C/C++ nativo mientras que las librerías son escritas en Java e interpretadas por Dalvik.
+
+En la capa \emph{Framework} o marco de trabajo se encuentra código y aplicaciones escritas en Java. Esta capa proporciona la abstracción necesaria para hacer uso de las librerías nativas y de las capacidades de Dalvik para desarrollar y ejecutar aplicaciones. Todos los programas para Android se ejecutan en su propia \emph{sandbox}, es decir, se ejecutan a parte del resto de aplicaciones; de tal modo que si una aplicación Android es comprometida digamos por un cracker el resto de aplicaciones permanecen inafectadas. Las aplicaciones Android se componen de actividades, servicios, receptores de broadcast y proveedores de contenido. Estos componentes pueden interactuar con otros de la misma o de diferentes aplicaciones vía intents.