Home MundoTec Software Código fuente Tutorial / pdf Minijuegos
Cerrar

Tutorial Desarrollo de Aplicaciones en Android

Tutorial DESARROLLO DE APLICACIONES ANDROID.







1 INTRODUCCIÓN

En las siguientes líneas se hace una breve introducción al presente proyecto, exponiendo cuál es su motivación, qué objetivos son los que persigue y cuáles son los contenidos ofrecidos en esta memoria.

1.1 Motivación del proyecto

Al echar la vista atrás y observar el desarrollo tecnológico que ha experimentado la Humanidad desde mediados del siglo XX hasta hoy, no cabe duda de que más que un avance se ha producido una verdadera revolución. El descubrimiento de la informática, su aplicación paulatina en todo tipo de áreas de conocimiento y de producción, así como su introducción en el común de la población a través de todo tipo de componentes ha cambiado nuestra sociedad y nuestra economía más rápido que cualquier otro hecho o descubrimiento anterior.
El computador u ordenador es uno de los inventos que mejor resume la nueva situación tecnológica. Aparecieron primero como enormes y costosas máquinas que solamente estaban disponibles en importantes universidades o centros de investigación. Con la aparición de nuevas técnicas de fabricación, como los circuitos integrados, su tamaño, sus capacidades, y sobre todo precio, variaron de tal forma que se convirtieron en un producto de masas más, como lo podían ser la televisión o la radio. La aparición de Internet, y sobre todo su apertura al público general, determinaron de forma inequívoca la importancia de los ordenadores en la vida social, laboral o académica de cualquier persona hasta el día de hoy.
Simultáneamente a la aparición de Internet como servicio abierto, a principios de la década de 1990, surgió otro medio de comunicación que, si bien era más antiguo, se reinventaba a sí mismo gracias a los cambios en su tradicional soporte: la telefonía móvil. El boom en la implantación de Internet, junto al furor de la telefonía móvil, confirmaba que esta revolución tecnológica no sólo afectaba a la investigación o la actividad económica, sino que implicaba un fenómeno sociológico donde la comunicación y el acceso a la información en cualquier lugar y momento eran sus pilares básicos.
Como no podía ser de otra manera, la reducción del tamaño de los componentes y el aumento de sus prestaciones permitió acercar cada vez más ambos mundos, de forma que a través de un teléfono móvil no sólo se podían hacer llamadas o enviar SMS, sino que además se podía tener un acceso más o menos limitado a Internet, o incluso funciones añadidas como realizar fotografías o vídeos. Otros aparatos de similar tamaño, no directamente relacionados con la telefonía, surgieron y se hicieron tan populares como los primeros. Desde ese momento puede empezar a usarse el término genérico dispositivo móvil.
Así pues, un dispositivo móvil es un término general que describe una amplísima familia de aparatos electrónicos surgidos en los últimos años, de reducido tamaño, que ofrecen alguna capacidad de procesamiento y almacenamiento de datos y que están orientados a una función concreta o varias de ellas: desde los teléfonos móviles más evolucionados (los llamados smartphones), a ordenadores portátiles, cámaras digitales, reproductores de música o consolas de videojuegos.
La mayoría de estos aparatos cuentan con un sistema operativo de mayor o menor complejidad, que permita realizar las tareas de gestión de memoria y control de hardware que precisan. En el caso de los ordenadores portátiles, con tanta o incluso mayor capacidad que los de sobremesa, los sistemas operativos habituales son perfectamente compatibles y funcionan sin diferencias. Sin embargo, en otros dispositivos móviles es preciso diseñar nuevos sistemas operativos adaptados específicamente a sus características: restricciones de memoria y procesamiento, consumo mínimo de energía o gran estabilidad en su funcionamiento, entre otros.
Algunos sistemas operativos para dispositivos móviles más utilizados son Symbian, con más de un 60% del mercado, y Windows Mobile, la versión móvil del gigante Microsoft. Este reparto puede verse sustancialmente afectado por la incursión de otro gigante de Internet, Google, a través de su propio sistema operativo de nombre Android.
Google es una joven compañía surgida a finales de los 90 que pronto se hizo muy popular gracias al potente buscador del mismo nombre. Durante años, Google no ha dejado de crecer y de ofrecer toda clase de servicios basados siempre en Internet y en la combinación de la última tecnología disponible con la máxima experiencia del usuario.
Android, más que un sistema operativo, representa toda una pila de software para dispositivos móviles que incluye gran cantidad de drivers, gestor de bases de datos, una completa framework de aplicaciones, y numerosas aplicaciones de usuario. Android está basado en el núcleo de Linux y todas sus aplicaciones se escriben en lenguaje Java, disponiendo además de una máquina virtual específica llamada Dalvik.
Con la aparición de este sistema, Google pretende aprovechar al máximo la cada vez mayor capacidad de los dispositivos móviles, que llegan a incluir componentes como GPS, pantallas táctiles, conexiones rápidas a Internet, y por supuesto, todos los servicios asociados hasta ahora a los teléfonos móviles, además de aplicaciones de usuario hasta ahora limitadas a los ordenadores, como clientes de correo, aplicaciones ofimáticas o videojuegos. En Android, cada aplicación corre en su propio proceso, donde el sistema decide en cada momento qué aplicación debe ser eliminada para liberar recursos en caso de carencia, y responsabilizándose igualmente de restaurarla de forma totalmente transparente al usuario. Navegar entre varias aplicaciones abiertas deja de ser una característica propia de ordenadores.
Android se lanza bajo la licencia Apache, lo que implica que, como software libre, cualquier desarrollador tiene acceso completo al SDK del sistema, incluidas todas sus API, documentación y emulador para pruebas, pudiendo distribuirlo y modificarlo.
Además, esta licencia permite a los desarrolladores tanto publicar a su vez sus creaciones, como distribuirlas únicamente bajo pago ocultando el código fuente. Este nuevo sistema introduce también interesante conceptos, como es la composición de sus aplicaciones a través de combinación de módulos o bloques básicos, según la naturaleza de la aplicación, o la delegación en el sistema de determinadas acciones para que sean otras aplicaciones instaladas las que se hagan cargo de ellas.
En el momento de esta redacción, Android no acaba más que comenzar su andadura en el mercado de los sistemas operativos para dispositivos móviles. Únicamente existe un terminal a la venta, frente a los miles de modelos de sus competidores [2]. Numerosos fabricantes, distribuidores y operadores se han unido a la plataforma de patrocinadores de Android, y fabricantes de gran renombre han anunciado la producción inminente de nuevos modelos con Android como sistema nativo [3]. Dada la creciente importancia de estos dispositivos y su más que probable implantación masiva, cada vez con mayores prestaciones y capacidades, unida al éxito que suele acompañar a Google en sus proyectos, todo parece indicar que Android podría posicionarse en un futuro más o menos cercano como uno de los sistemas operativos más utilizados en el mundo.

