Para empezar con el desarrollo de aplicaciones en Android es importante conocer
cmo est estructurado este sistema operativo. A esto le llamamos arquitectura y en el caso de Android est formada por varias capas que facilitan al desarrollador la creacin de aplicaciones. Adems, esta distribucin permite acceder a las capas ms bajas mediante el uso de libreras para que as el desarrollador no tenga que programar a bajo nivel las funcionalidades necesarias para que una aplicacin haga uso de los componentes de hardware de los telfonos. Cada una de las capas utiliza elementos de la capa inferior para realizar sus funciones, es por ello que a este tipo de arquitectura se le conoce tambin como pila.
Para entender mejor, a continuacin cito el diagrama de la arquitectura de Android tomada del sitio oficial de Android developers:
Explicamos ahora cada una de las capas iniciando de abajo hacia arriba.
Kernel de Linux. Qu es Android?, el ncleo del sistema operativo Android est basado en el kernel de Linux versin 2.6, similar al que puede incluir cualquier distribucin de Linux, como Ubuntu, solo que adaptado a las caractersticas del hardware en el que se ejecutar Android, es decir, para dispositivos mviles. El ncleo acta como una capa de abstraccin entre el hardware y el resto de las capas de la arquitectura. El desarrollador no accede directamente a esta capa, sino que debe utilizar las libreras disponibles en capas superiores. De esta forma tambin nos evitamos el hecho de quebrarnos la cabeza para conocer las caractersticas precisas de cada telfono. Si necesitamos hacer uso de la cmara, el sistema operativo se encarga de utilizar la que incluya el telfono, sea cual sea. Para cada elemento de hardware del telfono existe un controlador (o driver) dentro del kernel que permite utilizarlo desde el software. El kernel tambin se encarga de gestionar los diferentes recursos del telfono (energa, memoria, etc.) y del sistema operativo en s: procesos, elementos de comunicacin (networking), etc.
Libreras. La siguiente capa que se sita justo sobre el kernel la componen las bibliotecas nativas de Android, tambin llamadas libreras. Estn escritas en C o C++ y compiladas para la arquitectura hardware especfica del telfono. Estas normalmente estn hechas por el fabricante, quien tambin se encarga de instalarlas en el dispositivo antes de ponerlo a la venta. El objetivo de las libreras es proporcionar funcionalidad a las aplicaciones para tareas que se repiten con frecuencia, evitando tener que codificarlas cada vez y garantizando que se llevan a cabo de la forma ms eficiente. Algunas de estas libreras son: System C library: una derivacion de la librera BSD de C estndar (libc), adaptada para dispositivos embebidos basados en Linux. Media Framework: librera basada en PacketVideo's OpenCORE; soporta codecs de reproduccin y grabacin de multitud de formatos de audio vdeo e imgenes MPEG4, H.264, MP3, AAC, AMR, JPG y PNG. Surface Manager: maneja el acceso al subsistema de representacin grafica en 2D y 3D. WebKit: soporta un moderno navegador web utilizado en el navegador Android y en la vista Webview. Se trata de la misma librera que utiliza Google Chrome y Safari de Apple. SGL: motor de graficos 2D. Libreras 3D: implementacin basada en OpenGL ES 1.0 API. Las libreras utilizan el acelerador harware 3D si est disponible, o el software altamente optimizado de proyeccin 3D. FreeType: fuentes en bitmap y renderizado vectorial. SQLite: potente y ligero motor de base de datos relacionales disponible para todas las aplicaciones. SSL: proporciona servicios de encriptacin secure socket layer
Entorno de ejecucin. Como podemos apreciar en el diagrama, el entorno de ejecucin de Android no se considera una capa en s mismo, dado que tambin est formado por libreras. Aqu encontramos las libreras con las funcionalidades habituales de Java as como otras especficas de Android. El componente principal del entorno de ejecucin de Android es la mquina virtual Dalvik.Las aplicaciones se codifican en Java y son compiladas en un formato especfico para que esta mquina virtual las ejecute. La ventaja de esto es que las aplicaciones se compilan una nica vez y de esta forma estarn listas para distribuirse con la total garanta de que podrn ejecutarse en cualquier dispositivo Android que disponga de la versin mnima del sistema operativo que requiera la aplicacin. Cabe aclarar que Dalvik es una variacin de la mquina virtual de Java, por lo que no es compatible con el bytecode Java. Java se usa nicamente como lenguaje de programacin, y los ejecutables que se generan con el SDK de Android tienen la extensin .dex que es especfico para Dalvik, y por ello no podemos correr aplicaciones Java en Android ni viceversa.
Framework de aplicaciones. La siguiente capa est formada por todas las clases y servicios que utilizan directamente las aplicaciones para realizar sus funciones. La mayora de los componentes de esta capa son libreras Java que acceden a los recursos de las capas anteriores a travs de la mquina virtual Dalvik. Siguiendo el diagrama encontramos: 1. Activity Manager. Se encarga de administrar la pila de actividades de nuestra aplicacin as como su ciclo de vida. 2. Windows Manager. Se encarga de organizar lo que se mostrar en pantalla. Bsicamente crea las superficies en la pantalla que posteriormente pasarn a ser ocupadas por las actividades. 3. Content Provider. Esta librera es muy interesante porque crea una capa que encapsula los datos que se compartirn entre aplicaciones para tener control sobre cmo se accede a la informacin. 4. Views. En Android, las vistas los elementos que nos ayudarn a construir las interfaces de usuario: botones, cuadros de texto, listas y hasta elementos ms avanzados como un navegador web o un visor de Google Maps. 5. Notification Manager. Engloba los servicios para notificar al usuario cuando algo requiera su atencin mostrando alertas en la barra de estado. Un dato importante es que esta biblioteca tambin permite jugar con sonidos, activar el vibrador o utilizar los LEDs del telfono en caso de tenerlos. 6. Package Manager. Esta biblioteca permite obtener informacin sobre los paquetes instalados en el dispositivo Android, adems de gestionar la instalacin de nuevos paquetes. Con paquete nos referimos a la forma en que se distribuyen las aplicaciones Android, estos contienen el archivo .apk, que a su vez incluyen los archivos .dex con todos los recursos y archivos adicionales que necesite la aplicacin, para facilitar su descarga e instalacin. 7. Telephony Manager. Con esta librera podremos realizar llamadas o enviar y recibir SMS/MMS, aunque no permite reemplazar o eliminar la actividad que se muestra cuando una llamada est en curso. 8. Resource Manager. Con esta librera podremos gestionar todos los elementos que forman parte de la aplicacin y que estn fuera del cdigo, es decir, cadenas de texto traducidas a diferentes idiomas, imgenes, sonidos o layouts. En un post relacionado a la estructura de un proyecto Android veremos esto ms a fondo. 9. Location Manager. Permite determinar la posicin geogrfica del dispositivo Android mediante GPS o redes disponibles y trabajar con mapas. 10. Sensor Manager. Nos permite manipular los elementos de hardware del telfono como el acelermetro, giroscopio, sensor de luminosidad, sensor de campo magntico, brjula, sensor de presin, sensor de proximidad, sensor de temperatura, etc. 11. Cmara: Con esta librera podemos hacer uso de la(s) cmara(s) del dispositivo para tomar fotografas o para grabar vdeo. 12. Multimedia.Permiten reproducir y visualizar audio, vdeo e imgenes en el dispositivo.
Aplicaciones. En la ltima capa se incluyen todas las aplicaciones del dispositivo, tanto las que tienen interfaz de usuario como las que no, las nativas (programadas en C o C++) y las administradas (programadas en Java), las que vienen preinstaladas en el dispositivo y aquellas que el usuario ha instalado. En esta capa encontramos tambin la aplicacin principal del sistema: Inicio (Home) o lanzador (launcher), porque es la que permite ejecutar otras aplicaciones mediante una lista y mostrando diferentes escritorios donde se pueden colocar accesos directos a aplicaciones o incluso widgets, que son tambin aplicaciones de esta capa.
Como podemos ver, Android nos proporciona un entorno sumamente poderoso para que podamos programar aplicaciones que hagan cualquier cosa. Nada dentro de Android es inaccesible y podemos jugar siempre con las aplicaciones de nuestro telfono para optimizar cualquier tarea. El potencial de Android se sita en el control total que se le da al usuario para que haga de su telfono un dispositivo a su medida.
ARQUITECTURAS DE APLICACIN Ofrece una estructura para pensar, proyectar, elaborar y desarrollar aplicaciones que se integren y funcionen bien.
Arquitectura Cliente/Servidor en dos capas: Front/end Back/end
Modelo de Arquitectura Cliente/Servidor Front/end Es la parte de la aplicacin que interacta con el usuario. Basados en una interfaz grfica con el usuario (GUI). El Cliente corre la aplicacin que ofrece la interfaz con el usuario. Back/end Es la parte no-interactiva de la aplicacin. La mayor parte reside en las Bases de Datos (relacionales o no). Aplicaciones Simples: no requieren una gran Base de Datos compartida, pueden ser elaboradas solamente en el Cliente. Aplicaciones Complejas: exigen dos capas, una para la aplicacin del usuario (Cliente) y otra para la base de datos (Servidor). Eventualmente, el Cliente y el Servidor podrn estar en el mismo equipamiento.
LA IMPORTANCIA DEL MVC EN ANDROID En Android utilizamos el patrn de arquitectura llamado Modelo Vista Controlador (MVC) cuya principal bondad consiste en separar los datos de una aplicacin, la interfaz de usuario y la lgica de negocios en tres componentes distintos que se relacionarn para al final tener como resultado nuestra aplicacin. De esta forma podemos seccionar de forma ms fcil nuestro equipo de trabajo y dedicarnos a desarrollar nuestros componentes de tal forma que construyamos mdulos o libreras con funcionalidades especficas que incluso podramos reutilizar en proyectos posteriores y no simplemente en el proyecto actual. Para lograr esto, el diseo de la arquitectura de nuestra aplicacin juega un papel importante y la capacidad de abstraccin que tengamos desarrollada.
Por ejemplo, yo me podra dedicar a desarrollar una librera que me permita hacer conexiones con la API de Twitter. En mis clases puedo disear todas las funciones que me ayudarn a lograr las llamadas al protocolo OAuth, aquellas que me permitan twittear, recuperar informacin de tweets, followers, trending topics, etc. Esta librera, con un buen diseo y abstraccin podra ser til para todos los proyectos que necesiten conectarse con Twitter. Volvmonos un poco tericos y expliquemos de qu se tratan los componentes de este modelo:
Modelo. Nos referimos con modelo a las representaciones que construiremos basadas en la informacin con la que operar nuestra aplicacin. En Java, el modelo viene siendo anlogo a los beans que tienen la particularidad de ser reutilizables y nos ayudan a cumplir con el proverbio de oro Dont Repeat Yourself (DRY) haciendo a nuestras aplicaciones escalables. En esta parte del modelo tambin juega la decisin de qu modelo para almacenar informacin utilizar. Base de datos? Web services? El modelo que elijas depende obviamente de las necesidades de informacin de tu aplicacin. Actualmente tenemos tutoriales de SQLite y WebServices que te pueden ayudar. Vista. La vista no es ms que la interfaz con la que va a interactuar el usuario. En Android, las interfaces las construimos en XML. Suelo utilizar mucho la analoga de que esta parte es realmente parecida a lo que hacemos en el desarrollo web con los CSS. Contruimos nuestro esqueleto en XML que equivale al HTML de un sitio. Posteriormente, con ayuda de estilos, que tambin los escribimos en XML, podemos empezar a darle formato de colores, posiciones, formato, etc. a nuestro esqueleto. Esto equivale a los CSS. Si vienes de un ambiente web, aprovecha ese conocimiento para aplicarlo a crear aplicaciones Android. Si quieres saber ms acerca de estilos, checaeste tutorial. Controlador. Finalmente nos topamos con el controlador que son todas esas clases que nos ayudarn a darle vida a esas interfaces bonitas que ya construimos y nos permitirn desplegar y consumir informacin de/para el usuario. Estos controladores se programan en lenguaje Java y son el core de la aplicacin.
Puedes ver la ventaja? As es, podemos tener perfiles especializados en construir cada uno de estos componentes y tener un resultado de calidad en cada uno y al final obtener una buena aplicacin. El truco para que todo salga bien es ser disciplinados para poder ser programadores ordenados, eso es vital en la aplicacin de esta arquitectura. Por experiencia, te puedo decir que si te esfuerzas en construir una buena arquitectura de aplicacin te ahorrars muchos dolores de cabeza despus y te evitars tener que duplicar lneas de cdigo que hacen lo mismo, podrs escalar fcilmente tu aplicacin, agregar funcionalidades nuevas sin tanto embrollo y por qu no?, facilitar el comienzo de nuevos proyectos.
Para empezar a aplicar esta arquitectura debes saber tambin su flujo: 1. Todo parte cuando el usuario interacta con tu aplicacin, el jugador actual es la vista. (El usuario quiere mandar un Tweet). 2. El controlador recibe la notificacin de la accin solicitada. (Por medio de un handler verificar si el usuario est logueado o no en su cuenta de Twitter). 3. El modelo es llamado para ser modificado. (Podemos accesar al cach de tweets que se tenan desde la ltima vez que el usuario abri la aplicacin y se conect a Internet y agregar el nuevo tweet). 4. Una vez que tenemos los nuevos tweets y la publicacin que quiere hacer el usuario, el controlador nuevamente toma partida para llamar a la vista correcta que desplegar el Timeline actualizado. 5. Listo! El usuario ya tiene la nueva interfaz para seguir interactuando con la aplicacin y volver a iniciar el ciclo cuando solicite otra accin. Otra de las cosas que te ayudan a seguir este modelo es tener ordenado tu proyecto. Utiliza las convenciones de los lenguajes que utilices y las buenas prcticas para que sea ms fcil acoplar a tus compaeros de equipo (no siempre uno solo se echa el paquete de hacer una aplicacin y menos an si es una compleja). Te aconsejo empezar con cosas tan sencillas como el nombramiento de paquetes, clases y variables, y despus organizar los recursos que vayas a utilizar delegando siempre a cada componente lo que le corresponde. En la web puedes encontrar muchos recursos que puedes leer para ver ejemplos de la aplicacin de esta arquitectura. No es algo nuevo pero algunos no la conocen. Sin importar que encuentres un ejemplo para web, recuerda que en la programacin nicamente cambia el lenguaje, la lgica y la metodologa es la que se preserva.
FRAMEWORK PARA EL DESARROLLO DE APLICACIONES ANDROID
1-. Xamarin.Android. Se trata de un completo framework de desarrollo que permite crear aplicaciones para Android usando C# y la plataforma .NET. Ahora puedes sacar partido a tus conocimientos de C# y .NET para crear aplicaciones para Android en tabletas y mviles, y adems reutilizar gran parte del cdigo para migrar las aplicaciones a iOS y Windows Phone. 2.- PhoneGap es un framework gratuito y open source que permite crear aplicaciones mviles multiplataforma a partir de tecnologas web como HTML5, CSS3 y Javascript. PhoneGap est realizado sobre Apache Cordova, fue creado por Nitobi, actualmente es propiedad de Adobe y crea de las llamadas aplicaciones hbridas, a mitad de camino entre las nativas y las puramente web, esto lo consigue a partir de una serie de APIs que permiten controlar caractersticas de los dispositivos como el acelermetro, la cmara, las notificaciones o la geolocalizacin. 3.- Sencha Touch 2
Sencha Touch 2 es una framework para el desarrollo de aplicaciones mviles de alto rendimiento basados en HTML5. Este framework incluye soporte para Blackberry 10 e IE 10 y es compatible con iOS, Android, BlackBerry, Windows Phone y otros. Esta desarrollado a partir de la plataforma HTML5 de Sencha, por lo cual se puede emplear Sencha Cmd, que es una herramienta de lnea comando multiplataforma que permite realizar muchas tareas de manera automtica como ser generar un nuevo proyecto. 4.- PhoneJS
PhoneJS es un framework que contiene lo necesario para crear aplicaciones usando HTML5 y Javascript para desarrollar aplicaciones compatibles con los ms populares smartphones y tablets. Es compatible para aplicaciones de IOS, Android y WindowsPhone. PhoneJS aprovecha todas las funcionalidades de JQuery y opcionalmente se puede incluir Knockout para el desarrollo de las interfaces de usuario con el modelo MVVM (Model-View-ViewModel).