You are on page 1of 51

1

CURSO
INTRODUCTORIO AL
DESARROLLO EN
ANDROID


Profesores: Cionchi Juan Ignacio
Corbella Daniel

Mayo 2012


2
Prologo

A quien va dirigido

Este curso est dirigido a profesionales IT con conocimientos bsicos de programacin orientada a
objetos.

Objetivos Generales

Al concluir el curso los participantes habrn adquirido los conceptos necesarios como
para:
x Evaluar y seleccionar las herramientas necesarias para realizar una aplicacin
Android
x Desarrollar aplicaciones Android sencillas
x Formar parte de equipos de desarrollos Android










3
Contenido
Prologo ................................................................................................................................................ 2
A quien va dirigido .............................................................................................................................. 2
Objetivos Generales ............................................................................................................................ 2
Qu es Android? ................................................................................................................................ 6
Conectividad: ................................................................................................................................... 6
Software: ......................................................................................................................................... 7
Hardware: ........................................................................................................................................ 7
Multimedia ...................................................................................................................................... 7
Entorno de desarrollo: .................................................................................................................... 7
Arquitectura Android .......................................................................................................................... 8
Kernel de Linux ................................................................................................................................ 9
Android Runtime ............................................................................................................................. 9
Cmo nace Android ......................................................................................................................... 11
Soluciones Android........................................................................................................................ 11
Historia Android ................................................................................................................................ 12
Adquisicin por parte de Google .................................................................................................. 12
Open Handset Alliance .................................................................................................................. 12
Ambiente de desarrollo Android ....................................................................................................... 26
Requerimientos ............................................................................................................................. 26
Eclipse ............................................................................................................................................ 26
Android SDK .................................................................................................................................. 26
Herramientas de desarrollo de Android (ADT) ............................................................................. 27
Configuracin ADT ......................................................................................................................... 27
Instalar ADT para Eclipse ........................................................................................................... 27
Estructura de un proyecto en eclipse ............................................................................................... 29
Creando un nuevo proyecto Android ............................................................................................ 29
Una vez abierto Eclipse, creamos nuestro primer proyecto Android: File > New > Android
Project. Introducimos los siguientes datos para el proyecto: ................................................... 29
Primera ejecucin de prueba ........................................................................................................ 31
Estructura de archivos del proyecto ............................................................................................. 31


4
Configurar un AVD (Android Virtual Device) ................................................................................. 34
Componentes de un aplicacin ......................................................................................................... 14
Activity ........................................................................................................................................... 14
Service ........................................................................................................................................... 18
Ciclo de Vida de los Servicios .................................................................................................... 18
Content Provider ........................................................................................................................... 21
Intent ............................................................................................................................................. 24
Permisos ............................................................................................................................................ 36
Versiones ....................................................................................................................................... 43


















5





UNIDAD 1












6
Introduccin: Qu es Android?

Como ya es sabido por muchos, Android es una plataforma de software de cdigo abierto de
Google y la Open Handset Alliance
1
que est revolucionando el mercado de la telefona mvil,
entre otros. Una de sus virtudes principales es que se adapta fcilmente a los diferentes mercados.
Pero qu es realmente? Android se puede definir como un conjunto de software libre en donde
se destaca su sistema operativo basado en Linux, diseado originalmente para dispositivos
mviles, tales como telfonos inteligentes y tablets. Este incorpora en ciertas aplicaciones y
middleware
2
.

El objetivo principal de Android es facilitar las tareas de desarrollo ocultando complejidad y
abstrayendo el hardware base.
Android le da soporte a las siguientes caracteristicas, algunas se activan dependendiendo del
hardware base:
Conectividad:
x Navegador integrado, basado en Webkit.
x Soporte para telefona celular GSM.
x Bluetooh, EDGE, 3G, y Wi-Fi.

1
OHA: Alianza formada por aproximadamente 30 organizaciones dispuesta a instaurar una telefona abierta
de mejor calidad en el mercado.
2
Middleware: software que asiste a una aplicacin para interactuar o comunicarse con otras aplicaciones,
software, redes, hardware y/o sistemas operativos.
Android es exclusivamente un entorno de software creado para dispositivos mviles, no es
una plataforma de hardware. Esta, se encuentra principalmente conformada por:
x Un sistema operativo basado en Linux, que facilita la interaccin con el hardware.
x Una completa interfaz de usuario
x Aplicaciones
x Bibliotecas de cdigo
x Estructuras para aplicaciones
x Compatibilidad multimedia


7
Software:
x Graficos optimizados por OpenGl (1.0 / 2.0)
x SQL Lite Para el almacenamiento y gestin de base de datos.
Hardware:
x Cmara
x GPS
x Brjula
x Acelermetro
Multimedia
Soporta varios formatos entre los que se destacan:
x MPEG4
x MP3
x AMR
x JPG
x GIF
Entorno de desarrollo:
x Emulador.
x Debugger.
x Herramientas de Profiling.







8
Arquitectura Android







9
Kernel de Linux

x Android utiliza la versin 2.6 del Kernel de Linux
x Aprovecha :
Gestin de memoria.
Gestin de procesos.
Gestin de Red.
Modelo de drivers.
x Lo utiliza como capa de abstraccin del hardware.


Android Runtime

x Est conformado por libreras base, que proporcionan funcionalidad elemental, escritas
en lenguaje C y C++.
x Utiliza el Kernel de Linux para la ejecucin de APP (Aplicaciones), procesos y
administracin de memoria.
x Utiliza la Mquina virtual Dalvik
3
que se encuentra preparada para funcionar en ambientes
donde la duracin de bateras y el espacio en memoria son limitados.

Librerias

Android incluye un conjunto de bibliotecas de C/C++ usadas por varios componentes del
sistema.

System C library (implementacin biblioteca C estndar)
Bibliotecas de medios
Bibliotecas de grficos, 3D
SQLite, entre otras.

3
Dalvik ha sido diseada por Dan Bornstein con contribuciones de otros ingenieros de Google.


10

Framework Android

Acceso completo a los mismos APIs del framework, usados por las aplicaciones base.
Diseado para simplificar la reutilizacin de componentes.
Cualquier aplicacin puede compartir sus capacidades con otras.
Permite que los componentes sean reemplazados por el usuario

Aplicaciones