1.2 Objetivos

El nuevo sistema operativo para dispositivos móviles de Google, Android, centra el desarrollo de este proyecto fin de carrera. Para poder dirigir con mayor éxito los esfuerzos por conocer y comprender las características de este nuevo sistema, es necesario fijar unos objetivos que abarquen las actividades que se pretenden realizar y, además, permitan al final de las mismas conocer el grado de desarrollo y cumplimiento alcanzado. Por ello, los objetivos perseguidos en el desarrollo de este proyecto fin de carrera son los enumerados a continuación:

- Conocer las principales características de Android. El primer paso para conocer este nuevo sistema debe consistir en indagar toda la información posible sobre él, a fin de conocer cuál es su arquitectura, sus componentes básicos, y cuál es su comportamiento al ejecutar las aplicaciones, documentando todos estos aspectos. Además, ha de averiguarse cuáles son las ventajas y las posibilidades reales que Android ofrece frente a otros sistemas de similar naturaleza.
- Estudiar el entorno de desarrollo de Android. Al lanzarse bajo una licencia de software libre, el SDK completo está disponible para cualquier desarrollador que desee descargarlo. Este incluye numerosas ayudas para comenzar a crear aplicaciones en Android, desde las API completas con todas las clases y paquetes, hasta herramientas de programación y un completo emulador para poder realizar pruebas. Todos estos elementos han de ser estudiados y explicados.
- Desarrollar una aplicación completa para Android. Una vez conocidas las características de este sistema, así como el entorno de desarrollo que ofrece y sus posibilidades, debe crearse una aplicación que aproveche algunas de sus características más fundamentales. A través de este desarrollo y una detallada documentación del mismo, el lector debe poder comprender mejor el funcionamiento de aplicaciones para Android, así como conocer los pasos para crear sus propias aplicaciones.

2 ESTADO DEL ARTE

2.1 Dispositivos móviles

No existe un consenso claro a la hora de definir qué es realmente un dispositivo móvil y qué no lo es. Es frecuente que hoy en día este término se utilice para designar únicamente a ciertos modelos de teléfonos móviles con mayores o menores prestaciones. A pesar de ello, un dispositivo móvil no tiene por qué ceñirse solamente al ámbito telefónico.
Buscando ser más rigurosos, se podría denominar dispositivo móvil a todo aparato electrónico que cumple unas características muy básicas:

- es de reducido tamaño, haciéndolo fácil de transportar.
- cuenta con una cierta capacidad de computación y almacenamiento de datos.
- incorpora elementos de E/S básicos (por lo general, pantalla y/o algún tipo de teclado).

Más allá de estas características comunes, los dispositivos móviles forman en la actualidad un grupo sumamente heterogéneo y pueden incorporar casi cualquier componente de hardware y software que amplía y diversifica su función inicial. El más frecuente sin duda es la conexión telefónica (incluyendo servicios como el envío de SMS, MMS, y acceso WAP) o la conexión a Internet.
Igualmente son habituales la cámara fotográfica y de vídeo, pantalla táctil, teclado QWERTY, receptor de radio, Bluetooth, conexión mediante infrarrojos, dispositivos de memoria extraíbles, localizador GPS, acelerómetro, etc. Desde el punto de vista del software, pueden incorporar también un amplio abanico de aplicaciones tales como programas ofimáticos, reproductores de audio y vídeo, organizadores, videojuegos, navegadores web o clientes de correo, entre otros.

2.1.1 Clasificación de los dispositivos móviles

Al igual que ocurre a la hora de definir qué es un dispositivo móvil, la clasificación que se pueda hacer de estos aparatos está sujeta a diferentes valoraciones y a veces no existe un acuerdo amplio para ubicar un dispositivo móvil en una determinada familia.
En la década de los 90, tras la aparición de estos primeros dispositivos, establecer clasificaciones más o menos rigurosas era posible debido a que cada aparato estaba claramente definido para una función determinada o para un público concreto. El aumento de las prestaciones y funcionalidades que en la actualidad puede ofrecer cualquier dispositivo móvil dificulta el poder agruparlo dentro de un conjunto determinado. Por ejemplo, un smartphone representa una evolución de un teléfono móvil tradicional, esto es, su cometido es ofrecer comunicación telefónica; sin embargo, cuenta con otros servicios adicionales como la conexión a Internet y aplicaciones, servicios propios de un ordenador, cámara de fotos y de vídeo o la posibilidad de reproducir películas o videojuegos.
La clasificación que a aquí se propone utilizar como principal criterio la funcionalidad o servicio principal para la que ha sido diseñado bien el propio dispositivo móvil, o bien aquel dispositivo del que directamente procede y del que supone una evolución mejorada. Tal y como se deduce de todo lo anteriormente explicado, la pertenencia a una categoría concreta no implica en absoluto que el dispositivo no pueda ofrecer otras muchas características propias de otras categorías.
Dicho la anterior, los dispositivos móviles pueden ser clasificados en los siguientes grupos:

- Dispositivo de comunicación
Un dispositivo de comunicación es aquel dispositivo móvil cuyo cometido principal es ofrecer una infraestructura de comunicación, principalmente telefónica. Estos dispositivos ofrecen además servicios como el envío de mensajes SMS y MMS, o acceso WAP. En esta categoría se incluiría el tradicional teléfono móvil, precursor indiscutible dentro de los dispositivos móviles, la BlackBerry y el smartphone, que amplía considerablemente las prestaciones del primero mediante pantalla táctil, conexión a Internet o la ejecución de aplicaciones (por ejemplo, iPhone o HTC G1).

