texto:   A-   A+
eliax

Plataforma Google Android - Introducción de alto nivel
eliax id: 4094 josé elías en nov 13, 2007 a las 09:24 AM ( 09:24 horas)
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

Comentarios

  • Muchas gracias por tu artículo, Elías. Y espero que con esto dejen de criticarte porque hables tanto del iPhone.

  • simplemente sin palabras, tremendo articulo hermamazo ojala esta cultura esta nueva tendencia se difunda por todo el mundo para ampliar conocimientos hacernos mas libres y mas humanistas como lo hace hoy en dia la cultura del open source '' software libre'' que viva linux ,google , and eliax ,

  • ¡Un artículo muy interesante!

    Obviamente es necesario conocer Java para trabajar con Android pero ¿hace falta conocer algo más? ¿Alguna otra tecnología recomendada?

    ¿Conocimientos necesarios "antes" de ponerse a trabajar con Android?

  • yum, yum!! ya he compilado mi primera aplicación openGL con el android!

  • slo queria saber donde puedo bajar el Kit de programacion de ANDROID, soy un programador nuevo, y quisiera estar empapado del tema. GRACIAS!!!!!!!!!!

    Muy bueno el Tema.

  • Muchas gracias por el artículo. Android tiene muy buena pinta, pero echo de menos ciertas cosas en la API que sí tiene Windows Mobile y que lo siguen convirtiendo en la alternativa más interesante para aplicaciones empresariales ocasionalmente conectadas. En primer lugar, no veo nada de Web Services (aunque los podrías invocar a mano, con XML), cuando muchos teléfonos J2ME ya incluyen la JSR necesaria e incluso IDEs como NetBeans permiten generar clientes de web services con solo dar la URL del WSDL. .NET Compact Framework dispone de web services y colas de mensajes, además de opciones para sincronizar bases de datos remotas con las que haya en el dispositivo.
    Windows Mobile no me gusta. .NET Compact Framework es muy limitado. J2ME está bien pero es demasiado distinto en cada dispositivo. Pensaba que Android iba a estar enfocado no sólo al desarrollo de aplicaciones lúdicas, sino también empresariales, así que el SDK me ha decepcionado un poco (de momento).
    Esperemos que el SDK del iPhone ofrezca alguna de estas posibilidades.

    • Alberto,

      En el paquete org.xml.* de Android están muchas clases que te asisten con Web Services.

      Si quieres algo mas sofisticado, la buena noticia es que en teoría puedes tomar cualquiera implementación de terceros de la cual poseas la fuente (como Apache Axis), y simplemente compilarla para Android y (en teoría) debería funcionar.

      Esa es una gran ventaja de adoptar a Java en Android, ya que puedes reutilizar los cientos de miles de componentes de toda naturaleza que se han creado a través de los años.

      Sin embargo concuerdo contigo sobre mejor soporte empresarial, aunque nota que esta no es ni siquiera la versión 1.0, por lo que es posible que mas cosas sean añadidas para la 1.0, razón por la cual te aliento a que formes parte de los foros de Android y hagas saber tu inquietud sobre Web Services y Message Queue, pues es seguro que los desarrolladores de Android merodean el foro leyendo todo tipo de sugerencias.

      • Una cosa mas, en realidad los fuentes no son necesarios, solo los .class/.jar, por lo que estás habierto a cualquier implementación en Java de Web Services que desees :)

  • ya veo una posible alianza entre apple y google!!!!!!

  • palabras del propio Steve Jobs:

    Permitidme que lo diga bien claro: queremos aplicaciones nativas de terceras partes en el iPhone, y nuestro plan es poner un SDK (Kit de Desarrollo de Software) en manos de los desarrolladores en febrero. Estamos entusiasmados con la idea de crear una vibrante comunidad de desarrolladores independientes en torno al iPhone que permita a nuestros usuarios acceder de cientos de nuevas aplicaciones. Con nuestra revolucionaria interfaz táctil, potente hardware y avanzada arquitectura de software, *creemos que hemos creado la mejor plataforma móvil* que existe para nuestros desarrolladores.

    Creo que al viejo Steve se le fue el avion...

    Android Power!!!!!!!!!!

  • Exelentiiiiisimo!!! a estudiar Android ahora, desde luego que será una plataforma futuristicamente superior al iPhone, en tremendo momento Google le da el golpe al iPhone, WOW, k GENIOS!!!

    De manera que a aprender Android de arriba abajo, para estar preparados para las demandas del futuro, esto será un BOOM!!!

  • Muchas gracias por la pronta review :)
    Van a ser unos meses muy distraidos, y olé por Google, y que coño, olé por Jobs xD

  • ... Y han puesto 10 millones de dólares de premios para desarroladores.

    Propongo que Eliax recoja ideas, para que los que sepan programarlas las desarrollen.

    Yo propongo algunas que me parecen obvias pero que pueden no serlo.

    Funciones para la agenda de teléfonos y otros - algunas de hardgare -soporte físico -:

    1.- Vcard con foto (y mejor con foto más logo para contactos profesionales) transmisible x Bluetooth wifi u otros en vez de dar el teléfono transmitir Vcard (con pocos clicks) ¿recibir Vcard de xxxx Si/No? en el teléfono receptor y/o ¿Intercambiar vcard....?

    Además de dar el propio también el teléfono de uno o varios contactos

    2.- Agenda con fotos, 9 por pantalla, con subtítulo de nombre, y letras (en el caso de más de 9 por letra poniendo la segunda letra del primer nombre de la siguiente serie de 9) lo de 9 por pantalla configurable, 16 podria ser visible también.

    3.- Al estilo Skype cuando te llamen que salga la foto (si la tienes), función enviar/intercambiar Vcard x mms x p2p etc

    4.- Otra función que permita en poco hacer la foto, y añadir el nombre y el teléfono de alguien.

    5.- para la red P2P permitir en la Vcard asignar a un grupos y subgrupos a cada contacto para poder conectar a todos o a parte de los contactos via P2P.

    6.- Posiblilidad de videoconferencia P2P (al estilo skype) - si hoy en dia sólo el 10% de los móviles (celulares) tuviesen esa función, no harían falta operadoras.

    7.- Un "like iPhone", vamos copiar el aspecto y las funciones de un Iphone, a fin y a cuentas sería como hacer un tema de Gnome.

    8.- Puerto de Openoffice para leer documentos OASIS y retocarlos, liviano con las funciones más básicas.

    9.- Puerto liviano para MAME y otros emuladores

    10.- En hardware salida DVI, y puertos USB para usar como computadora de sobremesa en hoteles (en los porpios apartaos o en docks (soportes).

    11.- Posibilidad de configurarlo apaisado

    12.- Directorio Gphonico, algo así como unas página amarillas de Gphones con el identificador de mensajería (al estilo Skipe, gtalk, o el que se implemente)

    13.- videoconferencia a varios P2P

    14.- Cargador solar en la tapa posterior

    15 .- Cámara giratoria para videoconferenciar (de frente= o hacer fotos o videos viendo la pantalla (del otro lado) en apaisado.

    16 .- posibilidad de cambiar el tamaño de letra estandarizada y visible (o sea preconfigurada y testada que se vea bien para gente que necesite graduarse la vista y aun no lo haya hecho o con problemas visuales.

    17.- Cortar y Pegar visual en un bloc de notas para enviar SMS / MMS

    18.- Correo electrónico IMAP / POP con posibilidad de bajar sólo encabezados al estilo del inolvidable Pegasus y un filtrado al estilo Eudora (ahora Penélope, pero sin estos increibles filtros sin implementar aun)

    19.- Permitir hacer copias de seguridad incrementales del sistema entero en internet y en tarjetas de memoria.

    20.- Permitir hacer copias de seguridad sólo de los datos totales y/o incrementales en dispositivos físicos y/o internet.

    21.- Campos en la Vcard para todos los servicos de mensajería más comunes, y para los servicos de redes sociales.

    22.- Aplicación de contabilidad y facturación liviano con impresión PDF de las facturas y facturación electrónica, para aisentos de facturas enviadas y recibidas y algunos otros de uso cotidiano con una versión más completa para PC.
    Posibilidad de usar el programa de facturación para emitir bt/wifi comandas de restauración con fotos con subtitulos para los platos como si de la agenda se tratase (y otras maneras de hacerlo), gracias a un cliente liviano de un programa más potente del PC, y/o conexión VNC o similar.

    23.- Programa de CAD que exporte a formatos autocad y a PDF

    en fin que los desarrolladores teneis faenita en portar vuestros programas o adoptar código abierto ya existente. Si supiese me pondría a ello, el que da primero da dos veces.

  • Me tiere mi Android HTC Dev

    Hola hace poco compre mi Android HTC Dev Phone, entre a la configuración y vi que tenia el Firmware v1, me entere que ya habían hecho una actualización sobre esto, 1.2 o 2.0
    así que me puse a investigar y desafortunadamente fui a parar con estas paginas.

    http://www.blogsdna.com/es/1498/down...-firmware.htm/
    http://www.intomobile.com/2008/11/10...ot-access.html

    Con la primera no pude hacer nada, pero la segunda era como un complemento, resulta que segui los pasos y cuando reinicio el celular, se quedo en el logo de android
    de ahi no pasa, como todo el tema de android es tan nuevo, no hay nada de documentación, no se que hacer.

    Lo trate de conectar al computador y me aparece como una unidad adicional pero cuando voy a entrar me dice que inserte el disco.
    Eso me hace pensar que se borro la memoria interna y la mini-sd, no se que hacer alguien puede ayudeme porfavor!! Como puedo volver a un punto de restauración?

Añadir Comentario

tu nombre
tu email
(opcional)
web personal
(opcional)
en respuesta a...
comentario de caracteres máximo
6 + 1 = requerido (control anti-SPAM)
¿De qué color es el cielo?: requerido (control anti-SPAM)
 

"Hola Eliax,

Solo quería darte las gracias por todos y cada uno de los artículos que publicas, yo soy uno más que me sumé al grupo de "mentes curiosas" hace más de 4 años (Leo tus artículos como desde el 2008), abriste mi mente y ahora soy una persona mas feliz.

Gracias por abrirme la mente y explicarme cosas a veces tan complejas de manera tan sencilla... mil y mil gracias. :)
"

por "felipe" en nov 13, 2014


en camino a la singularidad...

©2005-2024 josé c. elías
todos los derechos reservados
como compartir los artículos de eliax