|
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.
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 digerirla y
entenderla no es cosa fácil...
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.
eliax.com
|
|