- Dispositivo de computación
Los dispositivos de computación son aquellos dispositivos móviles que ofrecen mayores capacidades de procesamiento de datos y cuentan con una pantalla y teclado más cercanos a un ordenador de sobremesa. Dentro de este grupo encontramos a las PDA, muy populares a finales de los años 90 y que permitían al usuario disponer de un organizador mucho más completo que los ofrecidos por los teléfonos móviles del momento, e incluso en ocasiones la visualización de documentos o acceso a Internet. Por otro lado, dispositivo de computación también es un ordenador portátil o laptop, que dentro de los dispositivos móviles son sin duda los que mayores prestaciones hardware ofrecen (igualando o superando a los de sobremesa) pero también los que tienen, con diferencia, un mayor tamaño, peso y precio. Las calculadoras gráficas pueden ser igualmente incluidas en este grupo de dispositivos de computación.

- Reproductor multimedia
Un reproductor multimedia es aquel dispositivo móvil que ha sido específicamente diseñado para proporcionar al usuario la reproducción de uno o varios formatos de datos digitales, ya sea audio, vídeo o imágenes. Dentro de estos dispositivos encontramos reproductores de MP3, los DVD portátiles, los eBooks, y en los últimos años los reproductores multimedia de la popular familia iPod de Apple, que ofrecen tanto audio y como vídeo. Estos dispositivos son con frecuencia los de más reducido tamaño y, junto a los teléfonos móviles y smartphones, los más extendidos.

- Grabador multimedia
Dentro de los dispositivos móviles, un grabador multimedia es aquel dispositivo que posibilita la grabación de datos en un determinado formato digital, principalmente de audio y vídeo. En esta categoría se hallan las cámaras fotográficas digitales o las cámaras de vídeo digital.

- Consola portátil
Una consola portátil es un dispositivo móvil cuya única función es la de proporcionar al usuario una plataforma de juego. Las consolas portátiles fueron, junto a los teléfonos, los primeros dispositivos móviles en convertirse en un producto de masas. Hoy en día representan un importantísimo volumen de ventas dada su gran aceptación en la sociedad y son objeto de auténticas guerras comerciales entre las principales compañías del sector. Algunos ejemplos de esta categoría son la Nintendo DS de Nintendo, o la PSP de Sony.

En la siguiente figura, Figura 1, se ofrece una amplia muestra de los distintos dispositivos móviles que pueden ser encontrados hoy día en el mercado.

Aplicaciones Android
Figura 1. Ejemplos de dispositivos móviles.

a) teléfono móvil Nokia 3210; b) BlackBerry 8300; c) smartphone HTC G1; d) PDA Acer N35; e) ordenador portátil MacBook Air; f) ebook Sony Reader; g) reproductor iPod Nano; h) cámara de fotografía digital Nikkon Coolpix S210; i) consola portátil PSP; j) consola portátil Nintendo DS

2.1.2 Smartphone

Dentro de los dispositivos móviles, un smartphone (cuya traducción en español sería “teléfono inteligente”) es una evolución del teléfono móvil tradicional que cuenta con ciertas características y prestaciones que lo acercan más a un ordenador personal que a un teléfono tradicional.
Entre dichas características, se puede encontrar una mejora en la capacidad de proceso y almacenamiento de datos, conexión a Internet mediante Wi-Fi, pantalla táctil, acelerómetro, posicionador geográfico, teclado QWERTY y diversas aplicaciones de usuario como navegador web, cliente de correo, aplicaciones ofimáticas, reproductores de vídeo y audio, etc. incluyendo la posibilidad de descargar e instalar otras nuevas.
A pesar de estas importantes mejoras con respecto a sus predecesores móviles, el reducido tamaño de los smartphones conlleva inexorablemente limitaciones de hardware que los mantienen claramente diferenciados de los ordenadores convencionales. Estas limitaciones se reflejan principalmente en pantallas más pequeñas, menor capacidad del procesador, restricciones de memoria RAM y memoria persistente, y necesidad de adaptar el consumo de energía a la capacidad de una pequeña batería.
Estas limitaciones obligan a tener muy presente la capacidad real del dispositivo a la hora de desarrollar su software, ya sean aplicaciones de usuario o el propio sistema operativo.

2.2 Sistemas operativos para dispositivos móviles

El sistema operativo destinado a correr en un dispositivo móvil necesita ser fiable y tener una gran estabilidad, ya que incidencias habituales y toleradas en ordenadores personales como reinicios o caídas no tienen cabida en un dispositivo de estas características. Además, ha de adaptarse adecuadamente a las consabidas limitaciones de memoria y procesamiento de datos, proporcionando una ejecución exacta y excepcionalmente rápida al usuario.
Estos sistemas han de estar perfectamente testeados y libres de errores antes de incorporarse definitivamente a la línea de producción. Las posibilidades que existen en un ordenador estándar de realizar actualizaciones e incluso reinstalar mejores versiones del sistema para cubrir fallos o deficiencias son más limitadas en un dispositivo móvil.
Es posible incluso que un aparato de esta naturaleza deba estar funcionando ininterrumpidamente durante semanas e incluso meses antes de ser apagado y reiniciado, a diferencia de lo que ocurre con un ordenador personal. El consumo de energía es otro tema muy delicado: es importante que el sistema operativo haga un uso lo más racional y provechoso posible de la batería, ya que esta es limitada y el usuario siempre exige una mayor autonomía.
Todos estos aspectos de los dispositivos móviles, entre otros muchos, han de ser tenidos en cuenta a la hora de desarrollar un sistema operativo competente en el mercado, atractivo para los fabricantes y que permita al usuario sacar máximo provecho de su terminal.
En la actualidad, existen varios sistemas operativos para toda la gama de dispositivos móviles. Dentro de los smartphones, Symbian se lleva la mayor cuota de mercado con un 65%, seguido de Windows Mobile con un 12%.

Aplicaciones Android
Figura 2. Cuota de mercado de distintos SSOO para smartphones (2007)

2.2.1 Symbian

