El gran libro de Android - Jesús Tomás Gironés - E-Book

El gran libro de Android E-Book

Jesús Tomás Gironés

0,0

Beschreibung

Android es la plataforma libre para el desarrollo de aplicaciones móviles creada por Google. En la actualidad se ha convertido en la plataforma líder frente a otras como iPhone o Windows Phone. Las aplicaciones Android están ampliando su rango de influencia a nuevos dispositivos, tales como tabletas, sistemas empotrados, Google Glass o Wearable. Este libro pretende ser una guía para aquellos lectores que quieran introducirse en la programación en Android. Todos los capítulos son descritos por medio de sencillos ejemplos, aumentando su nivel de complejidad a medida que avanzan los capítulos. La obra está recomendada tanto para usuarios con poca experiencia como para programadores experimentados. A lo largo del libro se desarrollan dos aplicaciones de ejemplo: el mítico videojuego Asteroides y una aplicación de gestión de información personal, Mis Lugares*. Se comienza con una versión sencilla, que se irá completando capítulo a capítulo, para que incluya: fragmentos*, gráficos vectoriales y en mapa de bits, control mediante pantalla táctil y sensores, hilos con AsyncTask*, notificaciones, geo-localización*, mapas, multimedia, ficheros, XML, SQL, acceso a Internet, servicios Web, acceso a bases de datos en servidor PHP + MySQL* Así cómo publicar en Google Play y añadir anuncios*. El libro propone un aprendizaje activo, con actividades, muchas a través de Internet: Vídeo[Tutorial]: Más de 80 videos elaborados por el autor. Ejercicio paso a paso: La mejor forma de aprender es practicando. Práctica: Para afianzar lo aprendido hay que practicar. Comprar, instalar y utilizar aplicaciones de la App Store.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 576

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



El gran libro de Android

Jesús Tomás Gironés

El gran libro de Android

Cuarta edición, 2015

© 2015 Jesús Tomás Gironés

© MARCOMBO, S.A. 2015

Gran Vía de les Corts Catalanes, 594

08007 Barcelona

www.marcombo.com

Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra solo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra.

Para Bea, con amor y gratitud.

Mis agradecimientos a Carsten Vogtpor su gran trabajo en la revisión de este libro y a todos los alumnos y lectores que con sus sugerencias y correcciones han ayudado a mejorarlo.

Índice general

Lista de siglas y acrónimos

¿Cómo leer este libro?

CAPÍTULO 1.Visión general y entorno de desarrollo

1.1.¿Qué hace que Android sea especial?

1.2.Los orígenes

1.3.Comparativa con otras plataformas

1.4.Arquitectura de Android

1.4.1.El núcleo Linux

1.4.2.Runtimede Android

1.4.3.Librerías nativas

1.4.4.Entorno de aplicación

1.4.5.Aplicaciones

1.5.Instalación del entorno de desarrollo

1.5.1.Instalación de la máquina virtual Java

1.5.2.Instalación de ADT Bundle

1.5.3.Instalación de Android Studio

1.5.4.Instalación de los componentes por separado

1.5.5.Creación de un dispositivo virtual Android (AVD)

1.6.Las versiones de Android y niveles de API

1.6.1.Las primeras versiones

1.6.2.Cupcake

1.6.3.Donut

1.6.4.Éclair

1.6.5.Froyo

1.6.6.Gingerbread

1.6.7.Honeycomb

1.6.8.Ice Cream Sandwich

1.6.9.Jelly Bean

1.6.10.KitKat

1.6.11.Android L Preview

1.6.12.Elección de la plataforma de desarrollo

1.6.13.Las librerías de compatibilidad (support library)

1.7.Creación de un primer programa

1.8.Ejecución del programa

1.8.1.Ejecución en el emulador

1.8.2.Ejecución en un terminal real

1.9.Ficheros y carpetas de un proyecto Android

1.10.Componentes de una aplicación

1.10.1.Vista (View)

1.10.2.Layout

1.10.3.Actividad (Activity)

1.10.4.Servicio (Service)

1.10.5.Intención (Intent)

1.10.6.Fragment

1.10.7.Receptor de anuncios(Broadcast Receiver)

1.10.8.Proveedores de contenido (Content Provider)

1.11.Documentación y ApiDemos

1.11.1.Dónde encontrar documentación

1.11.2.La aplicación ApiDemos

1.12.Depurar

1.12.1.Depurar con Eclipse

1.12.2.Depurar con mensajes Log

1.13.Repaso de Java y la aplicación Mis Lugares

1.13.1.La clase Lugar

1.13.2.Tipos enumerados en Java

1.13.3.Las colecciones en Java

CAPÍTULO 2.Diseño de la interfaz de usuario: vistas ylayouts

2.1.Creación de una interfaz de usuario por código

2.2.Creación de una interfaz de usuario usando XML

2.2.1.Edición visual de las vistas

2.2.2.Los atributos de las vistas

2.3.Layouts

2.4.Una aplicación de ejemplo: Asteroides

2.5.La aplicación: Mis Lugares

2.6.Recursos alternativos

2.7.Tipos de recursos y recursos del sistema

2.7.1.Tipos de recursos

2.7.2.Acceso a los recursos

2.7.3.Recursos del sistema

2.8.Estilos y temas

2.8.1.Los estilos

Heredar de un estilo propio

2.8.2.Los temas

2.9.Uso práctico de vistas ylayouts

2.9.1.Acceder y modificar las propiedades de las vistas por código

2.10.Uso detabs(pestañas)

CAPÍTULO 3.Actividades e intenciones

3.1.Creación de nuevas actividades

3.2.Comunicación entre actividades

3.3.Añadiendo un menú a una actividad

3.4.La barra de acciones (ActionBar)

3.5.Creando actividades en Mis Lugares

3.5.1.Creando la actividad VistaLugar de Mis Lugares

3.5.2.Creando la actividad EdicionLugar de Mis Lugares

3.6.Creación y uso de iconos

3.7.Añadiendo preferencias de usuario

3.7.1.Organizando preferencias

3.7.2.Cómo se almacenan las preferencias de usuario

3.7.3.Accediendo a los valores de las preferencias

3.8.Añadiendo una lista de puntaciones en Asteroides

3.9.La vista ListView

3.9.1.Un ListView que visualiza una lista destrings

3.9.2.Un ListView que visualizalayoutspersonalizados

3.9.3.Un ListView con nuestro propio adaptador

3.9.4.Detectar una pulsación sobre un elemento de la lista

3.10.Las intenciones

3.10.1.Añadiendo fotografías en Mis Lugares

3.10.2.La etiqueta <intent-filter>

CAPÍTULO 4.Gráficos en Android

4.1.Clases para gráficos en Android

4.1.1.Canvas

4.1.2.Paint

Definición de colores

4.1.3.Path

4.1.4.Drawable

BitmapDrawable

GradientDrawable

TransitionDrawable

ShapeDrawable

AnimationDrawable

4.2.Creación de una vista en un fichero independiente

4.3.Creando la actividad principal de Asteroides

4.3.1.La clase Gráfico

4.3.2.La clase VistaJuego

4.3.3.Introduciendo la nave en VistaJuego

4.4.Representación de gráficos vectoriales en Asteroides

4.5.Animaciones

4.5.1.Animaciones de vistas

4.5.2.Animaciones de propiedades

CAPÍTULO 5.Hilos de ejecución, pantalla táctil y sensores

5.1.Uso de hilos de ejecución (threads)

5.1.1.Introducción a los procesos e hilos de ejecución

5.1.2.Hilos de ejecución en Android

5.1.3.Creación de nuevos hilos con la clase Thread

5.1.4.Introduciendo movimiento en Asteroides

5.1.5.Ejecutar una tarea en un nuevo hilo con AsyncTask

5.1.6.Mostrar un cuadro de progreso en un AsyncTask

5.1.7.El métodoget()de AsyncTask

5.2.Manejando eventos de usuario

5.2.1.Escuchador de eventos de la clase View

5.2.2.Manejadores de eventos

5.3.El teclado

5.4.La pantalla táctil

5.4.1.Manejo de la pantalla táctilmulti-touch

5.4.2.Manejo de la nave con la pantalla táctil

5.5.Gestures

5.5.1.Creación y uso de una librería degestures

5.5.2.Añadiendogesturesa Asteroides

5.6.Los sensores

5.6.1.Un programa que muestra los sensores disponiblesy sus valores en tiempo real

5.6.2.Utilización de los sensores en Asteroides

5.7.Introduciendo un misil en Asteroides

CAPÍTULO 6.Multimedia y ciclo de vida de una actividad

6.1.Ciclo de vida de una actividad

6.1.1.¿Qué proceso se elimina?

6.1.2.Guardando el estado de una actividad

6.2.Utilizando multimedia en Android

6.3.La vistaVideoView

6.4.La clase MediaPlayer

