La arquitectura de Android y compilación de aplicaciones

Android es un sistema operativo creado para ser independiente de cualquier tipo de arquitectura de hardware en los dispositivos móviles. Esta característica hace que sea tan atractivo ante los frabricantes y desarrolladores. Adicionalmente su portabilidad, flexibilidad y seguridad le dan ese toque de simpatía a las personas interesadas en los sistemas de código abierto.
Así que antes de comenzar a programar es necesario estudiar, así sea de manera breve, esta curiosa arquitectura. Por tal motivo, en este artículo veremos cómo esta constituido el interior de Android. Estudiaremos sus características de operación en tiempo real y en que formato de archivo se encapsula una aplicación Android. Finalmente comprenderemos qué que beneficios nos aporta el sistema automatizado de construcción Gradle, dentro de los proyectos de Android Studio.
Arquitectura de Android


¿Que tipo de arquitectura tiene Android?

Android está construido con una arquitectura de 4 capas o niveles relacionados entre si. A continuación veremos un diagrama ilustrativo extraído del libro Learning Android escrito por Marko Gargenta y Masumi Nakamura:
Arquitectura de Android


El diagrama indica que la estructura de Android se encuentra construida sobre el Kernel de Linux. Luego hay una capa de Librerías relacionadas con una estructura administradora en Tiempo de ejecución. En el siguiente nivel encontramos un Framework de apoyo para construcción de aplicaciones y posteriormente vemos a la capa de Aplicaciones.Kernel de Linux

Android está construido sobre el núcleo de Linux, pero se ha modificado dramáticamente para adaptarse a dispositivos móviles. Esta elección está basada en la excelente potabilidad, flexibilidad y seguridad que Linux presenta. Recuerda que el Kernel de Linux esta bajo la licencia GPL, así que en consecuencia Android también.Capa de Librerías o capa nativa

En esta capa se encuentran partes como la HAL, librerías nativas, demonios, las herramientas de consola y manejadores en tiempo de ejecución.  Veamos un poco el propósito de estos conceptos:
Hardware Abstraction Layer (HAL): Este componente es aquel que permite la independencia del hardware. Quiere decir que Android esta construido para ejecutarse en cualquier dispositivo móvil sin importar su arquitectura física. El HAL actúa como una arquitectura genérica que representa a todos los posibles tipos de hardware existententes en el mercado. Aunque por el momento no hay estándares de construcción en el hardware de dispositivos móviles, el HAL permite que cada fabricante ajuste sus preferencias para que Android sea funcional sobre su tecnología.
Librerías nativas: Aquí encontramos interfaces de código abierto como OpenGL para el renderizado de gráficos 3D, SQLite para la gestión de bases de datos, WebKit para el renderizado de los browsers, etc. También librerías para soportar los servicios del sistema como  Wifi, posicionamiento, telefonía, y muchos mas.
Demonios (Daemons): Los demonios son códigos que se ejecutan para ayudar a un servicio del sistema. Por ejemplo cuando se requiere instalar o actualizar una aplicación, el demonio de instalación "installd" es ejecutado para administrar todo el proceso. O cuando los desarrolladores vamos a ejecutar en modo de depuración nuestro teléfono desde un PC, se ejecuta un demonio llamado adbd(Android Debug Bridge Daemon) para auxiliar a dicho proceso.
Consola: Al igual que otros sistemas operativos, Android permite que empleemos comandos de línea para la ejecución de procesos del sistema o explorar el sistema operativo.
Manejadores en tiempo de ejecución: Si bien las aplicaciones Android están escritas en lenguaje Java y son traducidas a bytecodes, estas no son interpretadas por la Maquina virtual de Java.  Android tiene su propia maquina virtual interpretadora de bytecodes llamada Dalvik. Esta herramienta fue diseñada para ser flexible ante el diseño de hardware de un dispositivo móvil. Además JVM no es de licencia GPL, así que google decidió generar su propia herramienta.¿Cómo funciona Dalvik?

Dalvik no cambia nada en el proceso de compilación, sencillamente interviene al final como receptor de un archivo ejecutable producto de una recompilación de los archivos .class de java.
Recuerda las fases de la construcción de una aplicación Java. El primer paso es generar el código fuente (arhivos .java), luego este es traducido por el Java Compiler(javac) y obtenemos un fichero tipo byte code (archivos .class). Finalmente la máquina virtual de Java (JVM) interpreta en tiempo real este archivo y la aplicación es ejecutada.
La ejecución de Dalvik es ingeniosa, simplemente espera que javac traduzca la aplicación a byte codes, cuando están listos los archivos, estos son compilados por el compilador Dex. Esta herramienta traduce los byte codes de java a un estilo de byte codes nativos que serán convertidos a un ejecutable .dex. Finalmente este archivo es ejecutado por una instancia de Dalvik VM.
A continuación se muestra un diagrama comparativo de ambos procesos:
JVM vs DVM