Symbian es un sistema operativo para dispositivos móviles desarrollado por Psion, Nokia, Motorola y Ericsson. El principal objetivo de estas compañías era el de crear un nuevo y compartido sistema operativo que estuviera perfectamente adaptado a los teléfonos móviles del momento, y fuese además capaz de competir con Palm OS y Windows Mobile. La primera versión de Symbian, basada en el sistema EPOC de Psion, se lanzó en 1998. Actualmente, el número de empresas vinculadas al proyecto ha crecido considerablemente, siendo la última versión lanzada la 9.3 en julio de 2006.
El acuerdo bajo el cual se desarrolló Symbian es bastante simple: Symbian Ltd. desarrolla el sistema operativo Symbian, que incluye el microkernel, los controladores, el middleware y una considerable pila de protocolos de comunicación e interfaces de usuario muy básicas. Los desarrolladores que obtienen la licencia correspondiente para trabajar con Symbian implementan sus propias interfaces de usuario y conjuntos de aplicaciones según las necesidades de sus propios dispositivos. Esto permitió a Symbian posicionarse como un sistema operativo muy flexible, que tenía en cuenta los requisitos de la mayoría de los dispositivos fabricados y, al mismo tiempo, permitía un alto grado de diferenciación.
En Symbian, una mínima porción del sistema tiene privilegios de kernel; el resto se ejecuta con privilegios de usuario en modo de servidores, de forma que los procesos en ejecución y sus prioridades son manejadas por este microkernel. Cada una de las aplicaciones corre en su propio proceso y tiene acceso únicamente a una exclusiva zona de memoria.
Symbian contempla cinco tipos de ediciones o series del sistema operativo según las características del dispositivo móvil. La principal diferencia entre ediciones no radica tanto en el núcleo del sistema operativo como en la interfaz gráfica utilizada:

- Serie60. El más popular de todos, debido fundamentalmente a que el gigante Nokia, uno de los fabricantes más importantes del mundo, ha hecho de Symbian y de su versión Serie60 el núcleo de casi todos sus modelos de smartphones. Los dispositivos con Serie60 tiene una pantalla pequeña y un teclado del tipo 0-9#. También lo utilizan fabricantes como Siemens, Samsung y Panasonic.
- Serie80. Esta edición, también usada por Nokia, está más orientada a dispositivos que tienen pantalla táctil y permiten multitarea, pudiendo tener varias aplicaciones abiertas simultáneamente.
- Serie90. Muy similar a la edición Serie80, sólo que éstos dispositivos tienen una pantalla más grande y llevan incorporados sensores táctiles más desarrollados. Utilizan teclados virtuales, reconocimiento de trazos o teclados acoplables mediante, por ejemplo, Bluetooth.
- UIQ. La interfaz de esta edición de Symbian se encuentra muy influenciada por Palm OS. Implementan una especie de multitarea virtual, dando al usuario la falsa sensación de poder realizar varias acciones simultáneas; suelen tener un alto coste computacional e influyen negativamente en el tiempo de respuesta apreciado por el usuario. Es utilizado en algunos modelos de Sony Ericcson y Motorola.
- MOAP. Esta edición se da únicamente en Japón, principalmente en el fabricante FOMA.

Para más información acerca de las distintas ediciones y los modelos de dispositivos donde actualmente funcionan puede consultarse la referencia [8]. Desarrollar aplicaciones para Symbian es relativamente sencillo. No es necesario aprender ningún lenguaje de programación nuevo porque permite utilizar lenguajes habituales como Java, C++, Visual Basic o Perl, entre otros, para desarrollar aplicaciones. Este hecho ha permitido que actualmente sean cientos de miles las aplicaciones y utilidades disponibles para Symbian.

2.2.2 Windows Mobile

Windows Mobile es un sistema operativo diseñado por Microsoft y orientado a una gran variedad de dispositivos móviles. En realidad, Windows Mobile representa una particularización de otro gran sistema de Microsoft llamado Windows CE.
A principios de la década de los 90, cuando comenzaron a aparecer los primeros dispositivos móviles, Microsoft tomó la decisión de crear un sistema operativo capaz de hacer frente al entonces recientemente lanzado por Apple, el sistema Newton MessagePad. Fruto de esta iniciativa surgió Pegasus, cuyo nombre comercial definitivo fue Windows Compact Edition, o Windows CE.
El objetivo principal que buscaba Microsoft era que el nuevo sistema fuera lo suficientemente flexible y adaptable para poder ser utilizados en un amplio abanico de dispositivos, cuyo única característica común es la de ser de reducido tamaño y tener, por tanto, una limitación obvia en sus recursos. Las características principales con las que cuenta Windows CE son las siguientes:

- Es un sistema modular, lo que permite que cada fabricante pueda seleccionar aquellas partes que le benefician más para su dispositivo.
- Contempla una considerable gama de recursos hardware: teclado, cámara, pantalla táctil, etc.
- Tiene un tamaño en memoria relativamente pequeño y bajo coste computacional.
- Es capaz de trabajar con distintas familias de procesadores de 32 bits. - Permite interactuar con otros dispositivos móviles.

Un aspecto distintivo de Windows CE con respecto a otros productos desarrollados por Microsoft es que un elevado número de sus componentes se ofrece a los fabricantes y desarrolladores a través del propio código fuente. Esto les permite poder adaptar el sistema a sus dispositivos específicos. Aquellos componentes básicos de Windows CE que no necesitan ningún tipo de adaptación siguen siendo ofrecidos únicamente como código binario. La arquitectura básica de Windows CE es la explicada a continuación:

- OEM Layer: es la capa situada entre el hardware del dispositivo y el kernel. Permite a los fabricantes desarrollar sus propios drivers y funciones de control de los elementos de hardware.
- Operating System Layer: incluye el kernel como elemento principal y el conjunto de API Win32 necesarias. En esta capa se sitúan los bibliotecas de comunicaciones, el gestor gráfico, gestor de ficheros y registros, así como otros componentes opcionales.
- Application Layer: donde residen las aplicaciones por defecto de Windows CE y las aplicaciones del usuario.

Actualmente, Windows CE en su versión 6.0, es una gran colección de módulos que permiten construir un completo sistema operativo, permitiendo así seleccionar y configurar aquellos módulos que son realmente necesarios para un determinado dispositivo o una aplicación. En esta capacidad de adaptación es donde surge en el año 2003 Windows Mobile, una especificación de ciertas partes de Windows CE adaptadas especialmente a smartphones y PDA. Windows Mobile está a su vez dividido en tres ediciones:

- Windows Mobile Classic: antes llamado Pocket PC, orientado a dispositivos del tipo PDA sin funciones de comunicación telefónica.
- Windows Mobile Standard: hasta ahora conocido como Smartphone, esta edición está destinado a dispositivos del tipo smartphone sin pantalla táctil.
- Windows Mobile Professional: anteriormente Pocket PC Phone Edition, para cubrir aquellas PDA u ordenadores de bolsillo con capacidad de comunicación telefónica.

2.3 Java 2 Micro Edition

Java es un lenguaje de programación orientado a objetos creado por Sun Microsystems. Su principal aliciente, y la característica que lo convirtió en uno de los lenguajes más populares hasta hoy, fue la posibilidad de crear aplicaciones independientes a la plataforma donde van a ser ejecutadas, siguiendo el axioma “write once, run anywhere” (“escribe una vez, ejecuta en cualquier parte”). Java ofrece la oportunidad de crear aplicaciones tanto de escritorio como empresariales, incluyendo por supuesto a los dispositivos móviles.
Esta portabilidad, que lo hizo tan importante, viene dada por la máquina virtual de Java o JVM (Java Virtual Machine). Al compilar un fichero fuente en Java no se crea un binario directamente ejecutable, sino un código intermedio llamado bytecode en ficheros cuya extensión es .class. Para cada hardware debe haber una JVM específica, ya sea un teléfono móvil, un ordenador con Windows, o un microondas. Cada máquina virtual conoce el conjunto de instrucciones de la plataforma sobre la que está instalada, y puede traducir el bytecode, común para todas las máquinas, al código nativo que es capaz de entender el hardware en cuestión de dicha plataforma.

2.3.1 Ediciones de Java 2

La revolución tecnológica acaecida en el los últimos años propiciaron que los responsables de Java ofrecieran soluciones personalizadas a cada ámbito tecnológico. Sun decidió crear una edición distinta de Java según las necesidades del entorno y la tecnología utilizada:

- Java Enterprise Edition (Java EE), orientada al entorno empresarial.
- Java Standard Edition (Java SE), orientada al desarrollo con independencia de la plataforma.
- Java Micro Edition (Java ME), orientada a dispositivos con capacidades restringidas.
- Java Card, orientada a tarjetas inteligentes o smart cards.

Todas las ediciones comparten un conjunto más o menos amplio de las API básicas de Java, agrupadas principalmente en los paquetes java.lang y java.io . A día de hoy, Java EE representa un superconjunto de Java SE, pues contiene toda la funcionalidad de éste y más características, así como Java ME es un subconjunto de Java SE (excepto por el paquete javax.microedition ).
Por lo tanto, Java Micro Edition es una versión muy específica del lenguaje Java, creado para desarrollar, instalar y ejecutar software escrito en Java en aparatos electrónicos de baja capacidad, como electrodomésticos, PDA, teléfonos móviles u ordenadores de bolsillo.

2.3.2 Arquitectura de Java ME

Una aplicación Java ME típica está formada por un archivo JAR, que es el que contiene a la aplicación en sí, y un archivo opcional JAD (Java Archive Descriptor) que contiene diversa información sobre la aplicación.
Antes de desarrollar una aplicación en Java ME, es necesario tomar una serie de decisiones según el dispositivo a utilizar y las necesidades requeridas. No todos los desarrollos realizados en Java ME utilizan los mismos componentes. En concreto, una aplicación en Java ME se desarrolla a partir de una combinación de:

- Máquina virtual: existen disponibles dos máquinas virtuales de Java ME con diferentes requisitos, cada una pensada para tipos distintos de pequeños dispositivos:
-KVM, o Kilobyte Virtual Machine, se corresponde con la máquina virtual más pequeña desarrollada por Sun. Se trata de una implementación de máquina virtual reducida y orientada a dispositivos de 16 o 32 bits con al menos 25 Mhz de velocidad y hasta 512 Kb de memoria total disponible.
-CVM, o Compact Virtual Machine, soporta las mismas características que la Máquina Virtual de Java SE. Está orientada a dispositivos electrónicos con procesadores de 32 bits de gama alta y en torno a 2Mb o más de memoria RAM.

- Configuración: una configuración consiste en un conjunto de clases básicas destinadas a conformar el corazón de la aplicación. En concreto, dentro de Java ME existe dos configuraciones:
-Connected Limited Device Configuration (CLDC) enfocada a dispositivos con restricciones de procesamiento y memoria.
-Connected Device Configuration (CDC) enfocada a dispositivos con más recursos.

- Perfil: bibliotecas de clases específicas, orientadas a implementar funcionalidades de más alto nivel para familias específicas de dispositivos.

Cada una de las dos configuraciones mencionadas requiere en realidad de una determinada máquina virtual. De esta forma, si es escoge la configuración CLDC, será necesario utiliza la máquina virtual denominada CVM; si, por el contrario, se decide utilizar la configuración CDC, la máquina virtual necesaria es la conocida como KVM.
Con la elección de perfiles, se da una situación similar. Existen unos perfiles que se utilizan sobre la configuración CDC (Foundation Profile, Personal Profile y RMI Profile) y otros que lo hacen sobre CLDC (PDA Profile y Mobile Information Device Profile, conocido como MIDP).
Las aplicaciones en Java ME que se realizan utilizando el perfil MIDP reciben el nombre de MIDlets. Se dice así que un MIDlet es una aplicación Java ME realizada con el perfil MIDP, sobre la configuración CLDC, y usando la máquina virtual KVM. Desde un punto de vista práctico, MIDP es el único perfil actualmente disponible.

2.3.3 Bibliotecas disponibles

Al desarrollar una aplicación en Java ME bajo el perfil MIDP, el programador puede hacer uso, entro otras, de las siguientes bibliotecas:

java.io :: Operaciones de E/S básicas
java.lang :: Operaciones de la Máquina Virtual
java.util :: Utilidades estándar
javax.microedition.midlet :: Marco de ejecución para las aplicaciones
javax.microedition.lcdui :: Interfaces de usuario
javax.microedition.rms :: Almacenamiento persistente en el dispositivo
javax.microedition.io :: Conexión genérica