Las aplicaciones base incluyen un cliente de correo electronico, programa de SMS,
calendario, mapas, navegador, contactos y otros.
Todas las aplicaciones estn escritas en lenguaje de programacin Java.
En este nivel se encontraran nuestros desarrollos


















11
Cmo nace Android?

Soluciones Android

Android nace con la intencin de dar solucin a las siguientes problemticas:
x Poca duracin de la batera en dispositivos mviles.
x Recursos muy escasos:
o Memorias de tamao reducido.
o Procesadores de baja frecuencia.
x Limitaciones visuales:
o Displays muy pequeos.
o Poca resolucin.
x Mala gestin de recursos entre aplicaciones.












12
Historia Android
Adquisicin por parte de Google

En julio de 2005, Google adquiri Android Inc., una pequea compaa de Palo Alto, California
fundada en 2003. Entre los cofundadores de Android que se fueron a trabajar a Google estn Andy
Rubin (co-fundador de Danger), Rich Miner (co-fundador de Wildfire Communications, Inc.), Nick
Sears (alguna vez VP en T-Mobile), y Chris White (quien encabez el diseo y el desarrollo de la
interfaz en WebTV). En aquel entonces, poco se saba de las funciones de Android Inc. fuera de
que desarrollaban software para telfonos mviles. Esto dio pie a rumores de que Google estaba
planeando entrar en el mercado de los telfonos mviles.
En Google, el equipo liderado por Rubin desarroll una plataforma para dispositivos mviles
basada en el kernel de Linux que fue promocionado a fabricantes de dispositivos y operadores con
la promesa de proveer un sistema flexible y actualizable. Se inform que Google haba alineado ya
una serie de fabricantes de hardware y software y seal a los operadores que estaba abierto a
diversos grados de cooperacin por su parte.
La especulacin sobre que el sistema Android de Google entrara en el mercado de la telefona
mvil se increment en diciembre de 2006. Reportes de BBC y The Wall Street Journal sealaron
que Google quera sus servicios de bsqueda y aplicaciones en telfonos mviles y estaba muy
empeado en ello. Medios impresos y en lnea pronto reportaron que Google estaba
desarrollando un telfono con su marca.
En septiembre de 2007, InformationWeek difundi un estudio de Evalueserve que reportaba
que Google haba solicitado diversas patentes en el rea de la telefona mvil.

Open Handset Alliance

El 5 de noviembre de 2007 la Open Handset Alliance, un consorcio de varias compaas entre las
que estn Texas Instruments, Broadcom Corporation, Nvidia, Qualcomm, Samsung
Electronics, Sprint Nextel, Intel, LG, Marvell Technology Group, Motorola, y T-Mobile; se estren
con el fin de desarrollar estndares abiertos para dispositivos mviles.10 Junto con la formacin


13
de la Open Handset Alliance, la OHA estren su primer producto, Android, una plataforma para
dispositivos mviles construida sobre la versin 2.6 del kernel de Linux.
El 9 de diciembre de 2008, se anunci que 14 nuevos miembros se uniran al proyecto Android,
incluyendo PacketVideo, ARM Holdings,Atheros Communications, Asustek, Garmin, Softbank, Sony
Ericsson, Toshiba, Vodafone y ZTE.36 37



















14
Componentes de una aplicacin
Activity

Las aplicaciones en Android funcionan bajo el esquema de Actividades (o activities en ingles). Las
activities representan el componente principal de la interfaz grfica de una aplicacin Android,
que permiten al usuario interactuar con la misma. Se puede pensar en una activity como el
elemento anlogo a una ventana en cualquier otro lenguaje visual. Es importante sealar que no
contempla nicamente el aspecto grfico, sino que ste forma parte del componente Activity a
travs de vistas representadas por clases como View y sus derivadas, que sern explicadas en la
prxima unidad.

Una aplicacin por lo general esta formada por varias Activities, una de ellas la Activity marcada
como "Main" o principal, esta sera la Activity que se lanzara al iniciar la aplicacin. Una Activity a
su vez podr lanzar otras Activites con el fin de componer la aplicacin de diversas interfaces, con
esto permitimos a la aplicacin la ejecucin de varias acciones a travs de la existencia de una o
ms pantallas. Cada vez que se inicia una nueva Activity, la Activity anterior se detiene
Las activities que componen una aplicacin se van mostrando al usuario segn este las vaya
necesitando. Una activity llama a otra cuando sea necesario, y cada una de las activities que se
vayan mostrando se almacenan en una pila; es decir, cada vez que la aplicacin lo requiera inserta
una nueva activity en la pila y, cuando esta ya no se necesite, se hace un push sobre esta lo cual
deja en descubierto la activity que estaba debajo.

Una activity puede usar componentes visuales, servicios, crear Intents, invocar otras activities, etc.
Una Activity puede invocar a otra (sub-Activity), de 2 modos:
o Fire and Forget: se crea la subActivity pero la Activity principal continua su
ejecucin sin preocuparse del resultado. La subActivity toma el foco. La creadora
no espera respuesta entonces, baja en la pila Para crearla, se utiliza el metodo
startActivity().

o Async callback: se crea la subActivity y cuando finalice, invocar un mtodo de
regreso, onActivityResult(), de la Activity principal con el resultado. Para crearla,
se utiliza elo metodo startActivityForResult()


15

ActivityManager: Controla el ciclo de vida de las Activity y de la pila de las Activities.
Monitoriza las activities para detectar posibles ANR (Application Not Responding). Por ejemplo si
la activity no responde a un evento en 5 segundos o si BroadCoastReceiver no finaliza en 10
segundos.
Para evitar ANR, se utilizan los Handlers.

Ejemplo








16
Ciclo de vida de las activities:



Una activity tiene un ciclo de vida muy definido, que ser igual para todas las activities. Este ciclo
de vida esta impuesto por el SDK de Android.
Una activity consta bsicamente de 3 estados:
x Activa: tiene el foco (esta en frente de la pantalla), visible, encima (top) de la pila
x Pausada: visible, pero sin foco (hay otra activa)
x Parada: no visible por el usuario, El sistema puede elegirla para eliminarla en caso de
pocos recursos.


17
Cada cambio de estado implica una transicin que ser notificada a travez de los mtodos a la
Activity.