6.4.1.Reproducción de audio con MediaPlayer

6.5.Un reproductor multimedia paso a paso

6.6.Introduciendo efectos de audio con SoundPool

6.7.Grabación de audio

CAPÍTULO 7.Seguridad y posicionamiento

7.1.Los tres pilares de la seguridad en Android

7.1.1.Usuario Linux y acceso a ficheros

7.1.2.El esquema de permisos en Android

7.1.3.Permisos definidos por el programador en Android

7.2.Localización

7.2.1.Sistemas de geolocalización en dispositivos móviles

7.2.2.La API de localización de Android

7.2.3.Emulación del GPS con Eclipse

7.2.4.Estrategias para escoger un proveedor de localización

7.3.Google Maps (API v2)

7.3.1.Obtención de una clave Google Maps

7.4.Fragmentando los asteroides

CAPÍTULO 8.Servicios, notificaciones y receptores de anuncios

8.1.Introducción a los servicios en Android

8.1.1.Ciclo de vida de un servicio

8.1.2.Permisos

8.2.Un servicio para ejecución en segundo plano

8.2.1.El método onStartCommand()

8.3.Las notificaciones de la barra de estado

8.3.1.Configurando tipos de avisos en las notificaciones

Asociar un sonido

Añadiendo vibración

Añadiendo parpadeo de LED

8.4.Receptores de anuncios

8.4.1.Receptor de anuncios registrado enAndroidManifest.xml

8.4.2.Arrancar una actividad en una nueva tareadesde un receptor de anuncio

8.4.3.Arrancar un servicio tras cargar el sistema operativo

8.5.Un servicio en un nuevo hilo con IntentService

8.5.1.La clase IntentService

8.6.Un receptor de anuncios como mecanismo de comunicación

8.7.Un servicio como mecanismo de comunicación entre aplicaciones

8.7.1.Crear la interfaz en AIDL

8.7.2.Implementar la interfaz

8.7.3.Publicar la interfaz en un servicio

8.7.4.Llamar a una interfaz remota

CAPÍTULO 9.Almacenamiento de datos

9.1.Alternativas para guardar datos permanentemente en Android

9.2.Añadiendo puntuaciones en Asteroides

9.3.Preferencias

9.4.Accediendo a ficheros

9.4.1.Sistema interno de ficheros

9.4.2.Sistema de almacenamiento externo

Verificando acceso a la memoria externa

Almacenando ficheros específicos de tu aplicaciónen el almacenamiento externo

Almacenando ficheros compartidos en el almacenamiento externo

9.4.3.Acceder a un fichero de los recursos

9.5.Trabajando con XML

9.5.1.Procesando XML con SAX

9.5.2.Procesando XML con DOM

9.6.Bases de datos

9.6.1.Los métodosquery()yrawQuery()

9.6.2.El métodoonUpgradede la clase SQLiteOpenHelper

9.6.3.Uso de bases de datos en Mis Lugares

9.6.4.Adaptadores para bases de datos

Operaciones con bases de datos en Mis Lugares

Loaders y LoaderManager

9.6.5.Bases de datos relacionales

9.7.Content Provider

9.7.1.Conceptos básicos

El modelo de datos

Las URI

9.7.2.Acceder a la información de un ContentProvider

Leer información de un ContentProvider

Escribir información en un ContentProvider

Borrar y modificar elementos de un ContentProvider

9.7.3.Creación de un ContentProvider

Definir la estructura de almacenamiento del ContentProvider

Extendiendo la clase ContentProvider

Declarar el ContentProvider enAndroidManifest.xml

9.7.4.Acceso a PuntuacionesProvider desde Asteroides

CAPÍTULO 10.Internet:sockets, HTTP y servicios web

10.1.Comunicaciones en Internet mediantesockets

10.1.1.La arquitectura cliente/servidor

10.1.2.¿Qué es unsocket?

Socketsstream(TCP)

Socketsdatagram(UDP)

10.1.3.Un ejemplo de un cliente/servidor de ECHO

10.1.4.Un servidor porsocketspara las puntuaciones

10.2.La web y el protocolo HTTP

10.2.1.El protocolo HTTP

10.2.2.Versión 1.0 del protocolo HTTP

10.2.3.Utilizando HTTP desde Android

10.2.4.Uso de HTTP con AsyncTask

10.3.Servicios web

10.3.1.Alternativas en los servicios web

Servicios web basados en SOAP

Servicios web basados en REST

10.3.2.Acceso a servicios web de terceros

10.3.3.Creación de un servicio web con Axis2

Instalación del servidor de servicios web

Implementación del servicio web desde Eclipse

Explorando el servicio web desde Eclipse

Explorando el servicio web desde HTML

Utilizando el servicio web Axis2 desde Asteroides

10.3.4.Un servicio web con Apache, PHP y MySQL

Utilizando el servicio web PHP desde Asteroides

Creación de un servicio web en un servidor dehosting

Utilizando AsyncTask de forma síncrona

10.3.5.Comparativasockets/ servicios web

CAPÍTULO 11.Publicar aplicaciones

11.1.Preparar y testear tu aplicación

11.1.1.Preparar la aplicación para distintos tipos de dispositivo

11.1.2.Testear la aplicación

11.2.Crear un certificado digital y firmar la aplicación

11.3.Publicar la aplicación

11.3.1.Publicar en Internet

11.3.2.Publicar en Google Play Store

11.4.Añadiendo publicidad en tu aplicación con AdMob

11.5.Asteroides: mostrar victoria y derrota

ANEXO A.Fragments

ANEXO B.Diálogos de fecha y hora

Clases para trabajar con fechas en Java

ANEXO C.Referencia Java

ANEXO D.Referencia de la clase View y sus descendientes

ANEXO E.Sufijos utilizados en recursos alternativos

Lista de siglas y acrónimos

AIDL

Android Interface Definition Language

API

Application Programming Interface

AVD

Android Virtual Device

ART

Android RunTime

CSS

Cascading Style Sheets

CORBA

Common Object Request Broker Architecture

CPU

Central Processing Unit

DOM

Document Object Model

DTD

Document Type Definition

FTP

File Transfer Protocol

GPU

Graphic Processing Unit

GPS

Global Positioning System

GSM

Global System for Mobile communications

HTML

HyperText Markup Language

HTTP

HyperText Transfer Protocol

IDE

Integrated Development Environment

IMEI

International Mobile Equipment Identity

IMSI

International Mobile Subscriber Identity

IU

Interfaz de usuario

JAR

Java ARchive

JDK

Java Development Kit

JRE

Java Runtime Environment

JSON

JavaScript Object Notation

JVM

Java Virtual Machine

MCC

Mobile Country Code

MNC

Mobile Network Code

MIME

Multipurpose Internet Mail Extensions

MTP

Media Transfer Protocol

NFC

Near Field Communication

NDK

Native Development Kit

OpenGL

Open Graphic Library

PCM

Pulse-Code Modulation

PDA

Personal Digital Assistant

PNG

Portable Network Graphics

PHP

Hypertext Pre-processor

PTP

Picture Transfer Protocol

RAM

Random Access Memory

REST

Representational State Transfer

RMI

Remote Method Invocation

RPC

Remote Procedure Calls

SAX

Simple API for XML

SD

Secure Digital

SDK

Software Developers Kit

SMS

Short Message Service

SIM

Subscriber Identity Module

SO

Sistema operativo

SOA

Service-Oriented Architecture

SOAP

Simple Object Access Protocol

SQL

Structured Query Language

TCP

Transmission Control Protocol

UI

User Interface

URL

Universal Resource Locator

URI

Uniform Resource Identifier

USB

Universal Serial Bus

UTC

Universal Time Coordinate

W3C

World Wide Web Consortium

WSDL

Web Services Description Language

WWW

World Wide Web

XML

Extensible Markup Language

¿Cómo leer este libro?

Este libro quiere ser una guía para aquellos lectores que pretendan introducirse en la programación de Android. Se ha estructurado en 11 capítulos que abordan aspectos específicos del desarrollo de aplicaciones. Resulta conveniente realizar una lectura secuencial de estos capítulos, dado que muchos de los conceptos que se abordan se comprenderán mejor si se han leído los capítulos anteriores. Además, a lo largo del libro se desarrollan dos proyectos de ejemplo: el mítico juego Asteroides y la aplicación Mis Lugares. Para que muchos de los ejercicios funcionen correctamente, resulta imprescindible realizar los anteriores.

El libro que tienes entre las manos no ha sido concebido solo para ser leído. Es más bien una guía estructurada que te irá proponiendo una serie de ejercicios, actividades, vídeos explicativos, test de autoevaluación, etc. Todo este material y muchos más recursos adicionales están disponibles en la webwww.androidcurso.com. En ella se publicarán las novedades, erratas e información complementaria relativas a este libro. Por lo tanto, resulta imprescindible para sacarle partido a este libro un ordenador con el SDK de Android instalado para hacer los ejercicios y acceso a Internet para el material en línea.