A través de la configuración CLDC, se obtienen un conjunto de clases heredadas de la edición Java SE. Aproximadamente, unas 37 clases derivadas de los paquetes java.lang , java.util y java.io . Cada clase es un subconjunto de la correspondiente en Java SE.
Los paquete java.io y java.net , son los encargados en Java SE de las operaciones de E/S. Debido a las limitaciones de CLDC, no fue posible incluir todas y cada una de las clases de estos paquetes. Tampoco se incluyeron la clase java.net , encargada de las comunicaciones TCP/IP. En su lugar, MIDP añade el paquete javax.microedtion.io que suple de forma genérica las necesidades en cuestiones de comunicación, como se verá más adelante.
Además de los ya mencionados, MIDP incluye también un paquete que posibilita la creación de interfaces de usuario: javax.microedition.lcdui . Las clases contenidas en este paquete pueden dividirse en dos grande grupos:

- Elementos de interfaz de usuario de alto nivel. Esta interfaz usa componentes tales como botones, cajas de texto, formularios, etc. Estos elementos son implementados por cada dispositivo y la finalidad de usar las APIs de alto nivel es su portabilidad.
- Elementos de interfaz de usuario de bajo nivel. Se tiene un control total sobre los recursos, pero se puede perder la portabilidad ya que dependerá mucho del dispositivo destino. Generalmente, se utiliza en juegos.

El paquete javax.microedition.rms proporciona un mecanismo a los MIDlets para poder almacenar información de forma persistente en el dispositivo, utilizando para ello una base de datos basada en registros llamada Record Management System o RMS. Los registros se convierten así en la unidad básica de información en un MIDlet, permitiendo al dispositivo crear, leer, modificar y borrar cualquier registro de datos.

2.3.4 Comunicaciones en MIDlets

Anteriormente se ha mencionado que el paquete javax.microedition.io contiene las clases que dan soporte a las comunicaciones en una aplicación MIDP. De hecho, este paquete pretende sustituir, de una forma más breve y concisa, al paquete java.net de Java SE. Sin embargo, en una comunicación el MIDlet no utiliza únicamente este paquete, sino que también usará java.io , añadido por la configuración CLDC.
Mientras que el paquete javax.microedtion.io tiene como misión crear y manejar diferentes conexiones de red (por HTTP, datagramas, sockets), el paquete java.io lo que posibilita a través de su declaración de clases es poder leer y escribir en estas conexiones de red.
Debido a las limitaciones ya conocidas de un dispositivo basado en MIDP, es del todo imposible contener en él la implementación de cada protocolo de comunicación existente. Lo que proporciona javax.microedition.io es una única clase, llamada Connector , que esconde todos los detalles de la conexión. Dicho en otras palabras, una misma clase Connector sirve tanto para leer archivos, como abrir una conexión por HTTP o mediante sockets.

Aplicaciones Android
Figura 4. Clases del paquete javax.microedition.io

Se comentarán a continuación el cometido de algunas de las clases de comunicaciones mostradas en la Figura 4:

- Connection : representa la conexión en una forma genérica y abstracta.
- InputConnection : representa una conexión basada en streams de entrada.
- OutputConnection : representa una conexión basada en streams de salida.
- StreamConnection : representa un tipo de conexión cuyos datos pueden ser tratados como streams de bytes y en la que es posible leer y escribir.
- DatagramConnection : define las capacidades que debe tener una conexión basada en datagramas.
- HttpConnection : que implementa el protocolo HTTP.
- UDPDatagramConnection : representa una conexión basada en datagramas en los que se conoce su dirección final.
- CommConnection : representa una conexión donde los bits de datos se transmiten secuencialmente, es decir, en serie.
- SocketConnection : define una conexión entre sockets basados en streams.

2.3.5 El problema de la fragmentación

La popularidad de la tecnología Java hizo que pronto todos los fabricantes y desarrolladores se interesaran en su versión para dispositivos móviles. La creciente demanda de estos aparatos impulsó el uso de Java ME para el desarrollo de todo tipo de aplicaciones y juegos.
Sin embargo, en muchos casos las aplicaciones desarrolladas en Java ME no pudieron seguir la filosofía tradicional de Java “write once run everywhere” (“escribe una vez, ejecuta en cualquier parte”): con frecuencia, cada aplicación debía ser adaptada según el dispositivo móvil al que estuviera destinada. Es decir, una misma aplicación requería varios desarrollos para poder llegar al mayor número de usuarios posible.
La diferenciación, muy útil para los fabricantes por permitirles adaptar sus productos a las distintas necesidades de los usuarios, se convirtió en el mayor problema hasta el día de hoy para los desarrolladores de aplicaciones móviles. Este problema recibe el nombre de fragmentación [15]. La fragmentación aumenta los costes y el tiempo de desarrollo de una aplicación, que necesita llegar a cuántos más usuarios posibles para poder maximizar su rentabilidad.
Para comprender de dónde viene la fragmentación en Java ME y por qué no existe en otras versiones de Java, es necesario tener en cuenta distintos factores vinculados a los dispositivos móviles.
Para empezar, el hardware presente en estos aparatos es mucho más heterogéneo del que puede darse en los computadores convencionales, como ordenadores de sobremesa o portátiles. Las capacidades del procesador o de memoria pueden ser tan distintas que marquen la diferencia entre poder o no poder ejecutar una aplicación o un videojuego. También la existencia de muchos tipos de pantallas, con diferentes resoluciones y formas, sobrepasa la mera diferenciación en el número de pulgadas que existe, por ejemplo, entre los ordenadores convencionales.
Por otro lado, está el sistema operativo. A diferencia de los computadores tradicionales, no existe en los dispositivos móviles un sistema operativo que domine abrumadoramente el mercado. La razón es que cada fabricante crea su propio sistema operativo (o lo adapta como en el caso de Symbian, anteriormente visto) ya que éste viene determinado por el tipo de hardware al que tendrá que dar soporte, muy distinto entre diferentes modelos. Aunque la JVM tiene como misión abstraer a la aplicación escrita en Java ME de estos detalles, a la hora de la verdad solamente estarán disponibles si el sistema operativo contempla las API necesarias para controlar todos esos recursos hardware.
Además de lo anterior, también se encuentran las API específicas creadas por cada fabricante. Estas API, que permiten utilizar cámaras, Bluetooth, MMS, listados de contactos, etc., posibilitan hacer aplicaciones mucho más sofisticadas, pero fuera del estándar MIDP especificado por Java. Muchos de estos añadidos están disponibles solamente en algunos modelos de dispositivos. Algunas compañías implementan su propia JVM, cuya misión principal es abstraer lo más posible del sistema operativo nativo, pero los criterios de implementación y seguimiento de los estándares de Java son bastante abiertos y las JVM resultantes suelen ser a menudo diferentes entre sí.
En resumidas cuentas, Java ME ha sido durante estos años la indiscutible tecnología bajo la cual se ha desarrollado multitud de aplicaciones de toda naturaleza para dispositivos móviles, especialmente los teléfonos móviles y los primeros smartphones. Sin embargo, las diferentes implementaciones de hardware, API y JVM de los fabricantes ha frustrado la posibilidad de desarrollar aplicaciones verdaderamente portables en Java ME, obligando a que cada creación esté siempre dirigida a una determinada familia de dispositivos y a realizar labores de traducción para poder cubrir mayores cuotas de mercado.