Cuando se crea una activity, se invoca el evento onCreate(). Este evento slo se invoca la primera
vez que se llama a una activity, o bien cuando se llama despus de que el sistema haya tenido que
eliminarla por falta de recursos.
onStart() es el evento invocado cuando cada vez que la activity se muestra al usuario. Es decir, la
primera vez que se muestra, y las veces que en las que vuelve a aparecer tras haber estado
oculta. En este ltimo caso, se invoca onStop() al desaparecer y onRestart() inmediatamente
antes de reaparecer.

onFreeze() y onPause() son llamadas secuencialmente cuando otra activity va a pasar en
encargarse de la interaccin con el usuario. Tras onPause() la activity permanece en un estado de
espera en el que puede ocurrir que la aplicacin sea destruida, por lo que estos eventos se usan
para consolidar la informacin que no queremos que se pierda. Si la activity no se destruye
volver al primer plano con el evento onResume().

La idea importante con la que quedarse es que una activity que est pausada o detenida
(tras onPause() u onStop()) puede ser destruida por el sistema sin previo aviso, por lo que
deberemos encargarnos de guardar antes la informacin necesaria
(durante onFreeze() y onPause()).




18
Service

Un servicio (o service en Ingles) es un bloque de cdigo sin interfaz grafica que se ejecuta en un
hilo distinto al de la interfaz de usuario (es decir en background o segundo plano) y tiene la
caracterstica de existir por un largo periodo. Por ejemplo, cuando en tu Android device escuchas
una cancin, la actividad llamada Msica conecta la cancin seleccionada con un servicio que
permite que el archivo de audio est ejecutndose de manera independiente a la actividad que la
invoc. Otro ejemplo claro es la aplicacin de Android Market: cuando el usuario descarga una
aplicacin, se queda corriendo en background para evitar la interrupcin de la operacin y
permitir que el usuario siga utilizando la pantalla para buscar ms aplicaciones.

En concepto, son exactamente iguales a los servicios presentes en cualquier otro sistema
operativo. Los servicios pueden realizar cualquier tipo de acciones, por ejemplo actualizar datos,
lanzar notificaciones, o incluso mostrar elementos visuales (activities) si se necesita en algn
momento la interaccin con el usuario.
Una caracterstica muy importante que poseen es que tienen mas prioridad que una Actividad.
Algunos ejemplos de Servicios son Location Manager, Media controller y Notification Manager.

Ciclo de Vida de los Servicios
Un servicio puede tener dos estados:

x Iniciado (started): Un servicio est iniciado cuando un componente la inicia
utilizando el mtodo startService(). Una vez iniciado, el servicio corre en el
fondo de manera indefinida, incluso cuando la actividad que inici el servicio
haya sido destruda. Normalmente, un servicio iniciado realiza una sola
operacin y no regresa un resultado al componente que lo inicia.
x Asociado (bound): Un servicio est asociado a un componente si ste utiliza la
instruccin bindService(). Un servicio asociado a una actividad por ejemplo,
permite enviar peticiones y obtener resultados utilizando IPC(InterProcess
Communication). Un servicio asociado corre nicamente mientras exista otro
componente. En cuanto ste componente se disocia, el servicio es destrudo.


19

De la misma manera que las Activities, en los Services tambin existen ciertos mtodos que nos
permiten controlar el ciclo de vida de un Servicio:

x onStartCommand(): El sistema llama ste mtodo cuando otro componente, como una
actividad pide que el servicio sea iniciado, utilizando el mtodo startService(). Una vez que
el mtodo se ejecuta, el servicio es iniciado y puede correr en el background de manera
indefinida. Si se implementa de esta forma, es tu responsabilidad parar el servicio cuando
el trabajo est hecho, utilizando el mtodo stopSelf() o stopService().

x onBind(): El sistema llama este mtodo cuando otro componente quiere asociarse con el
servicio(similar a la tcnica Remote Procedure Call), llamando el mtodo bindService(). En
tu implementacin de este mtodo, debes proveer una interfase que el usuario use para
comunicar con el servicio, regresando un IBinder, el cul es obligatorio implementar,
aunque si no quieres permitir asociaciones, entonces deber regresar nulo.

x onCreate(): El sistema llama ste mtodo cuando el servicio es creado por primera vez,
para realizar procedimientos de inicializacin. Si el servicio ya est corriendo, el mtodo
no es llamado.


x onDestroy(): El sistema llama este mtodo cuando el servicio deja de ser usado y entonces
se destruye. El servicio puede implementarlo para limpiar cualquier recurso asociado
como hilos, listeners, receivers, etc.

x onUnbind(): Cuando un cliente se desconecta.

x onRebind(): El cliente vuelve a conectarse despus de desconectarse.





20
Servicios






21
Content Provider

Un Content Provider no es ms que el mecanismo proporcionado por la plataforma Android para
permitir compartir informacin entre aplicaciones. Una aplicacin que desee que todo o parte de
la informacin que almacena est disponible de una forma controlada para el resto de
aplicaciones del sistema deber proporcionar un content provider a travs del cul se pueda
realizar el acceso a dicha informacin. Este mecanismo es utilizado por muchas de las aplicaciones
estandard de un dispositivo Android, como por ejemplo la lista de contactos, la aplicacin de SMS,
o el calendario/agenda. Esto quiere decir que podramos acceder a los datos gestionados por estas
aplicaciones desde nuestras propias aplicaciones Android haciendo uso de los content
providers correspondientes.

Una clase de Content Provider implementa un conjunto estndar de mtodos para exponer sus
datos de aplicacin para ser utilizados, consumidos o creados por otras
aplicaciones.Normalmente, ContentProvider se usa con una base de datos(SQLite), pero puede
usarse con otro medio de comparticin de variables, un fichero, simplemente un ArrayList.

Por defecto, Android incluye una serie de componentes Content Provider que permiten publicar
todo tipo de datos bsicos que pueden resultar tiles entre aplicaciones: informacin de los
contactos, fotografas, imgenes, vdeos, mensajes de texto, audios, etc. Todos estos Content
Provider ya definidos y listos para utilizar se pueden encontrar en el paquete: android.provider.