A lo largo del libro se utilizan los siguientes iconos para indicar los tipos de actividades:

Objetivos:Antes de empezar cada capítulo, lee con detenimiento la introducción y los objetivos.

Vídeo[tutorial]:Más de 80 vídeos grabados por el autor del libro donde se exponen de forma didáctica los aspectos clave del sistema Android. Se utiliza una moderna herramienta desarrollada en la Universidad Politécnica de Valencia que te permitirá ver simultáneamente las presentaciones y al profesor mientras se desarrollan los conceptos de cada capítulo.

Ejercicio:La mejor forma de aprender es haciendo. No tendrás más que ir siguiendo los pasos uno tras otro para descubrir cómo se resuelve el ejercicio propuesto. Para que no se te haga pesado teclear todo el código, te proponemos que lo copies y pegues desde la página web del curso.

Práctica:Este será el momento de que tomes la iniciativa y trates de resolver el problema que se propone. Recuerda que para aprender hay que practicar.

Asteroides:Ejercicios y prácticas que te permitirán desarrollar el videojuego Asteroides.

Mis Lugares:Ejercicios y prácticas que te permitirán desarrollar la aplicación Mis Lugares.

Solución:Te será de ayuda si tienes problemas al resolver una práctica, o si simplemente quieres comparar tu solución con otra diferente.

Nota sobre Java:Si no dominas el lenguaje de programación Java, podrás seguir este libro. Cada vez que aparezca algún concepto complejo sobre Java trataremos de aclararlo.NOTA:Sí que resulta imprescindible disponer de conocimientos sobre programación.

Recursos adicionales:Te proporcionamos la información clave que te ayudará en el desarrollo de tus aplicaciones.

Enlaces de interés:Internet te será de gran ayuda para completar la información necesaria para programar en Android. Te proponemos las páginas más interesantes de cada apartado.

Preguntas de repaso:¿Has comprendido correctamente los aspectos clave? Sal de dudas haciendo los test de autoevaluación.

Referencias rápidas:Utiliza los anexos para localizar rápidamente esa palabra clave o esa clase que no recuerdas.

De forma adicional, en la webwww.androidcurso.comencontrarás:

•Tutoriales sobre Java:¿sabes lo que es la herencia, el polimorfismo o la sobrecarga en Java? Si no dominas el lenguaje de programación Java, te recomendamos que realices alguno de los tutoriales propuestos.

•Código abierto de proyectos Android:muchos alumnos que han realizado un curso basado en este libro han tenido la generosidad de compartir sus proyectos con todos nosotros. Te recomendamos que consultes la lista de proyectos disponibles de código abierto: puedes aprender mucho estudiando su código. Cuando termines de leer este libro, también tú podrás hacer un proyecto como los que se muestran.

•Material adicional sobre Android:encontrarás, además, nuevos tutoriales, vídeos, referencias, etc., no incluidos en el libro.

•Cursosonline:si te interesa ampliar tu formación, puedes matricularte en cursos sobre Android impartidos por la Universidad Politécnica de Valencia. Incluso puedes obtener un título de especialización o de máster de forma 100%online.

CAPÍTULO 1.Visión general y entorno de desarrollo

La telefonía móvil está cambiando la sociedad actual de una forma tan significativa como lo ha hecho Internet. Esta revolución no ha hecho más que empezar; los nuevos terminales ofrecen unas capacidades similares a un ordenador personal, lo que permite que puedan ser utilizados para leer el correo o navegar por Internet. Pero, a diferencia de un ordenador, un teléfono móvil siempre está en el bolsillo del usuario. Esto permite un nuevo abanico de aplicaciones mucho más cercanas al usuario. De hecho, muchos autores coinciden en afirmar que el nuevo ordenador personal del sigloXXIserá un terminal móvil.

El lanzamiento de Android como nueva plataforma para el desarrollo de aplicaciones móviles ha causado una gran expectación y está teniendo una importante aceptación tanto por parte de los usuarios como por parte de la industria. En la actualidad se está convirtiendo en la alternativa dominante frente a otras plataformas como iPhone, Windows Phone o BlackBerry.

A lo largo de este capítulo veremos las características de Android que lo hacen diferente de sus competidores. Se explicará también cómo instalar y trabajar con el entorno de desarrollo (Eclipse + Android SDK).

Objetivos:

•Conocer las características de Android, destacando los aspectos que lo hacen diferente de sus competidores.

•Estudiar la arquitectura interna de Android.

•Aprender a instalar y trabajar con el entorno de desarrollo (Eclipse + Android SDK).

•Enumerar las principales versiones de Android y aprender a elegir la más idónea para desarrollar nuestras aplicaciones.

•Crear una primera aplicación y estudiar su estructura de un proyecto en Android.

•Conocer dónde podemos conseguir documentación sobre Android.

•Aprender a utilizar herramientas para detectar errores en el código.

1.1. ¿Qué hace que Android sea especial?

Como hemos comentado, existen muchas plataformas para móviles (Apple iOS, Windows Phone, BlackBerry, Palm, Java Micro Edition, Linux Mobile (LiMo), etc.); sin embargo, Android presenta una serie de características que lo hacen diferente. Es el primero que combina en una misma solución las siguientes cualidades:

•Plataforma realmente abierta.Es una plataforma de desarrollo libre basada en Linux y de código abierto. Una de sus grandes ventajas es que se puede usar y customizar el sistema sin pagarroyalties.

•Adaptable a cualquier tipo dehardware.Android no ha sido diseñado exclusivamente para su uso en teléfonos y tabletas. Hoy en día podemos encontrar relojes, gafas, cámaras, TV, sistema para automóviles, electrodomésticos y una gran variedad de sistemas empotrados que se basan en este sistema operativo, lo cual tiene sus evidentes ventajas, pero también va a suponer un esfuerzo adicional para el programador. La aplicación ha de funcionar correctamente en dispositivos con una gran variedad de tipos de entrada, pantalla, memoria, etc. Esta característica contrasta con la estrategia de Apple: en iOS tenemos que desarrollar una aplicación para iPhone y otra diferente para iPad.

•Portabilidad asegurada.Las aplicaciones finales son desarrolladas en Java, lo que nos asegura que podrán ser ejecutadas en cualquier tipo de CPU, tanto presente como futuro. Esto se consigue gracias al concepto de máquina virtual.

•Arquitectura basada en componentes inspirados en Internet.Por ejemplo, el diseño de la interfaz de usuario se hace en XML, lo que permiteque una misma aplicación se ejecute en un móvil de pantalla reducida o en un televisor.

•Filosofía de dispositivo siempre conectado a Internet.Muchas aplicaciones solo funcionan si disponemos de una conexión permanente a Internet. Por ejemplo, comunicaciones interpersonales o navegación con mapas.

•Gran cantidad de servicios incorporados.Por ejemplo, localización basada tanto en GPS como en redes, bases de datos con SQL, reconocimiento y síntesis de voz, navegador, multimedia, etc.

•Aceptable nivel de seguridad.Los programas se encuentran aislados unos de otros gracias al concepto de ejecución dentro de una caja, que hereda de Linux. Además, cada aplicación dispone de una serie de permisos que limitan su rango de actuación (servicios de localización, acceso a Internet, etc.).

•Optimizado para baja potencia y poca memoria.En el diseño de Android se ha tenido en cuenta elhardwareespecífico de los dispositivos móviles. Por ejemplo, Android utiliza la máquina virtual Dalvik. Se trata de una implementación de Google de la máquina virtual Java optimizada para dispositivos móviles.

•Alta calidad de gráficos y sonido.Gráficos vectoriales suavizados, animaciones, gráficos en 3D basados en OpenGL. Incorpora los códecs estándares más comunes de audio y vídeo, incluyendo H.264 (AVC), MP3, AAC, etc.

Como hemos visto, Android combina características muy interesantes. No obstante, la pregunta del millón es: ¿se convertirá Android en el sistema operativo (SO) estándar para dispositivos móviles? Para contestar a esta pregunta habrá que ver la evolución del iPhone de Apple y cuál es la respuesta de Windows con el lanzamiento de su nuevo SO para móviles. No obstante, Android ha alcanzado un 80% de cuota de mercado (90% en España), cosa que lo deja en una posición predominante que es difícil que pierda a corto plazo.

En conclusión, Android nos ofrece una forma sencilla y novedosa de implementar potentes aplicaciones para diferentes tipos de dispositivos. A lo largo de este texto trataremos de mostrar de la forma más sencilla posible cómo conseguirlo.

1.2. Los orígenes

Google adquiere Android Inc. en el año 2005. Se trataba de una pequeña compañía, recién creada, orientada a la producción de aplicaciones para terminales móviles. Ese mismo año empiezan a trabajar en la creación de una máquina virtual Java optimizada para móviles (Dalvik VM).