2.4 Historia de Google Inc.

El nacimiento y desarrollo de Google Inc. es una de esas tantas historias que parecen cumplir a rajatabla los estereotipos del “sueño americano”: una simple pero brillante idea que, con esfuerzo, talento y dedicación, se convierte desde cero en una realidad de éxito.

2.4.1 Origen del buscador Google

En 1995 dos estudiantes de la Universidad de Standford, Larry Page y Sergey Brin, descubren su común interés en averiguar alguna forma de poder conocer el nivel de importancia de una determinada página web [16]. En concreto, Larry Page trabajaba en una idea según la cuál una página tenía mayor o menor importancia en la red en función del número de páginas que la enlazaran a través de links. La idea derivaba del mundo universitario en donde Page se movía, en el que la relevancia de un artículo académico venía dada por las veces que era citado a su vez en el trabajo de otros investigadores.
De este modo, Page creó un primer prototipo llamado BackRub, que rastreaba los sitios web y almacenaba los enlaces hallados en ellas en una base de datos. Cuando comenzó a realizar pruebas con BackRub, Page consiguió determinar cuántos enlaces había entre las páginas, pero no hallaba la forma de clasificarlas en importancia, ya que la compleja telaraña de enlaces que se formaba implicaba un considerable cálculo recursivo. Es en este punto donde entra Sergey Brin, licenciado en Informática y Ciencias Matemáticas, que andaba buscando un tema interesante para su tesis doctoral. Brin siempre había destacado por su habilidad matemática y se puso a trabajar junto con Page en elaborar un algoritmo que pudiera clasificar la importancia de los enlaces.
Fruto de esta colaboración nació PageRank, la evolución del anterior proyecto de Page, que además de buscar y almacenar enlaces era capaz de clasificar la importancia de una determinada página en función de éstos. Pronto se percataron de que PageRank no sólo buscaba enlaces, los almacenaba y clasificaba, sino que también permitía realizar búsquedas entre todos esos enlaces. De hecho, los resultados obtenidos eran mejores que aquellos dados por los buscadores más populares de la época, como por ejemplo Altavista. Además, PageRank era totalmente escalable: a mayor número de enlaces en su base de datos, mejor y más precisas eran las búsquedas que realizaba en ellos.
Viendo los buenos resultados, Page y Brin bautizaron de nuevo su creación con el definitivo nombre de Google. El extraño nombre proviene del término científico “googol”, que denota al número 10 elevado a 100. En 1997, publicaron su buscador en un servidor web de la Universidad de Standford, convirtiéndose en muy poco tiempo en una de las herramientas web favoritas de los alumnos de esta universidad. Este éxito animó a sus creadores a continuar desarrollándolo y ampliándolo, comprando discos duros y CPU de segunda mano a sus propios compañeros e instalando sus servidores en la misma habitación de Sergey Brin. En pocos meses, Google comenzó a saturar la red de la Universidad de Standford, una de las de mayor capacidad del mundo en aquella época, debido al tráfico de consultas que recibía. Es entonces cuando deciden adquirir el dominio “google.com”.
Las necesidades de hardware y espacio de Google no dejaban de crecer, hasta el punto de que Larry Page y Sergi Brian se ven incapaces de financiarlo, a pesar de las labores de intermediación de la propia universidad para vender el proyecto. Finalmente, en 1998 y tras una charla informal de 10 minutos con Andy Bechtolsheim (coofundador de Sun Microsystems y vicepresidente de Cysco Systems), éste les extiende un cheque por valor de 100.000 dólares para que paguen “sus discos duros y a los dichosos abogados, para los temas legales” (sic) [16]. Para poder hacer efectivo el cobro se ven obligados a fundar sobre la marcha Google Inc., ya que fue el nombre que escribió Bechtolsheim en el cheque.
Desde entonces, Google no ha parado de indexar páginas y se convirtió de forma gradual en el buscador consultado por la abrumadora mayoría de los usuarios de Internet. Larry Page y Sergi Brian no invirtieron ni un solo dólar en publicidad: el boca a boca y sus resultados fueron suficientes para darlo a conocer al mundo. Actualmente, tiene una media de 200 millones de consultas al día.
En 2008, Google Inc. recibió el Premio Príncipe de Asturias de Comunicación y Humanidades, por "favorecer el acceso generalizado al conocimiento" y su "contribución decisiva al progreso de los pueblos, por encima de fronteras ideológicas, económicas, lingüísticas o raciales”.

2.4.2 Otros productos de Google Inc.