Aunque el proceso añade unos cuantos pasos mas, no debes preocuparte por ello, ya que esta tarea se le delega a la herramienta Gradle.Google ha anunciado que Dalvik VM será reemplazada por una nueva máquina virtual llamada ART(Android Runtime) en su nueva versión Android L. Por el momento no nos preocuparemos por esta situación, pero es un dato muy importante a tener en cuenta.

Framework para aplicaciones

Esta es la capa que nos interesa a los desarrolladores, ya que en ella encontramos todas las librerías Java que necesitamos para programar nuestras aplicaciones. Los paquetes con mas preponderancia son los android.*, en ellos se alojan todas las características necesarias para construir una aplicación Android. No obstante es posible acceder a clases como java.utils.*, java.net.* , etc. Aunque hay librerías Java excluidas como la java.awt.* y java.swing.*.
En esta capa también encontraremos manejadores, servicios y proveedores de contenido que soportaran la comunicación de nuestra aplicación con el ecosistema de Android.Capa de aplicaciones

Es es la última instancia de funcionamiento de Android. Se centra en la ejecución, comunicación y estabilidad de las aplicaciones preinstaladas por el fabricante o las que nosotros vamos a construir. A ella acceden todos los usuarios Android debido a su alto nivel de compresión y simplicidad.¿Que tipo de archivo tienen las aplicaciones para Android?

El resultado del proceso de construcción es un archivo comprimido con formato .APK (Android Applicacion Package). Y dentro encontraremos los siguientes componentes:
Archivo Android Manifiest: Este archivo es la definición de todas las características principales que tendrá nuestra aplicación al ejecutarse en un dispositivo móvil. Con características me refiero a los bloques que posee la aplicación,los permisos, su versión, las versiones previas soportadas, las dimensiones de la pantalla, etc.
Archivo classes.dex: Este será el fichero compilado preparado para ejecutarse en la Máquina Virtual Dalvik.
La carpeta Resources: Aquí encontramos todos los archivos externos que usamos para construir nuestro proyecto, como por ejemplo nuestros iconos, audio, archivos planos de texto, los archivos .xml de diseño, etc.
Librerías nativas: El archivo .APK también contiene aquellas librerías de las cuales depende la aplicación.
Carpeta META-INF: En ella se guardan archivos que corresponden a las Firmas Digitales de tu aplicación. Con esta especificación puedes indicar que tu eres el creador y dueño de la aplicación, además debes indicar tu ID de desarrollador para ser reconocido y autenticado en procesos de comercialización (Google es muy riguroso en este tema).En el artículo pasado mencionaste a Gradle, ¿que hace exactamente este recurso?

Gradle


Gradle es una herramienta para automatizar el compilado, empaquetado, testeo y liberación de aplicaciones que se basen en la JVM. Como te dije antes, ha sido creado para expandir el uso de javac. Cuando me refiero a "automatizar" significa que podemos programar nuestras propias condiciones de construcción. Esto es posible a través de Scripting mediante DSL(Domain-Specific-Language), un lenguaje claro y especializado, con énfasis en configurar y construir aplicaciones con Gradle.
DSL permite generar una compilación basada en tareas programadas y relacionadas entre sí, reduciendo la complejidad de dependencias y automatizando labores frecuentes. Su sencillez permite dar instrucciones de manera declarativa e intuitiva al programador.¿Qué ventajas tiene utilizar Gradle?

Una de las mayores ventajas es que le entrega el poder del flujo de construcción al programador. Esto quiero decir que decidimos el orden de ejecución de tareas. Asimismo podríamos elegir que archivos compilar primero, cuando detener la compilación, establecer condiciones para que se recompile o no el código y muchas situaciones más. 
Ejecuciones incrementales: El poder de esta característica le ahorra al programador gran cantidad de tiempo de espera. Al haber construcciones incrementales podemos decidir hasta que punto queremos que se compile nuestra aplicación, es decir, si no es necesario compilar una parte del código debido a la ausencia de errores, entonces se procede a compilar la sección que aun no ha sido probada.
Múltiples versiones: Gradle permite que construyamos varias versiones de nuestra aplicación. Por ejemplo, si deseas construir tu aplicación para Jelly Beans y para Kitkat entonces solo debes especificar que el proyecto tendrá dos variantes de empaquetado, configurando la versión del SKD usada para cada versión.
La ejecución y las pruebas se pueden realizar en un mismo proyecto.
Ejecución en paralelo de tareas: Puedes ejecutar tareas en hilos diferentes para optimizar el proceso de construcción.
Esas son las características mas importantes, sin embargo hay muchas mas. Si lo deseas, te invito a visitar el Sitio Oficial de Gradle para que te enteres de los avances de la herramienta, revisar la documentación y descargar libros que te ayuden a comprender su potencial.James Revelo Urrea - Desarrollador independiente http://www.hermosaprogramacion.com