Adems, Android ofrece la posibilidad de que el desarrollador pueda crear sus propios Content
Provider. Un Content Provider es un objeto de la clase ContentProvider, ubicada en el
paquete android.content, y que almacena datos de un determinado tipo que pueden ser accedido
desde cualquier aplicacin. Cada elemento Content Provider tiene asociada una URI nica que lo
representa y a travs de la cual los otros componentes de una aplicacin pueden acceder a l.

Por ejemplo, la cadena content://contacts/people/ es una URI vlida que da acceso a la
informacin de los contactos del dispositivo; la cadena content://media/external/images es la
URI identificativa de otro Content Provider que da acceso a las imgenes de un dispositivo de
almacenamiento externo (tarjeta SD, por ejemplo).


22

Conocida la URI, cualquier componente puede acceder al correspondiente Content Provider. En
el siguiente ejemplo, se accede a la informacin de los contactos del dispositivo utilizando la URI
que identifica el Content Provider de los contactos.

La informacin que se quiere obtener es el ID del contacto, su nombre y su telfono. Para hacer
una consulta a travs de una URI, existen varios mtodos disponibles: uno de ellos
es managedQuery(), de la clase Activity. Este mtodo requiere como parmetros la URI que se
consulta, los campos a seleccionar, y otros valores como las clusulas WHERE u ORDER BY, como si
de una consulta SQL se tratara. El resultado consiste en un conjunto de filas que se puede recorrer
a travs del objeto Cursor, clase ubicada en el paquete android.database.

// Columnas a consultar
String[] projection = new String[] {
Contacts.People.NAME,
Contacts.People.NUMBER,
Contacts.People._ID
};
// Establecer URI para acceder a los contactos
Uri contacts = "content://contacts/people/";
// Lanzar consulta
Cursor cursor = managedQuery( contacts, projection, null, null, Contacts.People.NAME + " ASC");


Para crear un Content Provider, se deben seguir los siguientes pasos:

1. Crear una clase que extienda de ContentProvider.

2. Definir una constante denominada CONTENT_URI donde quede recogida la URI que
identificar a este nuevo Content Provider. Esta cadena siempre ha de comenzar por el prefijo
content://, seguida de la jerarqua de nombres que se desee establecer. Por ejemplo
content://miaplicacion.misdatos.


23

3. Establecer el sistema de almacenamiento deseado. Lo habitual es establecer una base de datos
en SQLite, pero se puede utilizar cualquier mecanismo de almacenamiento.

4. Definir tambin como constantes el nombre de las columnas de datos que pueden ser
recuperadas, de forma que el futuro usuario de este Content Provider puede conocerlas.

5. Implementar los mtodos bsicos de manipulacin de datos. Estos son:

Query(), debe devolver un objeto Cursor.
Insert()
Update()
Delete()
GetType()

6. En el fichero AndroidManifest.xml de la aplicacin debe aadirse, dentro del elemento
<application>, la siguiente etiqueta:

<application>
<provider android:name="nombre_del_content_provider"
android:authorities="uri_asignada"/>
</application>











24
Intent

Un intent es el elemento bsico de comunicacin entre los distintos componentes Android. Se
pueden entender como los mensajes o peticiones que son enviados entre los distintos
componentes de una aplicacin o entre distintas aplicaciones. Mediante un intent se puede
mostrar una actividad desde cualquier otra, iniciar un servicio, enviar un mensaje broadcast,
iniciar otra aplicacin, etc.

La definicin breve de la documentacin es: Un intent es la descripcin abstracta de una
operacin que se va a llevar a cabo

Dos formas de llamar a una Activity
Explicitamente o implicitamente. La forma explcita es simple de entender: creamos un Intent
indicando el nombre de la clase correspondiente a la actividad y el paquete, llamamos a
startActivity (o startSubActivity si queremos que nos notifiquen cundo finaliza dicha actividad) y
listo. El sistema busca la clase y crea la instancia, pasndo los datos que podamos haber aadido
al Intent en el objeto Bundle del mtodo onCreate de la nueva instancia.

SIN parmetros:

CON parmetros:




25

La invocacin implcita de una actividad se realiza tambin a travs de la clase Intent. Es implcita
porque no se indica el nombre de la clase correspondiente a la actividad a invocar, sino que se
establecen una serie de criterios, y se deja que el sistema elija una actividad que cumpla esos
criterios.

Intenciones y criterios

A un Intent podemos asociarle una accin, unos datos y una categora. Y aqu est el
verdadero quid de esta clase. Las actividades pueden declarar el tipo de acciones que pueden
llevar a cabo y los tipos de datos que pueden gestionar. Las acciones son cadenas de texto
estndar que describen lo que que la actividad puede hacer. Por
ejemplo, android.intent.action.VIEW es una accin que indica que la actividad puede mostrar
datos al usuario. Esta accin viene predefinida en la clase Intent, pero es posible definir nuevas
acciones para nuestras actividades. La misma actividad puede declarar que el tipo de datos del
que se ocupa es, por ejemplo,vnd.android.cursor.dir/person. Tambin puede declarar una
categora, que bsicamente indica si la actividad va a ser lanzada desde el lanzador de
aplicaciones, desde el men de otra aplicacin o directamente desde otra actividad. En el
AndroidManifest.xml quedara algo as:

<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/person" />
</intent-filter>

As, para llamar implcitamente a una actividad a travs de un intent, en vez de asignar el nombre
de la clase le asignamos una de las acciones que esta puede llevar a cabo, con el tipo de datos
adecuado.



26
Ambiente de desarrollo Android

Requerimientos

x Ultima versin del IDE Eclipse
x Android SDK
x Configuracin ADT

Eclipse

Eclipse es un entorno de desarrollo integrado de cdigo abierto multiplataforma para desarrollar
lo que el proyecto llama "Aplicaciones de Cliente Enriquecido", opuesto a las aplicaciones "Cliente-
liviano" basadas en navegadores
Se pude descargar de su site oficial: Http://www.eclipse.org/downloads/


Android SDK

Consiste un kit desarrollo necesario para crear aplicaciones para Android.
Se pude descargar de su site oficial: http://developer.android.com/sdk/





27

Herramientas de desarrollo de Android (ADT)