Sin lugar a dudas, el producto estrella de Google Inc. es su potente buscador web. Hoy en día el uso de Internet sería muy diferente sin la posibilidad de realizar búsquedas con la precisión y rapidez que Google puede ofrecer.
Sin embargo, tras el espectacular crecimiento de Google y su primer servicio comercial, AdWords (que permitía asociar publicidad a determinadas búsquedas), Google Inc. no ha dejado de innovar. En pocos años ha ido creando nuevos servicios que, en la mayoría de los casos, han adquirido tal popularidad entre la gente, que para mucho usuarios sería difícil imaginar el uso cotidiano de Internet si no existieran. En todo ellos, Google Inc. parece querer imprimir la misma filosofía de empresa: un servicio web, de acceso libre, gratuito en su mayor parte, con una interfaz minimalista pero funcional, y orientado siempre a mejorar la experiencia del usuario y a la interconexión con otros servicios en red.
Entre los productos más populares a través de la Web que actualmente ofrece Google, podemos encontrar los siguientes:

- Gmail
Probablemente, el servicio más utilizado de Google Inc. junto con su buscador. Gmail es un completo servicio de correo electrónico lanzado en 2004, que pronto destacó por la gran capacidad de almacenamiento (actualmente más de 7 GB), tamaño de archivos adjuntos, facilidad para realizar búsquedas entre el historial, su formato de etiquetado y clasificación de mensajes, configuración de idiomas y la sencilla interfaz que ofrecía. Actualmente, se encuentra aún en versión beta e incorpora continuas mejoras, como el popular chat entre contactos con Gmail Chat.

- Google Maps
Google Maps es un servicio de localización a través de la Web, que ofrece una vista aérea de casi cualquier lugar del mundo. Mediante este servicio, el usuario puede cambiar entre el punto de vista de una fotografía real de satélite o el de mapa. Además, permite navegar libremente por el plano, alejando y acercando la imagen hasta un nivel de precisión considerable. Ofrece también un servicio de mejor ruta entre dos puntos y de localización exacta mediante la introducción de una dirección cualquiera del globo. Recientemente ha sido mejorado con Google Street View, que añade una nueva perspectiva panorámica de 360o desde pie de calle.

- Google Calendar
Google Calendar es un servicio web que ofrece una completa agenda y planificación de horarios. Cada usuario dispone de calendarios mensuales o semanales, diferenciados por colores según la actividad, con la posibilidad de detallar cada día de la semana y de programar alertas dirigidas a un teléfono móvil o un correo electrónico. Los usuarios pueden compartir entre sí calendarios y actividades.

- Google Documents
Representa uno de los proyectos más ambiciosos que actualmente desarrolla Google Inc. El objetivo es crear una completa plataforma de herramientas ofimáticas utilizando únicamente la Web, sin necesidad de instalar ningún software. Pensado para poder competir algún día con el extendido Microsoft Office, Google Documents contempla actualmente un procesador de texto, hojas de cálculo y presentaciones.

- Google Chrome
Google Chrome es el navegador web desarrollado por Goolge Inc. Es un proyecto de software libre y está basado en componentes de otros navegadores de código abierto, como WebKit y Mozilla. Su principal objetivo es ofrecer una navegación más rápida, estable y segura, sumado a una interfaz simple y eficiente. La versión beta de Google Chrome fue lanzada en septiembre de 2008 y aunque recibió una buena acogida, todavía presentaba algunas limitaciones que no le permiten competir directamente con Explorer de Microsoft o con Mozilla Firefox.

- Youtube
Aunque no es un producto desarrollado por Google Inc., fue adquirido por éste en 2006. Youtube es un sitio web que permite a los usuarios subir y visualizar toda clase de vídeos. Además, los vídeos pueden recibir comentarios, votaciones, y los usuarios pueden crear sus propios canales de distribución. Su popularidad es tan grande que actualmente está entre las páginas más visitadas de todo Internet y se ha convertido en un auténtico fenómeno sociológico. Recientemente, ha debido suprimir gran parte de sus contenidos debido a la vulneración de los derechos de autor.

- Picasa
Picasa es otra platafoma software no creada inicialmente por Google Inc., pero sí adquiridad en 2004. Este software permite organizar, editar y buscar las fotografías de un usuario. También se encuentra en desarrollo una nueva funcionalidad que permita reconocer imágenes para poder asociarlas a determinadas palabras o claves de búsqueda. A diferencia de otros servicios, Picasa sí necesita ser instalado en el equipo del usuario, aunque tiene algunas funcionalidades web.

- Blogger
Adquirido por Google Inc. en 2003, Blogger es actualmente uno de los portales de blogs más populares en todo el mundo. Su facilidad de uso permite al usuario registrarse, crear un blog e introducir nuevas entradas en tan sólo unos pequeños pasos.

2.4.3 Críticas a Google Inc.

A lo largo de su corta pero fulgurante trayectoria, Google Inc. ha ido cosechando numerosos éxitos que la han convertido en la empresa de referencia dentro de las tecnologías de Internet. Para muchos, Google Inc. es esa empresa cuyos directivos visten vaqueros y camiseta, apenas rondan los 35 años y convierten en oro todo lo que tocan, generando grandes beneficios. Sin embargo, en los últimos años se han empezado a oír voces que critican algunos de sus comportamientos, y que cuestionan su popular eslogan “Don’t be evil” (“No seas malvado”).
Quizás el más sonado y que peor repercusión tuvo para la imagen de Google Inc. fue su incursión en China [19]. Para que el gobierno chino permitiera operar a la compañía en su territorio, Google Inc. se vio obligado a aceptar y colaborar con las férreas normas de censura de aquel país, bloqueando el acceso a multitud de páginas y servicios que eran considerados maliciosos para el pueblo chino o contrarios a los intereses de su régimen político.
Por otro lado, el nacimiento de Gmail no estuvo tampoco exento de críticas. El hecho de que los robots de la compañía recorriesen los mensajes de los usuarios en busca de palabras a las que asociar anuncios de publicidad, o las condiciones de uso que advertían del mantenimiento de mensajes aún después de haber sido borrados, puso en alerta a muchas asociaciones de consumidores que acusaban a Google Inc. de vulnerar la intimidad de las personas.
Además, Google Inc. ha recibido acusaciones de atentar contra la propiedad intelectual. En 2008 fue finalmente absuelto por reproducir en los resultados de sus búsquedas parte de los contenidos de algunas páginas web [21], mientras que ese mismo año fue requerido judicialmente a proporcionar los datos de los usuarios de Youtube al gigante mediático Viacom, para que así éste pudiera presentar una demanda por utilizar parte de sus producciones sin autorización.