Una de las ramas de Java que se ha hecho un hueco importante en cuando a desarrollos es la plataforma Android de Google .Es obvio para todo el mundo que una gran parte del futuro de los desarrollos informáticos pasan por el mundo de los móviles y las tabletas en los cuales Android es el nuevo Windows .Ahora bien ¿ Que es Android exactamente y como funciona? . Vamos a intentar clarificar algunos conceptos en este artículo.
Java Virtual Machine
En primer lugar vamos a hablar de Java y de la maquina virtual Java que se encarga de que nuestro código se ejecute en varias plataformas apoyándonos en la siguiente imagen.
En Java nosotros partimos de un código fuente (.java) y lo compilamos con un compilador (javac) para convertirlo a código binario (.class) que la maquina virtual Java (JVM) es capaz de interpretar y convertir en código nativo que el sistema operativo es capaz de interpretar.Ahora bien¿ funciona Android de la misma forma?
Android Virtual Machine (Dalvik)
En el caso de Android las cosas son similares pero no iguales .Android soporta una maquina virtual diferente denominada Dalvik . Android y Dalvik son los encargados de trabajar con el código fuente Java y convertirlo en código nativo para el kernel de linux que la plataforma Android soporta.
Como la imagen muestra Android añade un paso intermedio . En este paso todos los ficheros .class de Java son pasados por otro proceso adicional de optimización ya que recordemos estamos en una plataforma móvil y los recursos son limitados . En este proceso todos los ficheros .class son agrupados en un único fichero .dex (Dalvik Executable) .Para que nos hagamos una idea un fichero dex descomprimido ocupa la mitad que las mismas clases en formato jar (comprimido).
Dalvik y Multi JVM
Otra diferencia importante que existe entre las aplicaciones Java y las aplicaciones Java Android (Dalvik) es que por ejemplo en un servidor de aplicaciones (Jboss,WebSphere,WebLogic) todas las aplicaciones corren sobre la misma maquina virtual.
En Dalvik esto no es así ya que cada aplicación corre en su propia maquina virtual aislada con el aumento de recursos que esto supone pero también con el mayor aislamiento entre las distintas aplicaciones que se consigue.
Aunque disponemos de una maquina virtual por cada aplicación Android realiza una fuerte optimización y carga una maquina virtual inicial denominada Zygote que es la encargada de arrancar el resto .
Dalvik Memoria
Todas las maquinas virtuales comparten la memoria del terminal
Android y Java SDK.
Muchas veces la gente me comenta sobre Android lo siguiente .Bueno ok a lo del fichero dex y el paso intermedio pero al final trabajamos como con Java normal no?? . Lamentablemente esta es una verdad a medias . El JDK de Java almacena sus clases principalmente en el fichero rt.jar . Este fichero contiene todas sus clases con todos los paquetes.
Lamentablemente en el Android SDK esto no es así ya que Android no necesita tantas clases como el JDK standard para trabajar . De hecho hay Packages que sobran por completo (caso de Swing) . Concretamente en Android podremos dividir los packages del JDK de la siguiente forma.
- Packages implementados completamente (Verde)
- Packages implementados parcialmente (Azul)
- Packages no implementados (Rojo)
Con lo cual el gráfico quedaría de la siguiente forma
Como conclusión podemos decir que aunque Android esta básado en Java no son lo mismo y puede que nos encontremos con que hay algunas clases que queriamos usar que no estan disponibles del JDK.
[…] Otros artículos relacionados : android eventos , android intents , android y dalvik […]
Hola Cecilio! Muy buen tutorial, gracias por el aporte
De nada 🙂
Otro post muy muy clarito! Genial. Gracias.
gracias
Interesante Cecilio.
Tengo algunas dudas.
Entonces en Android existe el compilador javac todavía ?
Lo que me gusta es que Android no viene con java microedition como en el caso del ya casi obsoleto blackberry.
Saludos desde Guatemala!!
es compilador pertenece a oracle asi que no 🙂
Muy claro Cecilio, muchas gracias por esta contribución !.
gracias 🙂
Un pequeña corrección, “en los servidores de aplicaciones, NO todas las aplicaciones tienen porqué correr sobre la misma máquina virtual”. De hecho, no es lo habitual.
Es cierto no tiene porque si hay una sola instancia si . Pero evidentemente no es obligatorio . Buena puntualización
Me gusta mucho leer sobre el funcionamiento interno de Android, pero es raro encontrar texto en español sobre el mismo. Así que me alegra leer esto 😉
Me gusto el post 😉 gracias por el trabajo 😀
gracias 🙂
Muchas gracias Cecilio,
Una gran introducción de como funciona Android y Java dentro de el. Me gusta mucho como explicas los conceptos. Me encantaría que pudieramos colaborar de algún modo en el futuro.
Un saludo
Muchas gracias sergio .Ahora ando liado aprendiendo a manejar el blog , twiter etc . Pero no descarto nada a futuro ademas tu llevas otro blog de programación .¿Que tal te va con él?
Un saludo
Hola Cecilio,
La verdad es que no puedo dedicarle todo el tiempo que quisiera. Intento ir metiendo la cabeza en la formación ya que me gusta mucho transmitir conocimiento y ayudar a otros que empiezan.
En un futuro próximo me gustaría dar un vistazo a las excepciones, pienso que los errores ayudan mucho a aprender cuando uno tiene la actitud adecuada.
Mi sueño!!!, escribir libros que combinen la programación con la psicología, el aprendizaje y las emociones.
Llevar un blog yo me he dado cuenta que lleva tiempo y hay que tomarselo con filosofía 🙂