Es un plugin para el IDE de Eclipse que est diseado para darle un ambiente potente, integrado
en el que se puedan crear aplicaciones para Android.
ADT ampla las capacidades de Eclipse para que pueda configurar rpidamente nuevos proyectos
de Android, crear una interfaz de usuario de la aplicacin, aadir componentes basados en la API
de Android marco, depurar sus aplicaciones utilizando las herramientas del SDK de Android, e
incluso exportar firmado (con o sin signo) .apk archivos con el fin de distribuir la aplicacin.
El desarrollo en Eclipse con ADT es muy recomendable y es la manera ms rpida para
empezar. Con la configuracin del proyecto guiada que ofrece, as como la integracin de
herramientas, los editores de XML personalizados, y el panel de salida de depuracin, ADT le da un
impulso increble en el desarrollo de aplicaciones de Android.
Configuracin ADT

Instalar ADT para Eclipse

A la hora de desarrollar para Android existe un plugin para Eclipse llamado ADT (Android
Developer Tools), esto nos provee una herramienta para que podamos trabajar desde Eclipse con
Android y hacerlo de forma rpida y sencilla.

Para instalar el ADT solo tengo que abrir mi Eclipse e ir al men Help>Install New Software...>, en
la ventana presionar el botn ADD y agregar la fuente de instalacin. Eclipse nos abrir una
ventana para agregar un nuevo repositorio:


28


En Name podemos poner ADT y en Location: https://dl-ssl.google.com/android/eclipse/



Despus de configurar el nuevo repositorio solo tengo que seleccionar las opciones disponibles y
presionar el botn "Finish", con esto me queda instalado el plugin ADT y solo me queda comenzar
a trabajar con Android.


29
Estructura de un proyecto en eclipse
Creando un nuevo proyecto Android
Una vez abierto Eclipse, creamos nuestro primer proyecto Android: File > New > Android Project.
Introducimos los siguientes datos para el proyecto:
x Project Name: HelloAndroid
x Application name: Hello, Android
x Package name: com.example.helloAndroid
x Create activity: helloAndroid
x min SDK version: 6 (para obligar que la aplicacin funcione sobre el SDK 2.0.1 o superior)


30

Pulsamos Finish para terminar de crear el proyecto.






31
Primera ejecucin de prueba

Ejecutemos el proyecto para ver qu es lo que hace. En la pestaa de Project Explorer de la
ventana principal de Eclipse, seleccionamos HelloAndroid, pulsamos el botn derecho del ratn y
seleccionamos Run as > Android Application. Con esta accin se abrir un emulador que cargar la
aplicacin de prueba.

Estructura de archivos del proyecto
Ahora podemos ver en la pestaa Package Explorer la lista de archivos y directorios que ha
generado Eclipse.


32

x /src: en este directorio es donde se almacenarn nuestros archivos de cdigo fuente (archivos
.java).

x /Android 2.0.1: es la librera de desarrollo de Android (SDK). Podemos ir desplegando el rbol
para ver los paquetes y clases que incluye el SDK. Cuando aadamos nuevas libreras o
paquetes a nuestro proyecto, aparecern de la misma forma.

x /gen: aqu aparecern archivos que genera Eclipse de forma automtica, como por ejemplo el
archivo R.java. Estos archivos no deberemos editarlos, ya que ser Eclipse el que se encargar
de modificarlos automticamente segn otros parmetros del proyecto.

x /assets: es un directorio para guardar recursos que utilice tu aplicacin. Para acceder a los
recursos de este directorio necesitars usar la clase AssetManager para leer los datos como un


33
stream de bytes, por lo que es preferible utilizar el directorio /res ya que el acceso a los
archivos es mucho ms sencillo.

x /res: es el directorio principal de recursos (resources). Aqu guardaremos imgenes o archivos
multimedia que utilice nuestra aplicacin. Los recursos colocados en este directorio son
fcilmente accesibles desde la clase R.

x /res/drawable-?dpi: es el directorio de recursos grficos o imgenes que utilizar nuestra
aplicacin. Tiene tres subdirectorios: drawable-hdpi, drawable-mdpi y drawable-ldpi, en el que
guardaremos las imgenes dependiendo de la densidad de puntos por pulgada que tenga el
dispositivo en el que se ejecute la aplicacin. Puedes consultar la seccinSupporting Multiple
Screens de la gua de desarrollo para Android para comprender mejor cmo programar para
distintos tamaos de pantalla.

x /res/layout: en Android debemos separar el cdigo de la aplicacin de la interfaz grfica. En
este directorio es donde colocaremos los archivos xml que definen las vistas que utilizar la
aplicacin. Desde el cdigo de la aplicacin le indicaremos el archivo xml que queremos que
use en cada momento, de forma que nos facilitar mucho modificar el cdigo sin tener que
tocar nada del entorno grfico, y viceversa.

x /res/values: al igual que separamos el cdigo de la aplicacin de la interfaz grfica mediante
vistas, conviene hacer lo mismo con cadenas de texto, arrays, paleta de colores que usar la
interfaz Este apartado cobra importancia en la localizacin de nuestra aplicacin. Por
ejemplo, podremos definir un archivo strings.xml en /res/values-es/ y otro en /res/values/. El
primero se utilizar automticamente si el usuario tiene configurado el terminal en el idioma
espaol, mientras que en el resto de casos se utilizar el archivo que se encuentra en
/res/values/.


x AndroidManifest.xml: es el archivo de configuracin de nuestra aplicacin. En l definiremos
qu puede hacer nuestra aplicacin, es decir, informaremos al sistema de que nuestra
aplicacin puede abrir archivos mp3, abrir enlaces http o que es capaz de manejar las llamadas


34
telefnicas que recibamos. En este archivo tambin indicaremos las actividades o servicios que
ejecutar nuestra aplicacin y los permisos especiales que necesita utilizar en el caso de que
quiera acceder a recursos compartidos del sistema, como el acceso a la lista de contactos, uso
del GPS, o la posibilidad de enviar mensajes SMS.

x default.properties: es un fichero que genera automticamente Eclipse y del que no deberemos
preocuparnos inicialmente.

Configurar un AVD (Android Virtual Device)

A la hora de probar y depurar aplicaciones Android no tendremos que hacerlo necesariamente
sobre un dispositivo fsico, sino que podremos configurar un emulador o dispositivo virtual (AVD)
donde poder realizar fcilmente estas tareas. Para ello, volveremos a acceder al AVD Manager, y
en la seccin Virtual Devices podremos aadir tantos AVD como se necesiten (por ejemplo,
configurados para distintas versiones de Android). Para configurar el AVD tan slo tendremos que
indicar un nombre descriptivo, el target de Android que utilizar, y las caractersticas de hardware
del dispositivo virtual, como por ejemplo su resolucin de pantalla, el tamao de la tarjeta SD, o la
disponibilidad de GPS.