En el año 2007 se crea el consorcio Open Handset Alliance11con el objetivo de desarrollar estándares abiertos para móviles. Está formado por Google, Intel, Texas Instruments, Motorola, T-Mobile, Samsung, Ericsson, Toshiba, Vodafone, NTT DoCoMo, Sprint Nextel y otros. Uno de los objetivos fundamentales de esta alianza es promover el diseño y la difusión de la plataforma Android. Sus miembros se han comprometido a publicar una parte importante de su propiedad intelectual como código abierto bajo licencia Apache v2.0.

En noviembre de 2007 se lanza una primera versión del Android SDK. Al año siguiente aparece el primer móvil con Android (T-Mobile G1). En octubre, Google libera el código fuente de Android, principalmente bajo licencia de código abierto Apache (licencia GPL v2 para el núcleo). Ese mismo mes se abre Android Market, para la descarga de aplicaciones. En abril de 2009, Google lanza la versión 1.5 del SDK, que incorpora nuevas característica como el teclado en pantalla. A finales de 2009 se lanza la versión 2.0 y a lo largo de 2010, las versiones 2.1, 2.2 y 2.3.

Durante el año 2010, Android se consolida como uno de los sistemas operativos para móviles más utilizados, con resultados cercanos a iOS e incluso superando al sistema de Apple en EE.UU.

En el año 2011 se lanzan la versión 3.0, 3.1 y 3.2, específicas para tabletas, y la 4.0, tanto para móviles como para tabletas. Durante ese año, Android se consolida como la plataforma para móviles más importante y alcanza una cuota de mercado superior al 50%.

En 2012, Google cambia su estrategia en su tienda de descargasonline, reemplazando Android Market por Google Play Store, donde en un solo portal unifica tanto la descarga de aplicaciones como la de contenidos. Ese año aparecen las versiones 4.1 y 4.2 del SDK. Android mantiene su espectacular crecimiento y alcanza, a finales de año, una cuota de mercado del 70%.

En 2013 se lanzan las versiones 4.3 y 4.4 (KitKat). A finales de ese año, la cuota de mercado de Android llega al 80% (en España, al 90%). En 2014 se lanza elpreviewde la versión Android L.

Vídeo

[

tutorial

]

:

Introducción a la plataforma Android

Preguntas de repaso:

Características y orígenes de Android

1.3. Comparativa con otras plataformas

En este apartado vamos a describir las características de las principales plataformas móviles disponibles en la actualidad. Dado la gran cantidad de datos que se indican, hemos utilizado una tabla para representar la información. De esta forma resulta más sencillo comparar las plataformas.

Tabla 1:Comparativa de las principales plataformas móviles.

Otro aspecto fundamental a la hora de comparar las plataformas móviles es su cuota de mercado. En la siguiente gráfica podemos ver un estudio realizado por la empresa Gartner Group, donde se muestra la evolución del mercado de los sistemas operativos para móviles según el número de terminales vendidos. Podemos destacar la desaparición de la plataforma Symbian de Nokia, el declive continuo de BlackBerry, el estancamiento de la plataforma de Windows, que parece que no despega, y el afianzamiento de la cuota de mercado de Apple en torno al 20%. Finalmente, cabe señalar el espectacular ascenso de la plataforma Android, que en cuatro años ha alcanzado una cuota de mercado en torno al 80%.

Figura 1:Porcentaje de teléfonos inteligentes vendidos en todo el mundo hasta el último trimestre de 2013, según su sistema operativo (fuente: Gartner Group).

Vídeo

[

tutorial

]

:

Comparativa de las plataformas para móviles

Preguntas de repaso:

Plataformas para móviles

1.4. Arquitectura de Android

El siguiente gráfico muestra la arquitectura de Android. Como se puede ver, está formada por cuatro capas. Una de las características más importantes es que todas las capas están basadas ensoftwarelibre.

Figura 2:Arquitectura de Android.

1.4.1. El núcleo Linux

El núcleo de Android está formado por el sistema operativo Linux, versión 2.6. Esta capa proporciona servicios como la seguridad, el manejo de la memoria, el multiproceso, la pila de protocolos y el soporte dedriverspara dispositivos.

Esta capa del modelo actúa como capa de abstracción entre elhardwarey el resto de la pila. Por lo tanto, es la única dependiente delhardware.

1.4.2.Runtimede Android

Está basado en el concepto de máquina virtual utilizado en Java. Dadas las limitaciones de los dispositivos donde ha de correr Android (poca memoria y procesador limitado), no fue posible utilizar una máquina virtual Java estándar. Google tomó la decisión de crear una nueva, la máquina virtual Dalvik, querespondiera mejor a estas limitaciones. A partir de Android L se utilizará la máquina virtual ART.

Entre las características de la máquina virtual Dalvik que facilitan esta optimización de recursos se encuentra la ejecución de ficheros Dalvik ejecutables (.dex) –formato optimizado para ahorrar memoria–. Además, está basada en registros. Cada aplicación corre en su propio proceso Linux con su propia instancia de la máquina virtual Dalvik. Delega al kernel de Linux algunas funciones comothreadingy el manejo de la memoria a bajo nivel.

También se incluye en elruntimede Android el módulo Core Libraries, con la mayoría de las librerías disponibles en el lenguaje Java.

1.4.3. Librerías nativas

Incluye un conjunto de librerías en C/C++ usadas en varios componentes de Android. Están compiladas en código nativo del procesador. Muchas de las librerías utilizan proyectos de código abierto. Algunas de estas librerías son:

•System C library:una derivación de la librería BSD de C estándar (libc), adaptada para dispositivos embebidos basados en Linux.

•Media Framework:librería basada en OpenCORE de PacketVideo. Soporta códecs de reproducción y grabación de multitud de formatos de audio y vídeo e imágenes MPEG4, H.264, MP3, AAC, AMR, JPG y PNG.

•Surface Manager:maneja el acceso al subsistema de representación gráfica en 2D y 3D.

•WebKit/Chromium:soporta el navegador web utilizado en Android y en la vistaWebView. En la versión 4.4, WebKit ha sido reemplazada por Chromium/Blink, que es la base del navegador Chrome de Google.

•SGL:motor de gráficos 2D.

•Librerías 3D:implementación basada en OpenGL ES 1.0 API. Las librerías utilizan el aceleradorhardware3D si está disponible, o elsoftwarealtamente optimizado de proyección 3D.

•FreeType:fuentes enbitmapy renderizado vectorial.

•SQLite:potente y ligero motor de bases de datos relacionales disponible para todas las aplicaciones.

•SSL:proporciona servicios de encriptaciónSecure Socket Layer(capa de conexión segura).

1.4.4. Entorno de aplicación

Proporciona una plataforma de desarrollo libre para aplicaciones con gran riqueza e innovaciones (sensores, localización, servicios, barra de notificaciones, etc.).

Esta capa ha sido diseñada para simplificar la reutilización de componentes. Las aplicaciones pueden publicar sus capacidades y otras pueden hacer uso deellas (sujetas a las restricciones de seguridad). Este mismo mecanismo permite a los usuarios reemplazar componentes.

Los servicios más importantes que incluye son:

•Views:extenso conjunto de vistas (parte visual de los componentes).

•Resource Manager:proporciona acceso a recursos que no son en código.

•Activity Manager:maneja el ciclo de vida de las aplicaciones y proporciona un sistema de navegación entre ellas.

•Notification Manager:permite a las aplicaciones mostrar alertas personalizadas en la barra de estado.

•Content Providers:mecanismo sencillo para acceder a datos de otras aplicaciones (como los contactos).

Una de las mayores fortalezas del entorno de aplicación de Android es que se aprovecha el lenguaje de programación Java. El SDK de Android no acaba de ofrecer para su estándar todo lo disponible del entorno de ejecución Java (JRE), pero es compatible con una fracción muy significativa de este.

1.4.5. Aplicaciones

Este nivel está formado por el conjunto de aplicaciones instaladas en una máquina Android. Todas las aplicaciones han de correr en la máquina virtual Dalvik para garantizar la seguridad del sistema.

Normalmente las aplicaciones Android están escritas en Java. Para desarrollar aplicaciones en Java podemos utilizar el Android SDK. Existe otra opción consistente en desarrollar las aplicaciones utilizando C/C++. Para esta opción podemos utilizar el Android NDK (Native Development Kit).

Vídeo

[

tutorial

]

:

La arquitectura de Android

Preguntas de repaso:

La arquitectura de Android

Enlaces de interés:Android, iOS, tiempos de respuestas y por qué nada es gratis en sistemas informáticos(Ricardo Galli). Interesante artículo que explica varios aspectos relacionados con el funcionamiento interno del sistema operativo Android.

http://gallir.wordpress.com/2011/12/07/android-ios-tiempos-de-respuestas-y-porque-nada-es-gratis-en-sistemas- informaticos/

