End of chapter 3
authorgumartinm <gustavo@gumartinm.name>
Tue, 9 Oct 2012 05:13:32 +0000 (07:13 +0200)
committergumartinm <gustavo@gumartinm.name>
Tue, 9 Oct 2012 05:13:32 +0000 (07:13 +0200)
capitulo3/capitulo3.tex
fig/DalvikJava.png [new file with mode: 0644]
myrefs.bib

index e10aaf4..ae76fe7 100644 (file)
@@ -210,7 +210,7 @@ El conjunto del software del cual está compuesto Android, desde los módulos Li
 
 Además Android se distribuye bajo la licencia Apache/MIT, así que otros pueden libremente extenderlo y usarlo para una gran variedad de propósitos. Incluso algunos librerías open source que fueron portadas al \emph{stack} de Android fueron reescritas bajo los términos de esta licencia.
 
-Así, como desarrollador, cualquiera puede acceder al código fuente de la plataforma. Esto permite a los programadores ver cómo funciona internamente el sistema operativo Android. Por otro lado a los fabricantes les facilita el esfuerzo y tiempo requeridos para portar el sistema operativo Android a sus respectivos hardwares.
+Así, como desarrollador, cualquiera puede acceder al código fuente de la plataforma. Esto permite a los programadores ver cómo funciona internamente el sistema operativo Android. Por otro lado a los fabricantes les facilita el esfuerzo y tiempo requeridos para portar el sistema operativo Android a sus respectivos hardwares~\cite{C3:LearningAndroid}.
 
 \subsection{Diseñado para dispositivos móviles}
 
@@ -232,7 +232,7 @@ En 2010, Android es la segunda plataforma detrás de Blackberry en número de te
 
 \subsection{La motivación de Google}
 
-La principal motivación de Google para la creación y soporte del proyecto Android se basa en conseguir que Android llegue a todas partes y para ello necesita crear un software que pueda ejecutarse en tantos dispositivos móviles como sea posible. Google es una compañía de publicidad y su negocio consiste en vender anuncios. Si todo el mundo usa Android, Google puede proporcionar servicios adicionales en la cima de este software y de este modo a diferencia de otros vendedores de software que dependen del cobro de licencias, Google puede ofrecer su Android de forma gratuita.
+La principal motivación de Google para la creación y soporte del proyecto Android se basa en conseguir que Android llegue a todas partes y para ello necesita crear un software que pueda ejecutarse en tantos dispositivos móviles como sea posible. Google es una compañía de publicidad y su negocio consiste en vender anuncios. Si todo el mundo usa Android, Google puede proporcionar servicios adicionales en la cima de este software y de este modo a diferencia de otros vendedores de software que dependen del cobro de licencias, Google puede ofrecer su Android de forma gratuita~\cite{C3:LearningAndroid}.
 
 Aunque Google licencia alguna aplicaciones propietarias como Gmail y Google Maps, y también consigue ganancias desde el Android Markey (ahora conocido como Google Play), su motivación principal sigue siendo el retorno por la publicidad que estas aplicaciones y otras muchas generan.
 
@@ -305,3 +305,40 @@ Como Android debe ejecutarse en dispositivos con poca memoria y CPUs con bajo po
 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.