Fuente: este post proviene de Hermosa Programación, donde puedes consultar el contenido original.
¿Vulnera este post tus derechos? Pincha aquí.
Modificado:
¿Qué te ha parecido esta idea?

Esta idea proviene de:

Y estas son sus últimas ideas publicadas:

Recomendamos

Relacionado

informática android studio desarrollo android ...

El día de hoy comenzamos con esta nueva guía sobre Desarrollo de aplicaciones Android. A lo largo de este artículo estudiaremos como utilizar la herramienta Android Studio como entorno de desarrollo y que configuraciones debemos llevar a cabo para un optimo funcionamiento. Finalmente crearemos una pequeña aplicación estilo “Hello World” para comprobar el funcionamiento del entorno d ...

informática android studio desarrollo android

Como habíamos visto en el artículo introductorio a la programación en Android, el proyecto de una aplicación está contenido en una jerarquía donde se ubican todos los archivos de código fuente Java, los recursos, las configuraciones y los archivos de construcción de Gradle. El articulo de hoy tiene como fin comprender la estructura de archivos de un proyecto en Android Studio. Esto nos permitirá i ...

amino Android bat ...

Los paquetes de aplicación de Android (APK) es el formato usado para distribuir e instalar aplicaciones en el Sistema operativo para móviles Android de Google. Hay muchas razones por las cuales querrías descompilar un APK, por ejemplo para aprender como funciona una aplicación, para incrementar la seguridad y complejidad de tu código, para robar el código fuente de aplicaciones de tercero , es dec ...

móviles android versiones de android

Android es un sistema operativo basado en el núcleo de linux, diseñado para su uso en dispositivos móviles. Creado inicialmente por la compañía Android Inc, la cual fue adquirida por Google en julio de 2005. A partir de ese momento Google se encargo del desarrollo del sistema operativo. En noviembre de 2007 Google fundo junto con otros 34 miembros la Open Handset Alliance (OHA), que se hizo cargo ...

otros tablets rim playbook ...

Según una fuente en Bloomberg, parace ser que RIM esta desarrollando una plataforma para poder ejecutar aplicaciones del market de Android en su PlayBook, que corre Blackberry Tablet OS un sistema operativo que ha creado la compañía QNX Software que RIM compro en pasado año. Además RIM también ofrecera información a los desarrolladores de como poder crear aplicaciones nativas para este nuevo siste ...

Android

Una vez que compramos un dispositivo móvil Android, el siguiente paso es descargar aquellas aplicaciones más necesarias para poder sacarle todo el partido a dicho dispositivo. Unas aplicaciones que normalmente son las que más utilizan nuestros amigos y familiares, ya que muchas veces necesitamos que sean compatibles, como es el caso de las aplicaciones de mensajería instantánea. Aunque también con ...

Android aplicaciones móviles apps ...

El sistema operativo Android se conoce por su amplia variedad de aplicaciones, y si lo que buscas son aplicaciones ofimáticas, también te encontrarás una cantidad considerable. Por esto hemos preparado esta lista con las mejores aplicaciones ofimáticas para tu dispositivo Android. Google Drive y sus aplicaciones ofimáticas Con Google drive puedes visualizar archivos de muchos formatos, pero para ...

internet

aplicaciones de Android son aplicaciones que han sido ideados por lo general con el lenguaje de programación Java, en colaboración con el Kit de desarrollo de software Android. Sin embargo, hay otros kits de desarrollo como Android NDK o herramientas indígenas para extensiones o aplicaciones en C / C ++. Hay una configuración visual que se conoce como descargar play store en apk, que los principia ...

informática desarrollo android

En este tutorial descubriremos como usar bases de datos en SQLite para no perder la información de nuestras Aplicaciones Android. A medida que vayamos avanzando veremos la utilidad de clases como SQLiteOpenHelper, SQLiteDatabase, Cursor, CursorAdapter y de Herramientas como sqlite3 y SQLite Browser. Asumimos que tienes conocimientos básicos en SQLite Con el fin de facilitar tu aprendizaje usarem ...

informática desarrollo android

El diseño visual de una aplicación Android es repesentado a través de reglas contenidas en Estilos y Temas. Estas herramientas permiten que los programadores y diseñadores generen una interfaz mas amigable y personalizada de sus apps, para establecer una identidad que impacte al usuario final. Por esta razón es necesario que entendamos como se construyen y asignan estilos a tus Views y Layouts. Si ...