1.5. Instalación del entorno de desarrollo

Google ha preparado el paquete desoftwareAndroid SDK, que incorpora todas las herramientas necesarias para el desarrollo de aplicaciones en Android. En él se incluye: conversor de código, depurador, librerías, emulador, documentación, ejemplos de código, etc. Todas estas herramientas son accesibles desde la línea de comandos.

No obstante, la mayoría de los desarrolladores prefieren utilizar un IDE (entorno de desarrollo integrado) que integre un editor de texto con todas las herramientas de desarrollo. Aunque no son las únicas posibilidades, las dos alternativas más recomendables son Eclipse e IntelliJ Idea. Dado que son frecuentes los problemas con el entorno de desarrollo, puede ser una buena idea instalar las dos y utilizar la que menos problemas nos dé. A continuación pasamos a describir varias alternativas para el proceso de instalación.

1.5.1. Instalación de la máquina virtual Java

Las aplicaciones Android están escritas en Java, por lo que necesitas instalar unsoftwarepara ejecutar código Java en tu equipo. Estesoftwarese conoce como máquina virtual Java, entorno de ejecución Java, Java Runtime Environment (JRE) o Java Virtual Machine (JVM).

Es muy posible que ya tengas instalada la máquina virtual Java en tu equipo. Si es así, puedes pasar directamente a uno de los apartados siguientes. En caso de dudas, puedes pasar también al punto siguiente. Al concluirlo te indicará si la versión de la máquina virtual Java es incorrecta. En caso necesario, regresa a este punto para instalar una adecuada.

Para instalar la máquina virtual Java accede ahttp://www.java.com/es/ download/y descarga e instala el fichero correspondiente a tu sistema operativo.

1.5.2. Instalación de ADT Bundle

Instalar los diferentes componentes del entorno de desarrollo por separado puede ser algo laborioso (se explica más adelante). Para ayudarnos en esta tarea, Google ha preparado ADT Bundle, un paquete que incluye los elementos para instalar de forma sencilla el IDE basado en Eclipse.

ADT (Android Development Toolkit) contiene:

•El entorno de desarrollo Eclipse con elplug-inADT.

•Android SDK y herramientas de plataforma.

•Las últimas versiones de la plataforma Android.

•Emulador Android.

El paquete viene en un fichero zip de gran tamaño, el cual puede descomprimirse directamente en un directorio y ya estará listo para ejecutarse.

Ejercicio:

Instalación de ADT Bundle

1.Accede a la páginahttp://developer.android.com/sdk/index.htmly pulsa enDownload the SDK ADT Bundle for Windowssi trabajas con Windows. Si trabajas con Linux o Mac OS, haz clic enDownload for other platformsy continua desde aquí.

2.Confirma que has leído los términos y las condiciones (realmente lo has hecho, ¿verdad?) y selecciona la plataforma adecuada: 32 bits o 64 bits (si tienes dudas, puedes ir a “Sistema” en el Panel de control de Windows). Luego haz clic enDownload the SDK ADT Bundle for Windows. Dependiendo de la velocidad de descarga, puedes tomar un café o ir a almorzar porque el archivo es muy grande.

3.Descomprime el archivo descargado en una carpeta de tu elección (por ejemplo,C:\Archivos de programa\). Puedes tomar otro café o dos durante el procedimiento de descompresión.

4.En la carpeta donde hayas descomprimido el archivo, ve aadt-bundle-windows-xxx\eclipse\y ejecutaeclipse.exe. Esto iniciará Eclipse con elplug-inAndroid ya instalado.

5.Si Java no está instalado en tu equipo, aparecerá el siguiente mensaje:

En este caso has de instalar Java primero (http://java.com/es/download/).

6.Eclipse te pedirá que especifiques la carpeta que se utilizará como espacio de trabajo. Esta carpeta almacena un grupo de proyectos creados con Eclipse. Asegúrate de recordar la ruta a esta carpeta del espacio de trabajo. Así podrás realizar copias de seguridad de tus proyectos.

NOTA:Puede ser una buena idea crear un espacio de trabajo exclusivo para los proyectos creados en este libro.

7.En el proceso de puesta en marcha, puede aparecer un mensaje que te pide actualizar las herramientas de SDK. Si es así, haz clic enOpen SDK manager. En la ventana del gestor de SDK aparecerán varios paquetes seleccionados. Haz clic enInstall x packages.

8.Acepta el contrato de licencia que aparece y comenzará la descarga. Ahora toma un par de cafés adicionales. Cuando haya finalizado la instalación, es conveniente repetir el proceso. Para ello cierraAndroid SDK Managery vuelve a abrirlo (menúWindow > Android SDK Managero botón). Es posible que se detecten más paquetes para descargar.

9.Además de los paquetes propuestos, puedes seleccionar otros adicionales; por ejemplo, Android 2.2, la versión mínima de Android necesaria para la mayoría de los ejemplos de este libro. También, Android 4.4.2 o la última versión disponible.

10.Después de haber ejecutado estos pasos, el equipo tiene todo lo necesario para escribir y probar las aplicaciones de Android. Ahora toma una tila para compensar tanto café.

1.5.3. Instalación de Android Studio

En la edición de Google I/O 2013 se lanzó unpreviewde Android Studio. Se trata de un nuevo entorno de desarrollo para Android basado en IntelliJ IDEA. Incorpora nuevas características que no han sido incorporadas en el tradicional IDE basado en Eclipse. Esto parece indicar que Google va a potenciar este entorno para el desarrollo de aplicaciones, en detrimento del entorno basado en Eclipse.

Puedes descargarlo en:http://developer.android.com/sdk/installing/studio.html

NOTA:Actualmente, Android Studio está disponible en versión beta. Varias características están incompletas y puedes encontrar errores. Si no te sientes cómodo usando un producto inacabado, puedes pasar al siguiente punto y descargar en su lugar el paquete ADT.

1.5.4. Instalación de los componentes por separado

Si ya tienes instalado Eclipse en tu ordenador, puedes completar la instalación añadiendo Android SDK y Eclipse Plug-in. De esta forma mantendrás tu configuración actual y simplemente añadirás nuevas funcionalidades. Si no es tu caso, te recomendamos la instalación anterior.

Vídeo

[

tutorial

]

:

Instalación de Eclipse y AndroidSDK

Recursos adicionales:

Teclas de acceso rápido en Eclipse

Ctrl-O: Añadeimportsde las clases no resueltas.

Ctrl-F: Formatea automáticamente el código.

Ctrl-Espacio: Autocompletar.

Enlaces de interés:

•Página oficial de Eclipse:Podrás encontrar todas las versiones e información sobre los proyectos Eclipse.http://www.eclipse.org/

•Mi primera hora con Eclipse:Interesante si quieres sacarle el máximo provecho a esta herramienta, aunque mucho de lo que se explica no resulta imprescindible para el curso.

http://ubuntulife.files.wordpress.com/2008/03/intro_eclipse_espanol.pdf

1.5.5. Creación de un dispositivo virtual Android (AVD)

Un dispositivo virtual Android (AVD) te va a permitir emular en tu ordenador diferentes tipos de dispositivos vasados en Android. De esta forma podrás probar tus aplicaciones en una gran variedad de teléfonos y tabletas con cualquier versión, pantalla o tipo de entrada.

Ejercicio:

Creación de un dispositivo virtual Android (AVD)

1.Abre Eclipse y pulsa el botónAndroid Virtual Device Manager. Te aparecerá la lista con los AVD que hayas creado. La primera vez estará vacía.

2.Pulsa a continuación el botónNew... para crear un nuevo AVD. Aparecerá la siguiente ventana:

Donde tendremos que introducir los siguientes datos:

AVD Name:nombre que quieras dar al nuevo dispositivo virtual.

Device:dispositivo a emular. Puede ser uno real, como Nexus 7, o bien uno genérico, donde se indican el tamaño de la pantalla en pulgadas y la resolución del dispositivo. Podrás seleccionar el dispositivo de una lista desplegable.NOTA:si quieres crear nuevos tipos de dispositivo, utiliza la pestaña Device Definition que encontrarás en la lista de dispositivos.

Target:versión SDK que soportará el dispositivo. Solo aparecerán las versiones que hayas instalado desdeAndroid SDK Manager.

CPU/ABI:tipo de CPU y arquitectura que se va a emular. A tener en cuenta si se va a trabajar en código nativo. La opción más habitual es ARM.

Keyboard:si se selecciona, se supondrá que el dispositivo tiene teclado físico, que será emulado por el teclado del ordenador. En caso contrario se utilizará el teclado en pantalla.

Skin:si se selecciona, se mostrarán a la derecha del dispositivo una serie de botones, entre los que se incluyen: volumen,on/off, teclas de navegación, retorno, casa, menú, etc.

Front/Back Camera:para activar la emulación de la cámara delantera y trasera.

Memory Options:memoria que se dedicará al emulador.RAM: memoria total en MB.VM Heap: memoria dinámica asignada a la máquina virtual en MB.

Internal Storage:memoria interna del dispositivo. Determinará el número de aplicaciones y datos que podrás instalar. Cuidado, esta memoria se reservará en tu disco duro, por lo que no es conveniente indicar un valor demasiado grande.

SD Card:memoria externa del dispositivo.Size:tamaño de la memoria. Se creará un nuevo fichero con el contenido de esta memoria.File:se utilizará un fichero previamente creado.

Snapshot:si lo seleccionas, podrás congelar la ejecución del dispositivo en un determinado instante. Más tarde, podrás retomar la ejecución en ese instante, sin tener que esperar a que se inicialice el dispositivo. Conviene marcarlo para conseguir una carga más rápida.

Use Host GPU:se habilita la aceleraciónhardwarepara gráficos OpenGLES. La navegación entre ventanas será más fluida.

3.Una vez introducida la configuración deseada, pulsa el botónOK.

4.Aparecerá el dispositivo creado en la siguiente lista:

5.Para arrancarlo, selecciónalo y pulsa el botónStart.Aparecerá la ventanaLaunch Options:

Puedes ejecutarlo en una ventana de 480 × 800 píxeles o, por el contrario, reescalarlo para que tenga un tamaño de 5,1 pulgadas en tu pantalla (Scale display to real size). También puede limpiar los datos de usuario (Wipe user data). Finalmente, puedes arrancar desde un punto de ejecución grabado e indicarle que cuando se cierre congele la ejecución para poder recargar en ese mismo punto.

6.Pulsa el botónLaunchpara arrancarlo.

NOTA:Algunas características dehardwareno están disponibles en el emulador; por ejemplo, el multi-touch o los sensores.

Vídeo

[

tutorial

]

:

Creación de dispositivos virtuales (AVD)

Recursos adicionales:

Teclas de acceso rápido en un emulador

Inicio: TeclaHome.

F2: TeclaMenú.

Esc: Tecla de volver.

F7: TeclaOn/Off

Ctrl-F5/Ctrl-F6oKeyPad +/-: Control de volumen de audio.

Ctrl-F11oKeyPad 7: Cambia la orientación entre horizontal y vertical.

Alt-Intro: Visualiza el emulador a pantalla completa.

1.6. Las versiones de Android y niveles de API

Antes de empezar a proyectar en Android hay que elegir la versión del sistema para la que deseamos realizar la aplicación. Es muy importante observar que hay clases y métodos que están disponibles a partir de una versión; si las vamos a usar, hemos de conocer la versión mínima necesaria.

Cuando se ha lanzado una nueva plataforma, siempre ha sido compatible con las versiones anteriores. Es decir, solo se añaden nuevas funcionalidades, y en el caso de modificar alguna funcionalidad, no se elimina, sino que se etiqueta como obsoleta, pero se puede continuar utilizando.

A continuación se describen las plataformas lanzadas hasta la fecha, con una breve descripción de las novedades introducidas. Las plataformas se identifican de tres formas alternativas: versión, nivel de API y nombre comercial. El nivel de API corresponde a números enteros, comenzando desde 1. Para los nombres comerciales se han elegido postres en orden alfabético: Cupcake (v1.5), Donut (v1.6), Éclair (v2.0), Froyo (v2.2), Gingerbread (v2.3), etc. Las dos primeras versiones, que hubieran correspondido a las letras A y B, no recibieron nombre.

Vídeo

[

tutorial

]

:

Descripción de las versiones de Android

1.6.1. Las primeras versiones

Android 1.0 Nivel de API 1 (septiembre 2008)

Primera versión de Android. Nunca se utilizó comercialmente, por lo que no tiene mucho sentido desarrollarla para esta plataforma.

Android 1.1 Nivel de API 2 (febrero 2009)

No se añadieron apenas funcionalidades: simplemente se arreglaron algunos errores de la versión anterior. Es la opción a escoger si queremos desarrollar unaaplicación compatible con todos los dispositivos Android. No obstante, apenas existen usuarios con esta versión.

1.6.2. Cupcake

Android 1.5 Nivel de API 3 (abril 2009)

Es la primera versión con algún usuario, aunque en la actualidad apenas quedan. Como novedades, se incorpora la posibilidad de teclado en pantalla con predicción de texto (ya no es necesario que los terminales tengan un teclado físico), así como la capacidad de grabación avanzada de audio y vídeo. También aparecen loswidgetsde escritorio ylivefolders. Incorpora soporte para Bluetooth estéreo, por lo que permite conectarse automáticamente a auriculares Bluetooth. Las transiciones entre ventanas se realizan mediante animaciones.

1.6.3. Donut

Android 1.6 Nivel de API 4 (septiembre 2009)

Permite capacidades de búsqueda avanzada en todo el dispositivo. También se incorporagesturesy la síntesis de texto a voz. Asimismo, se facilita que una aplicación pueda trabajar con diferentes densidades de pantalla. Soporte para resolución de pantallas WVGA. Aparece un nuevo atributo XML,onClick, que puede especificarse en una vista. Soporte para CDMA/EVDO, 802.1x y VPNs.

1.6.4. Éclair

Android 2.0 Nivel de API 5 (octubre 2009)

Esta versión de API apenas cuenta con usuarios, dado que la mayoría de los fabricantes pasaron directamente de la versión 1.6 a la 2.1. Como novedades cabría destacar que incorpora una API para manejar el Bluetooth 2.1. Ofrece un servicio centralizado de manejo de cuentas. Se aumenta el número de tamaños de ventana y resoluciones soportadas. Nueva interfaz del navegador y soporte para HTML5. Mejoras en el calendario y soporte para Microsoft Exchange. La claseMotionEventahora soporta eventos en pantallas multitáctil.

Android 2.1 Nivel de API 7 (enero 2010)

Se considera una actualización menor, por lo que la siguieron llamando Éclair. Destacamos el reconocimiento de voz, que permite introducir un campo de texto dictando sin necesidad de utilizar el teclado. También permite desarrollar fondos de pantalla animados. Se puede obtener información sobre la señal de la red actual que posea el dispositivo. En el paquete WebKit se incluyen nuevos métodos para manipular bases de datos almacenadas en Internet.

1.6.5. Froyo

Android 2.2 Nivel de API 8 (mayo 2010)

Como característica más destacada se puede indicar la mejora de velocidad de ejecución de las aplicaciones (ejecución del código de la CPU de 2 a 5 veces más rápido que en la versión 2.1, de acuerdo con variosbenchmarks). Esto se consigue con la introducción de un nuevo compilador JIT de la máquina Dalvik.

Se añaden varias mejoras relacionadas con el navegador web, como el soporte de Adobe Flash 10.1 y la incorporación del motor Javascript V8 utilizado en Chrome.

El desarrollo de aplicaciones permite las siguientes novedades: se puede preguntar al usuario si desea instalar una aplicación en un medio de almacenamiento externo (como una tarjeta SD), como alternativa a la instalación en la memoria interna del dispositivo; las aplicaciones se actualizan de forma automática cuando aparece una nueva versión; proporciona un servicio para la copia de seguridad de datos que se puede realizar desde la propia aplicación para garantizar al usuario el mantenimiento de sus datos; y por último, se facilita que las aplicaciones interaccionen con el reconocimiento de voz y que terceras partes proporcionen nuevos motores de reconocimiento.

Se mejora la conectividad: ahora podemos utilizar nuestro teléfono para dar acceso a Internet a otros dispositivos (tethering), tanto por USB como por Wi-Fi. También se añade el soporte a Wi-Fi IEEE 802.11n y notificacionespush.

Se añaden varias mejoras en diferentes componentes: en la API gráfica OpenGL ES; por ejemplo, se pasa a soportar la versión 2.0. Para finalizar, permite definir modos de interfaz de usuario (“automóvil” y “noche”) para que las aplicaciones se configuren según el modo seleccionado por el usuario.

1.6.6. Gingerbread

Android 2.3 Nivel de API 9 (diciembre 2010)

Debido al éxito de Android en las nuevas tabletas, ahora soporta mayores tamaños de pantalla y resoluciones (WXGA y superiores).

Incorpora una nueva interfaz de usuario con un diseño actualizado. Dentro de las mejoras de la interfaz de usuario destacamos la mejora de la funcionalidad de cortar, copiar y pegar y un teclado en pantalla con capacidad multitáctil. Se incluye soporte nativo para varias cámaras, pensado en la segunda cámara usada en videoconferencia. La incorporación de esta segunda cámara ha propiciado la inclusión de reconocimiento facial para identificar al usuario del terminal.

La máquina virtual Dalvik introduce un nuevo recolector de basura que minimiza las pausas de la aplicación, ayudando a garantizar una mejor animacióny el aumento de la capacidad de respuesta en juegos y aplicaciones similares. Se trata de corregir, así, una de las lacras de este sistema operativo móvil, que en versiones previas no ha sido capaz de cerrar bien las aplicaciones en desuso. Se dispone de un mayor apoyo para el desarrollo de código nativo (NDK).También se mejora la gestión de energía y el control de aplicaciones, y se cambia el sistema de ficheros, que pasa de YAFFS a ext4.

Entre otras novedades destacamos: el soporte nativo para telefonía sobre Internet VoIP/SIP; el soporte para reproducción de vídeo WebM/VP8 y codificación de audio AAC; el soporte para la tecnología NFC; las facilidades en el audio, los gráficos y las entradas para los desarrolladores de juegos; el soporte nativo para más sensores (como giroscopios y barómetros), y un gestor de descargas para las descargas largas.

1.6.7. Honeycomb

Android 3.0 Nivel de API 11 (febrero 2011)

Para mejorar la experiencia de Android en las nuevas tabletas se lanza la versión 3.0 optimizada para dispositivos con pantallas grandes. La nueva interfaz de usuario ha sido completamente rediseñada con paradigmas nuevos para la interacción y navegación.Entre las novedades introducidas destacan: losfragments, con los que podemos diseñar diferentes elementos de la interfaz de usuario; la barra de acciones, donde las aplicaciones pueden mostrar un menú siempre visible; las teclas físicas son reemplazadas por teclas en pantalla; se mejoran las notificaciones, arrastrar y soltar y las operaciones de cortar y pegar.

La nueva interfaz se pone a disposición de todas las aplicaciones, incluso las construidas para versiones anteriores de la plataforma. Esto se consigue gracias a la introducción de librerías de compatibilidad2que pueden ser utilizadas en versiones anteriores a la 3.0.

Se mejoran los gráficos 2D/3D gracias al renderizador OpenGL acelerado porhardware. Aparecerá el nuevo motor de gráficos Renderscript, que saca mayor rendimiento alhardwaree incorpora su propia API. Se incorpora un nuevo motor de animaciones mucho más flexible, conocido como animación de propiedades.

Primera versión de la plataforma que soporta procesadores multinúcleo. La máquina virtual Dalvik ha sido optimizada para permitir multiprocesado, lo que permite una ejecución más rápida de las aplicaciones, incluso aquellas que son de hilo único.

Se incorporan varias mejoras multimedia, como listas de reproducción M3U a través de HTTP Live Streaming, soporte a la protección de derechos musicales(DRM) y soporte para la transferencia de archivos multimedia a través de USB con los protocolos MTP y PTP.

En esta versión se añaden nuevas alternativas de conectividad, como las nuevas API de Bluetooth A2DP parastreamingde audio y HSP para conexiones seguras con dispositivos. También, se permite conectar teclados completos por USB o Bluetooth.

Se mejora el uso de los dispositivos en un entorno empresarial. Entre las novedades introducidas destacamos las nuevas políticas administrativas con encriptación del almacenamiento, caducidad de contraseña y mejoras para administrar los dispositivos de empresa de forma eficaz.

A pesar de la nueva interfaz gráfica optimizada para tabletas, Android 3.0 es compatible con las aplicaciones creadas para versiones anteriores.

Android 3.1 Nivel de API 12 (mayo 2011)

Se permite manejar dispositivos conectados por USB (tantohostcomo dispositivo). Protocolo de transferencia de fotos y vídeo (PTP/MTP) y de tiempo real (RTP).

Android 3.2 Nivel de API 13 (julio 2011)

Optimizaciones para distintos tipos de tableta. Zum compatible para aplicaciones de tamaño fijo. Sincronización multimedia desde SD.

1.6.8. Ice Cream Sandwich

Android 4.0 Nivel de API 14 (octubre 2011)

La característica más importante es que se unifican las dos versiones anteriores (2.x para teléfonos y 3.x para tabletas) en una sola compatible con cualquier tipo de dispositivo. A continuación destacamos algunas de las características más interesantes.

Se introduce una nueva interfaz de usuario totalmente renovada; por ejemplo, se reemplazan los botones físicos por botones en pantalla (como ocurría en las versiones 3.x). Nueva API de reconocimiento facial que, entre otras muchas aplicaciones, permite al propietario desbloquear el teléfono. También se mejora en el reconocimiento de voz; por ejemplo, se puede empezar a hablar sin esperar la conexión con el servidor.

Aparece un nuevo gestor de tráfico de datos por Internet, donde podremos ver el consumo de forma gráfica y donde podemos definir los límites de ese consumo para evitar cargos inesperados con la operadora. Incorpora herramientas para la edición de imágenes en tiempo real, para distorsionar, manipular e interactuar con la imagen en el momento de ser capturada. Se mejora la API para comunicaciones por NFC y la integración con redes sociales.

En diciembre de 2011 aparece una actualización de mantenimiento (versión 4.0.2) que no aumenta el nivel de API.

Android 4.0.3 Nivel de API 15 (diciembre 2011)

Se introducen ligeras mejoras en algunas API, incluyendo las de redes sociales, calendario, revisor ortográfico, texto a voz y bases de datos, entre otras. En marzo de 2012 aparece la actualización 4.0.4.

1.6.9. Jelly Bean

Android 4.1 Nivel de API 16 (julio 2012)

En esta versión se hace hincapié en mejorar un punto débil de Android: la fluidez de la interfaz de usuario. Con este propósito se incorporan varias técnicas: sincronismo vertical, triple búfer y aumento de la velocidad del procesador al tocar la pantalla.

Se mejoran las notificaciones con un sistema de información expandible personalizada. Loswidgetsde escritorio pueden ajustar su tamaño y hacerse sitio de forma automática al situarlos en el escritorio. El dictado por voz puede realizarse sin conexión a Internet (de momento, solo en inglés).

Se introducen varias mejoras en Google Search. Se potencia la búsqueda por voz con resultados en forma de ficha. La función Google Now permite utilizar información de posición, agenda y hora en las búsquedas.

Se incorporan nuevos soportes para usuarios internacionales, como texto bidireccional y teclados instalables. Para mejorar la seguridad, las aplicaciones son cifradas. También se permiten actualizaciones parciales de aplicaciones.

Android 4.2 Nivel de API 17 (noviembre 2012)

Una de las novedades más importantes es que podemos crear varias cuentas de usuario en el mismo dispositivo. Aunque esta característica solo está disponible en tabletas. Cada cuenta tendrá sus propias aplicaciones y su propia configuración.

Loswidgetsde escritorio pueden aparecer en la pantalla de bloqueo. Se incorpora un nuevo teclado predictivo deslizante al estilo Swype. Posibilidad de conectar dispositivo y TVHD medianteWi-Fi(Miracast). Mejoras menores en las notificaciones. Nueva aplicación de cámara que incorpora la funcionalidad Photo Sphere para hacer fotos panorámicas inmersivas (en 360º).

Android 4.3 Nivel de API 18 (julio 2013)

Esta versión introduce mejoras en múltiples áreas. Entre ellas losperfiles restringidos(disponible solo en tabletas), que permiten controlar los derechos de los usuarios para ejecutar aplicaciones específicas y para tener acceso a datos específicos. Igualmente, los programadores pueden definir restricciones en lasapps, que los propietarios pueden activar si quieren. Se da soporte para Bluetooth Low Energy (BLE), que permite a los dispositivos Android comunicarse con los periféricos con bajo consumo de energía. Se agregan nuevas características para la codificación, transmisión y multiplexación de datos multimedia. Se da soporte para OpenGL ES 3.0. Se mejora la seguridad para gestionar y ocultar las claves privadas y credenciales.

1.6.10. KitKat

Android 4.4 Nivel de API 19 (octubre 2013)

Aunque se esperaba la versión 5.0 y con el nombre de Key Lime Pie, Google sorprendió con el cambio de nombre, que se debió a un acuerdo con Nestlé para asociar ambas marcas.

El principal objetivo de la versión 4.4 es hacer que Android esté disponible en una gama aún más amplia de dispositivos, incluyendo aquellos con tamaños de memoria RAM de solo 512 MB. Para ello, todos los componentes principales de Android han sido recortados para reducir sus requerimientos de memoria, y se ha creado una nueva API que permite adaptar el comportamiento de la aplicación en dispositivos con poca memoria.

Más visibles son algunas nuevas características de la interfaz de usuario. El modo de inmersión en pantalla completa oculta todas las interfaces del sistema (barras de navegación y de estado), de tal manera que una aplicación puede aprovechar el tamaño de la pantalla completa.WebViews(componente de la interfaz de usuario para mostrar las páginas web) se basa ahora en elsoftwarede Chrome de Google y, por lo tanto, puede mostrar contenido basado en HTM5.

Se mejora la conectividad con soporte de NFC para emular tarjetas de pago tipo HCE, varios protocolos sobre Bluetooth y soporte para mandos infrarrojos. También se mejoran los sensores para disminuir su consumo y se incorpora un sensor contador de pasos.

Se facilita el acceso de las aplicaciones a la nube con un nuevo marco de almacenamiento. Este marco incorpora un tipo específico decontent provider conocido comodocument provider, nuevas intenciones para abrir y crear documentos y una ventana de diálogo que permite al usuario seleccionar ficheros. Se incorpora un administrador de impresión para enviar documentos a través deWi-Fia una impresora. También se añade uncontent providerpara gestionar los SMS.

Desde una perspectiva técnica, hay que destacar la introducción de la nueva máquina virtual ART, que consigue tiempos de ejecución muy superiores a la máquina Dalvik. Sin embargo, todavía está en una etapa experimental. Por defecto se utiliza la máquina virtual Dalvik, y se permite a los programadores activar opcionalmente ART para verificar que sus aplicaciones funcionan correctamente.

Vídeo

[

tutorial

]

:

Android 4.4 KitKat

1.6.11. Android L Preview

Android 4.5 (o 5.0) Nivel de API 20 (junio 2014)

Para que los desarrolladores conozcan y prueben las novedades de la última versión de Android han lanzado unpreview. De momento no dispone de nombre ninúmero de versión. Está previsto que en otoño de 2014 Google lance nuevos dispositivos con esta versión. Android L también da soporte a las plataformas Google Wear, Google TV y Google Card. La incorporación más importante de esta versión es la utilización de la máquina virtual ART en lugar de Dalvik. Esta novedad ya había sido incorporada en la versión anterior a modo de prueba. ART mejora de forma considerable el tiempo de ejecución del código escrito en Java.

Desde el punto de vista de la eficiencia hay que destacar el proyecto Volta: un conjunto de herramientas para el ahorro de batería. En Android L el modo de ahorro de batería se activa por defecto; este modo desconecta algunos componentes en caso de que la batería esté baja. Se incorpora una nueva API (android.app.job.JobScheduler) que nos permite que ciertos trabajos se realicen solo cuando se cumplan determinadas condiciones (por ejemplo, cuando el dispositivo está cargando). También se incluyen completas estadísticas para analizar el consumo que nuestras aplicaciones hacen de la batería.

En el campoGráfico, Android L incorpora soporte nativo para OpenGL ES 3.1. Además, esta versión permite añadir a nuestras aplicaciones un paquete de extensión con funcionalidades gráficas avanzadas (fragment shader,tessellation,geometry shaders, ASTC…). La nueva versión será compatible con el motor de videojuegos Unreal Technology 4, lo que permitirá la creación de grandes videojuegos sobre esta plataforma.

Otro aspecto innovador de la nueva versión lo encontramos en el diseño de la interfaz de usuario. Se han cambiado los iconos, incluyendo los de la parte inferior (Retroceder,InicioyAplicaciones), que ahora son un triángulo, un círculo y un cuadrado. El nuevo enfoque se centra en Material Design (http://www.google.com/design/material-design.pdf). Consiste en una guía completa para el diseño visual, el movimiento y las interacciones a través de plataformas y dispositivos. Google pretende aplicar esta iniciativa a todas las plataformas, incluyendo las plataformas para diseño web. La nueva versión también incluye varias mejoras para controlar las notificaciones. Ahora son más parecidas a las tarjetas de Google Now y pueden verse en la pantalla de bloqueo.

Como curiosidad, la nueva versión introduce un modo de bloqueo que impide al usuario salir de una aplicación y bloquea las notificaciones. Esto podría utilizarse, por ejemplo, para que, mientras un usuario realiza un examen, no pueda ver las notificaciones, acceder a otras aplicaciones o volver a la pantalla de inicio.

Vídeo

[

tutorial

]

:

Android L Preview

1.6.12. Elección de la plataforma de desarrollo

A la hora de seleccionar la plataforma de desarrollo hay que consultar si necesitamos alguna característica especial que solo esté disponible a partir de una versión. Todos los usuarios con versiones inferiores a la seleccionada no podrán instalar la aplicación. Por lo tanto, es recomendable seleccionar la menor versión posible que nuestra aplicación pueda soportar. Por ejemplo, si en nuestraaplicación queremos utilizar el motor de animaciones de propiedades, tendremos que utilizar la versión 3.0, al ser la primera que lo soporta. El problema es que la aplicación no podrá ser instalada en dispositivos que tengan una versión anterior a la 3.0. Para ayudarnos a tomar la decisión de qué plataforma utilizar, puede ser interesante consultar los porcentajes de utilización:

Figura 3:Dispositivos Android, según la plataforma instalada, que han accedido a Google Play Store durante dos semanas (hasta el 12 de agosto de 2014). Las versiones con porcentajes inferiores al 0,1% no se muestran, ni tampoco las versiones anteriores a la 2.2.

Tras estudiar la gráfica podemos destacar el reducido número de usuarios que utilizan la versión 2.2 (0,7%). Por lo tanto, puede ser buena idea utilizar como versión mínima la 2.3 para desarrollar nuestro proyecto, dado que daríamos cobertura casi al 99% de los terminales. Las versiones 3.x han tenido muy poca difusión, por lo que no aparecen en la tabla. Las versiones 4.x, con un 64,8%, son mayoritarias. No obstante, estas cifras cambian mes a mes, por lo que recomendamos consultar los siguientes enlaces antes de tomar decisiones sobre las versiones a utilizar.

Vídeo

[

tutorial

]

:

Elegir la versión en una aplicación Android

1.6.13. Las librerías de compatibilidad (support library)

Tal y como se ha descrito, la filosofía tradicional de Android ha sido que las novedades que aparecen en una API solo puedan usarse en dispositivos que soporten esa API. Como acabamos de ver, la fragmentación de las versiones de Android es muy grande, es decir, actualmente podemos encontrar dispositivos con una gran variedad de versiones. Con el fin de que la aplicación pueda ser usada por el mayor número posible de usuarios hemos de ser muy conservadores a la hora de escoger la versión mínima de API de nuestra aplicación. La consecuencia es que las novedades que aparecen en las últimas versiones de Android no pueden ser usadas.

En la versión 3.0 aparecieron importantes novedades que Google quería que se incorporaran en las aplicaciones lo antes posible (fragments, nuevasnotificaciones, etc.). Con este fin creó las librerías de compatibilidad, para poder incorporar ciertas funcionalidades en cualquier versión de Android.

v4 Support Library

Se trata de la librería más importante. De hecho, se añade por defecto en un nuevo proyecto. Puede usarse en una aplicación con nivel de API 4 (v1.6) o superior. Incorpora las clase:Fragment,NotificationCompat,ViewPager,LocalBroadcastManager,PagerTitleStrip,PagerTabStrip,DrawerLayout,SlidingPaneLayout,ExploreByTouchHelper,LoaderyFileProvider. Para más información consúltese la referencia deandroid.support.v4.

v7 Libraries

Se incluyen las siguientes librerías, que pueden usarse a partir de la API 7 (v2.1):

•v7 appcompat library: Permite utilizar un IU basado en Action Bar. Se añade por defecto cuando creamos un nuevo proyecto.

•v7 gridlayout library: Incorpora ellayoutGrigLayout.

•v7 mediarouter library: Da soporte a Google Cast.

Las tres librerías indicadas incorporan recursos. Para usarlas en nuestra aplicación hemos de crear un nuevo proyecto3.

v8 Support Library

Añade soporte para utilizar RenderScript. Esta API permite paralelizar tareas en dispositivos con varias CPU o entre la CPU y la GPU. Esto resulta especialmente útil en el procesado de imágenes.

v13 Support Library

Da soporte a la claseFragmentCompat, unhelperpara acceder a varias características de unfragment.

Enlaces de interés:

•Android Developers: Plataform Versions:estadística de dispositivos Android, según la plataforma instalada, que han accedido a Android Market.

http://developer.android.com/about/dashboards/index.html

•Android Developers:en el menú de la izquierda aparecen enlaces a las principales versiones de la plataforma. Si pulsas sobre ellos encontrarás una descripción exhaustiva de cada plataforma.

http://developer.android.com/about/index.html

Preguntas de repaso:

Las versiones de Android

1.7. Creación de un primer programa

Utilizar un entorno de desarrollo nos facilita mucho la creación de programas. Esto es especialmente importante en Android dado que tendremos que utilizar una gran variedad de ficheros. Gracias alplug-inAndroid que hemos instalado en el entorno de desarrollo Eclipse, la creación y gestión de proyectos se realizará de forma muy rápida, acelerando los ciclos de desarrollo.

Vídeo

[

tutorial

]

:

Un primer proyecto Android

Ejercicio:

Crear un primer proyecto en Android

Para crear un primer proyecto Android con Eclipse sigue los siguientes pasos:

1.Selecciona