+
+\subsection{Android y Java}
+
+En Java, se escribe un programa en Java, se compila a byte code usando el compilador Java y luego este byte code se ejecuta sobre la Maquina Virtual Java (Java VM en Inglés). En Android, es algo distinto. En Android hay que escribir código en Java, y hay que compilarlo a byte code de Java usando el mismo compilador Java. Pero después el byte code de Java debe ser recompilado de nuevo usando el compilador Dalvik para generar byte code Dalvik. Este byte code de Dalvik es posteriormente ejecutado en la Máquina Virtual Dalvik (Dalvik VM en Inglés). En la Figura~\ref{fig:DalvikJava}) se muestra una comparación entre el estandar Java (a la izquierda) y en Android usando Dalvik (a la derecha)~\cite{C3:LearningAndroid}.
+
+\begin{figure}[H]
+    \centering
+        \includegraphics[width=0.5\textwidth]{fig/DalvikJava}
+    \caption{\emph{Java versus Dalvik}}
+    \label{fig:DalvikJava}
+\end{figure}
+
+La buena noticia para el programador es que para él no hay diferencia entre programar en Java o en Android, pues los pasos adicionales de compilación se encuentran totalmente automatizados si se hace uso de Eclipse o Ant.
+
+¿Por qué no compilar directamente desde código Java a byte code de Dalvik? En el 2005, cuando se comenzó a trabajar en la máquina virtual Dalvik, el lenguaje Java estaba sufriendo constantes modificaciones, pero el byte code de Java era más o menos estable. Por tanto, los desarrolladores de Android eligieron basar Dalvik en byte code de Java en lugar de en código fuente de Java.
+
+Un efecto positivo de esta elección, es que en teoría se podrían escribir aplicaciones Android en cualquier otro lenguaje que pudiera generar byte code de Java. Por ejemplo, se podría usar Python o Ruby. En realidad, en la práctica sería necesario disponer de las librerías apropiadas en el SDK de Android pero probablemente en el futuro acaben apareciendo.
+
+También, hay que tener en cuenta que el código Java de Android hace uso de clases Java que no son estándar. Java normalmente contiene:
+
+\begin{itemize}
+    \item \emph{Java Standard Edition}: usado para el desarrollo de aplicaciones de usuario.
+    \item \emph{Java Enteriprise Edition o J2EE/JavaEE}: usado para el desarrollo de aplicaciones para empresas.
+    \item \emph{Java Micro Edition J2ME/JavaME}: para dispositivos móviles
+\end{itemize}
+
+El conjunto de librerías de Android está más cercano la \emph{Java Standard Editio}. La principal diferencia es que las librerías de interfaz de usuario de Java (AWT y Swing) han sido extraídas y reemplazadas con librerías de interfaz de usuario específicas de Android. Además Android añade algunas nuevas características al estándar de Java. De este modo, el desarrollador tiene a su disposición la mayoría de las librerías estándar de Java y algunas otras nuevas.
+
+\subsection{El marco de trabajo de las aplicaciones (\emph{application framework})}
+
+El \emph{application framework} es un entorno que proporciona numerosos servicios que ayudan al programador a realizar correctamente su trabajo. Es la capa que permite a los desarrolladores crear aplicaciones que atraigan a los usuarios.
+
+En la capa \emph{application framework} se encuentran numerosas librerías Java especialmente construidas para Android. También hay muchos servicios que proporcionan acceso a muchas de las capacidades del sistema sobre el que se está ejecutando Android: localización, sensores, WiFi, telefonía, etc. Esta es la capa que fundamentalmente usarán todos los desarrolladores de Android.
+
+\subsection{Aplicaciones}
+
+Finalmente, según lo mostrado en la Figura~\ref{fig:AndroidSystemArchitecture}), nos encontramos con la capa de aplicaciones creadas por los desarrolladores. Estas aplicaciones son las que finalmente interactúan con el usuario. Pueden venir preinstaladas en el dispositivo o pueden ser descargadas desde uno de los muchos \emph{Android markets}.
diff --git a/fig/DalvikJava.png b/fig/DalvikJava.png
new file mode 100644 (file)
index 0000000..0680160
Binary files /dev/null and b/fig/DalvikJava.png differ
index 04608d2..bd2a2ca 100644 (file)
     year = {2011},
     keywords = "postgresql, database, postgis",
 }
+
+@Book{C3:LearningAndroid,
+    author = {Marko Gargenta},
+    title = {Learning Android},
+    publisher = {O'Reilly Media, Inc.},
+    address = "1005 Gravenstein Highway North, Sebastopol, CA 95472",
+    year = {2011},
+    keywords = "android, learning",
+}