35
Y con este paso ya estamos preparados para crear nuestro primer proyecto para Android.








36
Permisos

Las aplicaciones de cualquier entorno (web, escritorio, mvil) piden la autorizacin explcita de los
usuarios para acceder a determinada informacin que puede resultar delicada para el usuario.
En Android, las aplicaciones tambin requieren de permisos para leer y escribir sobre la
informacin contenida en el dispositivo. El sistema de permisos de Android resulta til en
escenarios simples como el manejo de la informacin de contactos, hasta el uso ms complejo
de content providers y servicios que requieran de informacin suministrada de fuentes externas al
dispositivo, sobre todo de Internet dnde el escenario de ataques es ms amplio.
Nosotros debemos asegurarnos de que nuestras aplicaciones tienen los permisos adecuados para
hacer lo que queramos con la informacin de otras aplicaciones. De la misma forma, podemos
definir permisos para las otras aplicaciones que en determinado momento necesiten consultar
nuestra informacin o servicios, esto claro si decidimos hacerlos disponibles desde otros
componentes de Android.

Pidiendo permiso a otras aplicaciones o servicios
Para poder utilizar la informacin o servicios de otras aplicaciones hacemos uso del famoso
archivo AndroidManifest.xml en dnde definiremos un elemento <uses-permission>. Podemos
tener cero o muchos elementos de este tipo, definindolos todos como hijos directos del
elemento raz del archivo.
El elemento <uses-permission> requiere de la definicin de un solo atributo, android:name, dentro
del cual definimos el nombre del permiso que requiere nuestra aplicacin. Por ejemplo:
<uses-permission android:name=android.permission.ACCESS_LOCATION />
Todos los permisos del sistema empiezan con android.permission y se enumeran en la
documentacin oficial del SDK para la clase Manifest.permission
(http://developer.android.com/reference/android/Manifest.permission.html). Las aplicaciones de
terceros pueden tener sus propios permisos, para los casos en los que debers consultar su
documentacin para poder utilizarlos dentro de tus aplicaciones Android.
A continuacin se describen algunos de los permisos ms utilizados:
ACCESS_WIFI_STATE. Le permite a nuestras aplicaciones accesar a la informacin de las
conexiones WI-FI.


37
INTERNET. En caso de que nuestra aplicacin desee accesar a Internet para descargar algn dato o
para hacer uso de un widget WebView deberemos utilizar este permiso.
READ_CALENDAR, READ_CONTACTS. Y todos los permisos con el prefijo READ_ le permiten a
nuestras aplicaciones leer la informacin de los content providersincorporados en Android.
WRITE_CALENDAR, WRITE_CONTACTS. Y todos los permisos con el prefijo WRITE_ le permiten a
nuestras aplicaciones modificar la informacin de los content-providersincorporados en Android.
Los permisos se confirman en el momento en que la aplicacin se instala en el dispositivo. Para
esto, se le pedir al usuario su confirmacin para que la aplicacin pueda hacer uso de los
permisos que necesita. Por lo tanto resulta importante que selecciones slo los permisos que
realmente necesita tu aplicacin y justificar la peticin para hacer ms sencilla la instalacin de la
aplicacin. Si te encuentras probando tus aplicaciones nicamente en el emulador del SDK, este
mensaje no aparece, solamente cuando se requiere instalar en un dispositivo real.
Se puede dar el caso en el que no recibamos la autorizacin para hacer algo que necesita la
aplicacin, en los cules deberemos manejar una excepcin de tipo SecurityException que nos
informar del permiso faltante, resaltando que no siempre podr ser predecible. De todas formas
hay que tomar en cuenta que los errores provocados por la falta de verificacin de un permiso se
dan nicamente si olvidamos pedirle el permiso al usuario; ya que resulta imposible que una
aplicacin se ejecute si no se le han otorgado los permisos necesarios.

Protegiendo el acceso a nuestras aplicaciones
El otro aspecto que hay que aprender de los permisos tiene que ver con la forma en la que
protegeremos el acceso de otras aplicaciones hacia nuestra aplicacin. Si nuestra aplicacin se
conforma nicamente de actividades y de intent receivers, se implementar la seguridad hacia
afuera que abarca aspectos relacionados con las solicitudes para recibir el derecho de utilizar
recursos de otras aplicaciones.
Si por el contrario, nuestra aplicacin utiliza content providers y servicios, deberemos implementar
la seguridad hacia adentro para controlar cules aplicaciones pueden hacer tal cosa con la
informacin que consulten de nuestra aplicacin.
Hasta este punto debemos tener claro que la cuestin de seguridad no va tanto enfocada hacia el
hecho de que otras aplicaciones puedan estropear los datos, sino ms bien sobre la privacidad de
la informacin del usuario y del uso de servicios que podran incurrir en gastos. Es aqu donde se
concentran los permisos integrados en Android: si podemos leer o modificar los contactos del


38
telfono, mandar mensajes, etc. Hay que tener muy en claro si las aplicaciones que construyamos
almacenarn informacin y en caso de que as sea, el grado de delicadeza que necesitan esos
datos para analizar la estructura de seguridad prudente.
El primer paso para asegurar nuestras aplicaciones es definir los permisos dentro del
archivo AndroidManifest.xml. En este caso, en lugar del elemento <uses-permission>utilizamos el
elemento <permission>. Podemos definir de cero a varios permisos, poniendo atencin en que
sean elementos hijos del elemento raz del archivo.
La declaracin de un permiso es un poco ms complicado que usar un permiso. Para esto,
necesitamos proporcionar tres datos:
El nombre simblico del permiso. Para evitar que nuestro permiso coincida con el de alguna otra
aplicacin, se recomienda utilizar el espacio de nombres de las clases Java nuestra aplicacin. Por
ejemplo: com.androideity
Una etiqueta para el permiso. Un nombre corto que se entendible para el usuario.
Una descripcin del permiso. Un texto un poco ms extenso que sea entendible para el usuario.

Ejemplo:



Hay que mencionar que esta definicin no forzar de ninguna forma a cumplir con el permiso. Por
el contrario, lo nico que hacemos es indicar que se trata de un posible permiso. Posteriormente,
nuestra aplicacin deber marcar las violaciones de seguridad a medida que ocurran.
Existen dos formas para hacer que nuestra aplicacin haga cumplir con los permisos definidos,
dictando en dnde y bajo cules circunstancias son requeridos. Se puede hacer desde el cdigo o
en el manifiesto (que es la forma ms sencilla).

Solicitar permisos de apps externas desde el AndroidManifest

Dentro de las actividades, los servicios y los intent receivers podemos definir un atributo
llamado android:permission, cuyo valor es el nombre del permiso necesario para accesar a ese
elemento. Por ejemplo:


39



De esta manera, slo las aplicaciones que hayan solicitado el permiso indicado podrn acceder al
componente de forma segura. En este contexto, el acceso se entiende como:
Las actividades no podrn ejecutarse sin el permiso.
Los servicios no podrn arrancarse, detenerse o vincularse a una actividad sin el permiso.
Los intent receivers ignorarn los mensajes enviados a travs del mtodo sendBroadcast() a menos
que el remitente tenga el permiso.
Los content providers ofrecen dos atributos distintos: readPermission ywritePermission como se
muestra a continuacin:


En este ejemplo, android:readPermission controla el acceso para consultar al content provider,
y android:writePermission controla el acceso para insertar, actualizar o borrar informacin en
el content provider.

Solicitar permisos de apps externas desde el cdigo
En el cdigo Java, existen dos formas de asegurarnos de que las aplicaciones externas estn
solicitando los permisos necesarios:
Los servicios que utilices pueden verificar los permisos en funcin de cada llamada hecha al
mtodo checkCallingPermission(). Este mtodo retorna
PERMISSION_GRANTED o PERMISSION_DENIED, dependiendo de si la aplicacin tiene el permiso o
no. El valor que se le pasa como parmetro es el nombre del permiso que se quiere verificar.


40
Podemos incluir un permiso a la hora de llamar al mtodo sendBroadcast(). De esta forma slo los
receptores con el permiso podrn recibir la informacin solicitada. Por ejemplo, el subsistema de
Android incluye el permiso RECEIVE_SMS para saber cuando un nuevo mensaje ha sido recibido en
el telfono. De esta forma se restringe los receptores que pueden tener acceso a esta informacin.

Consideraciones extras
Para terminar este tema, tienes que saber que no existe un mecanismo que detecte los permisos
que necesita la aplicacin en tiempo de compilacin; todas las fallas de los permisos se producen
en tiempo de ejecucin. Por lo tanto, es importante que documentes todos los permisos
necesarios para utilizar alguna API pblica que hayas creado, incluyendo los content providers,
servicios y actividades que se requieren para que se puedan ejecutar otras actividades. De otra
forma, los desarrolladores que intenten interactuar con tus aplicaciones deber realizar una labor
titnica sacrificando tiempo en descubrir los permisos que necesita.
De la misma forma, toma en cuenta que los usuarios ms tcnicos confirmarn que tu aplicacin
est haciendo uso de los permisos que dijo necesitar. As que trata de documentar muy bien los
permisos de tal forma que los usuarios entiendan qu tipo de aplicacin estn instalando para que
no se sientan vulnerables a alguna aplicacin maliciosa.



41








42


ANEXO UNIDAD 1












43
Versiones

1.0 Liberado el 23 de septiembre de 2008
1.1 Liberado el 9 de febrero de 2009
1.5 (Cupcake)
Basado en el kernel de Linux 2.6.27
El 30 de abril de 2009, la actualizacin 1.5
(Cupcake) para Android fue liberada. Hubo
varias caractersticas nuevas y
actualizaciones en la interfaz de usuario en
la actualizacin 1.5:
Posibilidad de grabar y reproducir
videos a travs del modo camcorder
Capacidad de subir videos a YouTube e
imgenes a Picasa directamente desde
el telfono
Un nuevo teclado con prediccin de
texto
Soporte para Bluetooth A2DP y AVRCP
Capacidad de conexin automtica
para conectar a auricular Bluetooth a
cierta distancia
Nuevos widgets y carpetas que se
pueden colocar en las pantallas de
inicio
Transiciones de pantalla animadas
1.6 (Donut)
Basado en el kernel de Linux 2.6.29
44

El 15 de septiembre de 2009, el SDK 1.6
(Donut) fue liberado. Se incluy en esta


44
actualizacin:
Una experiencia mejorada en el
Android Market
Una interfaz integrada de cmara,
filmadora y galera
La galera ahora permite a los usuarios
seleccionar varias fotos para
eliminarlas
Bsqueda por voz actualizada, con
respuesta ms rpida y mayor
integracin con aplicaciones nativas,
incluyendo la posibilidad de marcar a
contactos
Experiencia de bsqueda mejorada que
permite buscar marcadores, historiales,
contactos y pginas web desde la
pantalla de inicio.
Actualizacin de soporte para
CDMA/EVDO, 802.1x, VPN y text-to-
speech
Soporte para resoluciones de pantalla
WVGA
Mejoras de velocidad en las
aplicaciones de bsqueda y cmara
Framework de gestos y herramienta de
desarrollo GestureBuilder
Navegacin gratuita turn-by-turn de
Google
2.0 / 2.1 (Eclair) El 26 de octubre de 2009, el SDK 2.0 (Eclair)


45
Basado en el kernel de Linux 2.6.29 fue liberado. Los cambios incluyeron:
Velocidad de hardware optimizada
Soporte para ms tamaos de pantalla
y resoluciones
Interfaz de usuario renovada
Nuevo interfaz de usuario en el
navegador y soporte para HTML5
Nuevas listas de contactos
Una mejor relacin de contraste para
los fondos
Mejoras en Google Maps 3.1.2
Soporte para Microsoft Exchange
Soporte integrado de flash para la
cmara
Zoom digital
MotionEvent mejorado para captura de
eventos multi-touch
Teclado virtual mejorado
Bluetooth 2.1
Fondos de pantalla animados
El SDK 2.0.1 fue liberado el 3 de diciembre
de 2009.
El SDK 2.1 fue liberado el 12 de enero de
2010.
2.2 (Froyo)
Basado en el kernel de Linux 2.6.32
El 20 de mayo de 2010, el SDK 2.2 (Froyo)
fue liberado. Los cambios incluyeron:
Optimizacin general del sistema
Android, la memoria y el rendimiento


46
Mejoras en la velocidad de las
aplicaciones, gracias a la
implementacin de JIT
Integracin del motor JavaScript V8
del Google Chrome en la aplicacin
Browser
Soporte mejorado de Microsoft
Exchange (reglas de seguridad,
reconocimiento automtico, GAL look-
up, sincronizacin de calendario,
limpieza remota)
Lanzador de aplicaciones mejorado con
accesos directos a las aplicaciones de
telfono y Browser
Funcionalidad de Wi-Fi hotspot y
tethering por USB
Permite desactivar el trfico de datos a
travs de la red del operador
Actualizacin del Market con
actualizaciones automticas
Cambio rpido entre mltiples idiomas
de teclado y sus diccionarios
Marcacin por voz y compartir
contactos por Bluetooth
Soporte para contraseas numricas y
alfanumricas
Soporte para campos de carga de
archivos en la aplicacin Browser
Soporte para la instalacin de
aplicacin en la memoria expandible
Soporte para Adobe Flash 10.1


47
Soporte para pantallas de alto nmero
de Puntos por pulgada, tales como 4"
720p
2.3 (Gingerbread)
Basado en el kernel de Linux 2.6.35.7 Actual en smat
El 6 de diciembre de 2010, el SDK 2.3
(Gingerbread) fue liberado.

Los cambios
incluyeron:
Soporte para dispositivos moviles
Actualizacin del diseo de la interfaz
de usuario
Soporte para pantallas extra grandes y
resoluciones WXGA y mayores
Soporte nativo para telefona VoIP SIP
Soporte para reproduccin de videos
WebM/VP8 y decodificacin de audio
AAC
Nuevos efectos de audio como
reverberacin, ecualizacin,
virtualizacin de los auriculares y
refuerzo de graves
Soporte para Near Field
Communication
Funcionalidades de cortar, copiar y
pegar disponibles a lo largo del sistema
Teclado multi-tctil rediseado
Soporte mejorado para desarrollo de
cdigo nativo
Mejoras en la entrada de datos, audio y
grficos para desarrolladores de juegos
Recoleccin de elementos
concurrentes para un mayor


48
rendimiento
Soporte nativo para ms sensores
(como giroscopios y barmetros)
Un administrador de descargas para
descargar archivos grandes
Administracin de la energa mejorada
y control de aplicaciones mediante la
administrador de tareas
Soporte nativo para mltiples cmaras
Cambio de sistema de archivos
de YAFFS a ext4
3.0 / 3.1 / 3.2 (Honeycomb)
Mejor soporte para tablets
Escritorio 3D con widgets rediseados
Sistema multitarea mejorado
Mejoras en el navegador web
predeterminado, entre lo que destaca
la navegacin por pestaas,
autorelleno de formularios,
sincronizacin de favoritos con Google
Chrome y navegacin privada
Soporte para videochat mediante
Google Talk
Mejor soporte para redes Wi-Fi
Aade soporte para una gran variedad
de perifricos y accesorios con
conexin USB: teclados, ratones,hubs,
dispositivos de juego y cmaras
digitales. Cuando un accesorio est
conectado, el sistema busca la
aplicacin necesaria y ofrece su


49
ejecucin.
Los widgets pueden redimensionarse
de forma manual sin la limitacin del
nmero de cuadros que tenga cada
escritorio.
Se aade soporte opcional para
redimensionar correctamente las
aplicaciones inicialmente creadas para
mvil para que se vean bien en Tablets
4.0 (Ice Cream Sandwich)
Versin que unifica el uso en cualquier
dispositivo, tanto en telfonos, tablets,
televisores, netbooks, etc.
Interfaz limpia y moderna con una
nueva fuente llamada "Roboto", muy al
estilo de Honeycomb.
Opcin de utilizar los botones virtuales
en la interfaz de usuario, en lugar de los
botones tctiles capacitivos.
llega la aceleracin por hardware, lo
que significa que la interfaz podr ser
manejada y dibujada por la GPU y
aumentando notablemente su rapidez,
su respuesta y evidentemente, la
experiencia de usuario.
Multitarea mejorada, estilo
Honeycomb. Aadiendo la posibilidad
de finalizar una tarea simplemente
desplazndola fuera de la lista.
Ha aadido un gestor del trfico de
datos de internet. El entorno le permite
establecer alertas cuando llegue a una


50
cierta cantidad de uso y desactivacin
de los datos cuando se pasa de su
lmite.
Los widgets esta en una nueva pestaa,
que figuran en una lista similar a las
aplicaciones en el men principal.
El corrector de texto ha sido
rediseado y mejorado, ofreciendo la
opcin de tocar en una palabra para
que nos aparezca una lista con las
diferentes opciones de edicin y
sugerencias de palabras similares.
Las notificaciones tiene la posibilidad
de descartar las que no son
importantes y tambin desplegar la
barra de notificaciones con el
dispositivo bloqueado.
La captura de pantalla, con solo
pulsando el botn de bajar volumen y
el botn de encendido.
La aplicacin de la cmara se ha llevado
un buen lavado de cara, con nuevas
utilidades como es la posibilidad de
hacer fotografas panormicas de
forma automtica.
Android Beam es la nueva
caracterstica que nos permitir
compartir contenido entre telfonos.
Va NFC (Near Field Communication).
Reconocimiento de voz del usuario
Aplicacin de telfono nuevo con la


51
funcionalidad de buzn de voz visual
que le permite adelantarlo o retroceder
los mensajes de voz.
Reconocimiento facial, lo que hara que
puedas cambiar la vista
Las carpetas son mucho ms fciles de
crear, con un estilo de arrastrar y soltar
Un nico y nuevo framework para las
aplicaciones
El usuario tendr herramientas para
ocultar y controlar las aplicaciones que
nos cuelgue la operadora de turno o
el fabricante, liberando recursos de
segundo plano (ciclos de ejecucin y
memoria ram). No obstante, no se
podrn desinstalar.
Soporte nativo del contenedor MKV
Soporte nativo para el uso de Stylus
(lpiz tctil).

You might also like