martes, noviembre 13, 2007
|
Desde que salieron los documentos técnicos ayer sobre Android, he estado bien ocupado leyendo documentación técnica, viendo videos, entendiendo, descifrando, y creo que ya puedo escribir algo con mas sustancia al respecto, que creo le será útil a los interesados en esta plataforma.
Antes de empezar quiero decir que he quedado sorprendido con la arquitectura, su elegancia y su extensibilidad. Los ingenieros de Google definitivamente hicieron su tarea antes de lanzar esto al público. A continuación les presento entonces una introducción de alto nivel que servirá como punto de despegue para los interesados, pues lo cierto es que navegar toda la información que salió ayer y digerirla y entenderla no es cosa fácil, en particular si eres un desarrollador joven con poca experiencia. Nota que trataré de escribir lo mas claro posible con el propósito de alcanzar la mas amplia audiencia. En un futuro si me animo (y tengo tiempo), tal vez escriba una guía técnica a Android mucho mas profunda. Primero, ya sabemos que Android es una plataforma para aplicaciones móviles, totalmente abierta tanto para los fabricantes de dispositivos móviles como para los desarrolladores de aplicaciones que funcionan en tales dispositivos. El núcleo de Android es Linux, mas específicamente el kernel 2.6. A este nivel están implementado todos los drivers de los dispositivos primarios, como son cámara, puertos USB, teclado, etc. El fabricante de un dispositivo puede agregar sus propios drivers, como puede ser un driver para una pantalla sensible al tacto multi-toque al estilo iPhone. Sobre este núcleo están las Librerías Nativas, que ofrecen funcionalidad básica al subsistema, como son SQLite (una base de datos integrada con soporte para SQL), OpenGL ES (gráficos avanzados en 3D), SSL (cifrado de datos), CODECs de medios (audio, video), etc. Compartiendo toda esta infraestructura vemos la Máquina Virtual Dalvik, que es en donde ejecutan las aplicaciones que tu escribes. Esta máquina virtual toma archivos en formato .apk, que no es mas que un zip con todos los recursos de tu aplicación (ejecutables, archivos xml, imágenes, sonidos, etc). Algo curioso es que los ejecutables no son clases de Java, sino que las clases de Java son post-procesadas a un formato llamado .dex (Dalvik Executable, asumo), que no es nada mas que una versión optimizada de los .class que estás impuesto a ver en el mundo Java. Esta Máquina Virtual tiene acceso tanto a las Core Libraries (que son básicamente las librerías de funciones estándar de la plataforma Java, como son objetos Object, String, etc). En otras palabras, el equivalente a un JDK en Java. Por otro lado, la Máquina Virtual tiene acceso a lo que llaman Application Framework (o un Marco de Trabajo para Aplicaciones), que contienen mucho módulos (escritos en Java) para el consumo de tu aplicación, como son un Telephony Manager (para hacer y gestionar llamadas telefónicas), un Content Manager (para compartir datos entre aplicaciones, como pueden ser la Agenda de Contactos), y APIs de Mensajería, entre otros). El nivel superior a todos estos niveles, son tus aplicaciones que ejecutan sobre toda esta infraestructura. Nota que tus aplicaciones son 100% en el lenguaje Java, pero que Android te da acceso a todo el contenido de bajo nivel a través de APIs (que a propósito, son muy flexibles por lo que he visto hasta ahora). Enfocándonos en las aplicaciones, estas por lo general se construyen en base a 4 "bloques de construcción" básicos (y no tienes que utilizar los 4, sino lo que aplique a tu aplicación). Estos son: - Activity - Intent Receiver - Service - Content Provider Activity es básicamente la parte visual de una aplicación. Si escribes una calculadora para Android es posible que solo utilice este bloque, ya que no necesita hacer nada mas. Intent Receiver es un modelo muy poderoso en Android. Un "Intent" (o una "Intención") es como un evento de la aplicación bien genérico que dice "quiero hacer tal cosa". Una Intención que puede ser generada por tu aplicación, por ejemplo, puede ser "quiero enviar un email". Cuando tu aplicación genera esa Intención (muchas de las cuales están pre-definidas, como lo es esta), Android trata de encontrar la aplicación registrada mas apta para manejar esa intención, en cuyo caso sería la aplicación de Emails por defecto. Service no es nada mas que el equivalente a un Servicio (en Windows) o un Daemon (en UNIX/Linux), que ejecuta "tras bastidores" sin interfaz gráfico, y posiblemente por largos períodos de tiempo, durante el cual puede generar eventos específicos a tu aplicación. En cuanto a un Content Provider, no es nada mas que un servicio que le ofrece la capacidad a tus aplicaciones de comunicarse con otras de manera interna a Android. Para los técnicos, esto es parecido a inter-process communication, pero mas sofisticado, mas simple y mucho mas elegante. Sobre el tema de la seguridad, hay muchísimos niveles. Primero está al bajo nivel, manejado por las facilidades estándar de Linux, que requiere permisos de acceso para archivos, usuarios, servicios, etc. Al alto nivel, está manejado en Java, que se encarga de la integridad del código, del sistema de acceso, y de aislar una aplicación de otra. En niveles intermedios Android maneja también (con una combinación de los bajos y altos niveles) temas como Memoria Protegida, una aplicación por proceso, gestión de procesos (para que por ejemplo un proceso intensivo al CPU no capture todo el tiempo del dispositivo), así como un sistema basado en XML (que empacas con tu aplicación) que pide permisos explícitos para los servicios que deseas acceder en el dispositivo, y que el usuario debe ceder en el momento de instalar la aplicación por primera vez (esto no lo he visto funcionando ya que no tengo un dispositivo a mano, y en el emulador del cual hablaremos en un momento no noté esa funcionalidad). En otras palabras, el tema de la seguridad aparenta estar extensamente cubierto, aunque cuan efectivo esto es solo lo veremos en la práctica. Otra cosa a notar de Android es lo flexible que son los APIs, como un ejemplo está el Location Manager, un módulo que accedes desde Java en tus aplicaciones y que ofrece todo tipo de servicios basados en localización geográfica. Además incluye facilidades para generar eventos los cuales tu aplicación puede recibir para actuar, como puede ser que un dispositivo Android te alerte cuando estés cerca de una estación de combustible basado en el hecho de que estás manejando lejos fuera de casa. Algo genial del Location Manager (y que demuestra su flexibilidad), es que te ofrece datos de localización de la mejor manera posible que se pueda. Primero trata de darte coordenadas GPS, pero si el dispositivo no soporta GPS (o simplemente no hay señal por alguna razón) este trata de aproximar utilizando antenas celulares por medio de triangulización. Y si eso tampoco está disponible entonces trata de ver si estás conectado a un red WiFi que provea su localización por medio de GPS. Otra cosa que alentará a muchos es el hecho de que la plataforma es totalmente agnóstica a la tecnología de transmisión de datos (como debe ser), funcionando con dispositivos y redes 2G, 2.5G, EDGE/GPRS, 3G, etc. El fabricante puede elegir lo que desea soportar, y el usuario puede elegir el fabricante a quien comprarle dependiendo de lo que desee. Una de las grandes sorpresas que me dí con Android es algo que hubiera deseado Apple implementara con el iPhone, y es que hay un servicio que se llama XMPP integrado en todos los dispositivos Android que permite que tu aplicación ejecutando en cualquier dispositivo Android se comunique con otras aplicaciones en cualquier otro dispositivo Android del mundo, formando de esta manera una red p2p (peer-to-peer, o el equivalente a un red "directa entre un usuario y otro") sin necesidad de depender de servidores centralizados que funcionarían de intermediarios. Obviamente el usuario tiene que aprobar (y querer hacer) esta comunicación, pues de lo contrario sería un caos (como ocurre en Windows con los BotNets). A bajo nivel este mecanismo de comunicación es extremadamente sencillo (lo que lo hace bien poderoso), pues todo lo que se envía con pares de nombre y valor (es decir, algo como "[nombre del blog][eliax.com]"), lo cual es útil bajo cualquier contexto, lo que permite de manera extremadamente fácil escribir programas de chateo, transferencia de archivos, juegos distribuidos, envío de coordenadas geográficas, etc. Otro servicio bien útil es el Notification Manager, el cual no es nada mas que darle acceso programático a tus aplicaciones de los mensajes que surgen en cualquier momento en la pantalla, como lo hacen los programas de chateo cuando te avisan en tu PC que alguien nuevo acaba de entrar, o como lo hacen algunos programas de email que te alertan cuando llega un nuevo mensaje. Con este servicio tu aplicación puede generar mensajes de la misma manera que los generan las otras aplicaciones nativas en Android. Este servicio es útil en combinación con otros, ya que por ejemplo, sin importar lo que estés haciendo en tu dispositivo (sea una llamada telefónica, navegando el Internet, etc), donde sea que estés puedes recibir una notificación de que una subasta tuya en eBay esté a punto de cerrar. Así mismo puedes ser notificado de que algún amigo tuyo que posee un Android está en la vecindad de donde te encuentras geográficamente, dándote la opción de llamar en el instante. Otro servicio útil es el llamado Views (o "vistas"), que no es nada mas que muchas pantallas, elementos gráficos (como Widgets, Gadgets, etc), controles (como cajitas de texto, deslizadores, botones etc) que son útiles para la confección de interfaces visuales. Noten que para empezar tienes opción a pantallas completas visuales, como son una pantalla especializada pata mostrar lista de cosas de las cuales puedes elegir (como puede ser una lista de contactos, lista de canciones, lista de compras, lista de medicamentos, etc), o puedes crear la tuya propia y poblarla de componentes mas pequeños y detallados. Algo interesante es que estos componentes son definidos en XML, por lo que es relativamente fácil construir interfaces, y de seguro que surgirán todo tipo de herramientas visuales con el tiempo para crear tales archivos XML de manera totalmente visual. Una cosa genial es que estos Views fueron creados de tal manera que funcionan con todo tipo de tamaños y formatos de pantalla (sea por ejemplo una pantalla cuadrada o una rectangular como la del iPhone), y que así mismo funcionan con todo tipo de dispositivos de entrada de datos, como son teclados, lápices digitales, palancas de juego, o toque del tacto. Eso significa que cuando una lista de cosas se despliega en la pantalla, dependiendo del dispositivo que tengas, puedes interactuar con esa lista por medio del teclado, o deslizándolas con un dedo, y en ambos casos funciona igual. Tan genial como eso es el hecho de que por defecto Android te ofrece unos cuantos componentes avanzados que puedes insertar directamente dentro de tus Views. Uno de esos es el Map View, que es básicamente Google Maps pero totalmente bajo tu control y sumamente sencillo de utilizar. Otro es el Web View, que no es nada mas que el renderizador de páginas web que puedes insertar en tus aplicaciones, lo que significa que por ejemplo puedes poner un botón, que cuando el usuario presiona abre un cuadrito dentro de la pantalla que se conecta a Internet y muestra la ayuda de tu aplicación en formato HTML. Hablando de HTML, el renderizador de páginas web no es nada mas ni nada menos que WebKit, que es exactamente el mismo que utiliza el navegador Safari en OS X tanto en Macs como el iPhone, lo que es una excelente noticia! No sabemos nada de soporte para Flash, pero por medio de un Intent Receiver me imagino que sería fácil que el fabricante de un dispositivo lo provea como una prestación diferenciadora de su producto. Así mismo a Adobe le convendría ofrecer un plugin para este Intent Receiver que todos puedan utilizar para tener acceso por medio de Flash a los millones de dispositivos Android que sin duda se venderán. Noten ahora algo importante, cuando descargas el Kit de Desarrollo de Android, una cosa que viene con el paquete es un Emulador de Android, que es básicamente un celular virtual dentro de tu PC, en el cual puedes probar tus aplicaciones, hacer llamadas (simuladas obviamente), instalar, debugear, etc. Es tan completo el emulador que puedes utilizar su navegador de Internet para navegar de verdad el Internet, lo que te sirve como una manera desde ya para optimizar páginas web para dispositivos Android, lo que es algo bien genial! Finalmente, muchos todavía se preguntarán, ¿y qué del iPhone? ¿Puede esto proveer la misma experiencia de usabilidad del iPhone? Y la respuesta es un resonante "si". Aunque los primeros prototipos de Android aparentan celulares del tipo Palm Treo, lo cierto es que tanto en su exterior como en su interfaz gráfico no hay nada que impida que una empresa fabrique algo 100% idéntico o mejor que el iPhone. Desde ya piensen del iPhone como algo que hace parte de lo que hace Android (o como los llamaremos algunos, el gPhone). Obviamente eso dependerá totalmente de los fabricantes, pero con empresas como Samsung a bordo de la Open Handset Alliance (OHA) no duden que eventualmente veremos dispositivos increíbles basados en Android. Ahora, espero que este artículo le haya sido útil a unos cuantos, y además espero que algunos se animen a probar a Android, pues voy a predecir desde ahora que si todo lo que promete se cumple, será un éxito sensacional y habrá mucha demanda de ingenieros que sepan programar la plataforma. Artículo relacionado: Análisis: Google Android y el Open Handset Alliance autor: josé elías |
15 comentarios |
Comentarios
Añadir Comentario |
"Me deja impresionado, no se por que yo creo que esto no es otra patraña utópica sino que el mismo futuro, la manera de manipular el cerebro que describes se ve tan sencilla pero al haber leído tus artículos te das cuenta de que no es más que una realidad próxima."
en camino a la singularidad...
©2005-2024 josé c. elías
todos los derechos reservados
como compartir los artículos de eliax
Seguir a @eliax
Muchas gracias por tu artículo, Elías. Y espero que con esto dejen de criticarte porque hables tanto del iPhone.