Академический Документы
Профессиональный Документы
Культура Документы
ADRINFOR S.L.
ndice
N-1 Entorno de desarrollo y primera aplicacin
1. El mundo Android
1.1 Android y las versiones
1.2 Personalizaciones del sistema operativo.
1.3 Dispositivos Android
2. El entorno de desarrollo
2.1 El mundo "Eclipse"
2.2 Descargar e instalar Eclipse
3. Emular un dispositivo Android
4. El primer proyecto Android
Otro ejemplo
Ms detalles de los ejemplos
5. Ficheros y partes de un proyecto Android
5.1 Partes de un proyecto
5.2 Carpetas de un proyecto
5.3 Resultado del proyecto
6. La programacin orientada a objetos
6.1. Introduccin a la POO (programacin orientada a objetos)
De la programacin estructurada al enfoque orientado a objetos
6.2 Elementos bsicos de la POO
Las clases
Los Objetos
Los miembros de una clase
6.3 Los tres pilares de la Programacin Orientada a Objetos
Herencia
Encapsulacin
Polimorfismo
6.4 Jerarqua de clases
Relaciones entre objetos
Herencia
Pertenencia
Utilizacin
Reutilizacin
7. Actualizar versin
7.1 Aviso de nueva versin
7.2 Problemas importando proyectos
Diferentes SDK
Ejercicios
Ejercicio 1. Instalar el entorno de trabajo
3
3
3
6
6
6
7
8
14
23
34
38
48
48
49
54
58
58
58
59
59
60
60
60
61
62
63
63
64
64
64
65
65
65
65
69
70
73
73
2/73
1. El mundo Android
1.1 Android y las versiones
Android, como todos los sistemas operativos ha tenido y seguir teniendo distintas versiones. Este
asunto de las versiones es ms importante de los que parece porque nos hace plantearnos sobre qu
versin debemos desarrollar nuestras aplicaciones.
No nos centraremos en una en concreto, sino que estudiaremos los mtodos generales de programacin
que sern vlidos para cualquier versin, incluida la 3.0 destinada a tabletas y la vigente, 4.3 (Jelly
Bean). Esta versin se present el 24 de julio de 2013, ya los incorporan varios terminales y se
generalizar a lo largo del ao 2.013. Pero sobre todo se generalizarn las Jelly Bean previas (4.1 y 4.2)
Las distintas versiones instaladas en los terminales, hacer que sea un defecto y que haya producido una
fragmentacin entre las distintas ediciones. Esto es, hay muchos tipos de dispositivos de varios
fabricantes con versiones distintas, desde la 1.6 hasta la 4.3. En el mundo Iphone esto es ms
homogneo, ya que es mucho ms sencillo su actualizacin al tratarse de un nico fabricante con un
solo modelo de terminal. Es algo similar al mundo Apple contra el mundo Windows. En los equipos
Apple, basta con escribir y probar el cdigo para el hardware, siempre el mismo, de los Mac. En
cambio Windows debe trabajar con cientos de fabricantes distintos, miles de tarjetas de vdeo, sonido y
dispositivos distintos.
3/73
Como primer dato destacable est que las versiones "Jelly Bean" ya superan al que era la versin ms
utilizada que era la "GingerBread". Grficamente esta es la distribucin aproximada:
Como seguramente ya conoces, cada versin viene asociada a un nombre que en este mundo Android
es:
4/73
Versin Android
Versin SDK
Nombre
Kernel de Linux
Fecha
1.5
Cupcake
2.6.27
abril/2009
1.6
Dount
2.6.29
septiembre/2009
2.0 / 2.1
5/6/7
Eclair
2.6.29
octubre/2009
2.2
Froyo
2.6.32
mayo/2010
2.3
GingerBread
2.6.35.7
Diciembre/2010
2.3.3
10
GingerBread
11/12/13
HoneyComb
2.6.36
Febrero/2011
14/15
Ice Cream
3.0.1
Octubre/2011
16/17/18
Jelly Bean
3.0.31
4.4
--
Kit Kat
Febrero/2011
El crecimiento ha sido rapidsimo pero ahora ha llegado a su madurez con la 4.0. Por ejemplo, la
velocidad del mercado hizo que Android no estuviera del todo preparado para las tabletas o "tablets"
cuando Apple revolucion el mundo con su Ipad. La versin de Android por entonces, no soportaba el
potencial grfico necesario para las tabletas y tuvo que hacerse de forma inmediata una actualizacin
exclusiva para tabletas, la 3.0.
Durante un tiempo existan dos versiones, una para telfonos con "GingerBread" (2.3.3) y otra para
tabletas con "HoneyComb" (3.0). La siguiente versin, la 4.0 Ice Cream ha unificado los dos tipos de
dispositivos y ya no es necesario una versin especial para tabletas, sino que la misma versin incluye lo
necesario para desarrollar en cualquier dispositivo. Por eso, nunca veremos la HoneyComb 3.0 en los
telfonos, ya que, como hemos dicho, fue una compilacin especial para tabletas.
Como curiosidad, los nombres elegidos por Google son postres o dulces y siguen un orden alfabtico
(ahora vamos por la "J" de "Jelly Bean"). Por eso veremos cada logo de Android como un postre o un
dulce:
Documentacin externa
En el siguiente enlace tienes la pgina oficial de Jelly Bean de Google. Antala bien
porque es el "principio" de todo lo relativo al desarrollo e informacin de esta versin de
sistema operativo
Acceso a la pgina de inicio de Jelly Bean de Google
Por si hubiera poca fragmentacin, la versiones siguen avanzando. Como puedes ver en la tabla, a pesar
5/73
Por si hubiera poca fragmentacin, la versiones siguen avanzando. Como puedes ver en la tabla, a pesar
de que la versin 4.0 est relativamente poco implantada, ya hay nombres para las siguientes versiones
de Android, que corresponde a este ltimo android (Kit Kat). Como curiosidad, el nombre de Kit Kat ha
sido de mtuo acuerdo con Nestl. Donde incluso con la compra de estas conocidas chocolatinas se
puede ganar un Nexus. Cosas del mrketing.
Ante todo esto, est claro que debemos aprender a programar en Android, sin centrarnos en una
versin concreta. De esta forma nuestras aplicaciones irn destinadas a la mayora de los dispositivos.
2. El entorno de desarrollo
Android est basado en Java, as que este es el lenguaje que nos toca aprender en este curso. Pero cmo
6/73
Android est basado en Java, as que este es el lenguaje que nos toca aprender en este curso. Pero cmo
escribiremos el cdigo? Pues acudiendo a un entorno de desarrollo. Por ejemplo, en el mundo
Microsoft .NET tiene su entorno de desarrollo para VB.Net o C#.net. Java tambin tiene su entorno
JDK para desarrollar aplicaciones en Java.
Existe un entorno de desarrollo, ampliamente utilizado en ciertos entorno, llamado Eclipse que permite
personalizarlo para que soporte Android. Vamos a ver ahora cmo instalar y configurar este entorno.
Noticias de prensa
Hay posibilidad de desarrollar en otros lenguajes pero no es el estndar de Google. Hay
complementos para Visual Studio procedentes del conocido (en el mundo del desarrollo)
proyecto mono para utilizar Visual C# En lugar de Java. Tambin hay algunas adaptaciones
con un lenguaje de estilo Visual Basic de otro fabricante, pero ambas son de pago. As que
nos centraremos en el estndar de Google con Eclipse y Java.
Acceso al proyecto Mono
Acceso a Basic for Android
7/73
El entorno de desarrollo integrado (IDE) de Eclipse emplea mdulos (en ingls plug-in) para
proporcionar toda su funcionalidad al frente de la plataforma de cliente enriquecido, a diferencia de
otros entornos monolticos donde las funcionalidades estn todas incluidas, las necesite el usuario o no.
La filosofa del proyecto Eclipse queda clara con una definicin se su software es: "una especie de
herramienta universal - un IDE abierto y extensible para todo y nada en particular".
Para poder realizar nuestra primera aplicacin necesitaremos tener configuradas estos tres entornos o
programas
Instalar la versin estndar de Eclipse
Instalar los complementos para Android
Configurar un emulador de Android
La primera parte ser la de descargar e instalar el entorno Eclipse. Hasta hace muy poco tenamos que
descargar Eclipse y luego realizar las personalizaciones necesarias para aadir el soporte para Android.
Por suerte, esto ya no es necesario, as que lo tenemos ms fcil.
8/73
Para empezar nos iremos a la pgina principal de los kit de desarrollo de Android, dentro de Google:
Ir a la pgina de desarrollo de Android
Una vez en esta pgina pulsaremos para descargar el kit de desarrollo:
Una vez descargados los 400Mb de que se compone, descomprimimos el fichero y vemos estas
carpetas:
9/73
Que corresponde a la ltima versin Jelly Bean (4.3). Efectivamente, si ejecutamos el "SDK Manager",
que tenemos en la carpeta raz de lo que nos hemos descargado:
10/73
Puesto que queremos instalar tambin la versin 2.3.3 debemos aadirlas, as que las marcaremos
11/73
IMPORTANTE!
Puede que no se inicie Eclipse, mostrndonos este mensaje en pantalla:
12/73
Un "workspace" es un espacio de trabajo. Ser donde crearemos y almacenaremos todos los proyectos
que realicemos. Cerramos la pgina de bienvenida y vemos por fin el entorno de trabajo. Si hacemos
clic en "New" podemos ver que podremos crear proyectos para Android:
Ya tenemos listo nuestro entorno. El siguiente paso ser preparar un emulador de nuestro sistema
Android para poder probar las aplicaciones.
Si en el momento de ejecutar el SDK Manager tuviste algn problema, puedes ejecutarlo desde Eclipse
en la opcin:
13/73
14/73
La primera y principal pantalla nos muestra los dispositivos que hemos creado:
15/73
De momento no tenemos emuladores creados, as que vamos a crear el primer emulador pulsando en
"New":
Le ponemos un nombre cualquiera (sin espacios en blanco y sin caracteres especiales) y seleccionamos
la versin que queremos. Podemos comprobar que nos aparecen las versiones de API que hemos
descargado. Vamos a seleccionar por ejemplo la 2.3.3, una resolucin WVGA y seguimos
configurando:
16/73
Le hemos aadido el soporte para que "virtualice" una tarjeta SD de 1 Gb de memoria. Pulsamos en
"Create AVD" para que nos cree el dispositivo virtual y al cabo de unos segundos lo tendremos en
nuestra lista:
Si nos fijamos en la segunda solapa, podremos ver los distintos dispositivos con Android que se han ido
fabricando. Cada uno con sus especificaciones de resolucin de pantalla. Desde el ms bsico hasta el
ltimo Nexus 7:
17/73
Ya podemos iniciarla. Al pulsar en "Start" nos pedir el formato de pantalla que queremos:
Puesto que las pantallas de los terminales tienen ms densidad de puntos que los monitores de
ordenador, la pantalla saldrn bastante grande ya que ser fiel a esos 240 puntos de densidad. Pero no
importa, indicamos "launch" y comenzar la emulacin del dispositivo:
18/73
Como vemos, el emulador muestra el aspecto de la versin 2.3.3. En la parte izquierda est la pantalla,
totalmente operativa con el ratn, y en la derecha los botones que tendramos en nuestro terminal.
Anotacin
Dependiendo de la versin instalada podemos tener un aspecto distinto en esta pantalla.
Veamos ahora otra emulacin, pero primero apaguemos este terminal. Pulsamos unos segundos sobre el
botn de apagado del teclado de la derecha hasta que nos muestra la conocida pantalla del modo
silencioso, avin o apagado.:
Lo apagamos del todo. Si no responde, no pasa nada cerramos la ventana de emulacin. Creamos ahora
una nueva mquina virtual con estos parmetros:
19/73
La resolucin es algo baja (480x800) pero no importa, veremos el impacto de estos valores. Tendremos
otra mquina virtual preparada:
Tenemos las dos listas, una con la API 10 y otra con la 18. En la ejecucin de esta que hemos creado
con 4.3 (Jelly bean) indicaremos en la ejecucin un aspecto grfico distinto para que no sea tan grande
en pantalla:
20/73
Por ejemplo, hemos pulsado en el "?" para que nos ayude con un tamao adecuado. Le indicamos en la
pantalla que nuestro monitor es de 21" y tiene una resolucin de 1920x1080. Esto equivale a 105
puntos de densidad. Fjate la enorme diferencia con los 320 puntos de densidad de una pantalla de
telfono. Aceptamos y ejecutamos la mquina virtual. Veremos que ahora el tamao en pantalla es ms
pequeo:
Tambin observamos que la interfaz es distinta ya que corresponde a la nueva de la versin 4.3 o "Jelly
Bean". Tambin podemos comprobar que el tamao es demasiado pequeo. Lgico, lo que hemos
hecho es simular una pantalla de un mvil de 4" en nuestro monitor:
21/73
Si la medimos en el monitor ser exactamente de 4", pero como la densidad del monitor es inferior la
visin ser muy pobre. Nos indica que la escala es de 0,45, es decir algo menos de la mitad de la
pantalla. Para tener la misma calidad que el telfono mvil necesitamos dos veces el tamao que hemos
definido. De momento no tocaremos esta opcin para que se inicie a pantalla completa como el caso
anterior.
Configurar y poner en marcha un emulador
Por comodidad y por ser ms fiel a la realidad no escalaremos la vista y dejaremos la predeterminada de
480x800.
IMPORTANTE!
Las pantalla de los telfonos de gama alta empiezan a ser HD y Full HD,
incorporando una resolucin de 1.280x720 y de 1.920x1.080. Estas resoluciones
equivalen a una densidad de 316 puntos por pulgada en un, por ejemplo, Galaxy
Nexus ( o 1.280 x 800 con un Nexus 7). Tenemos que tenerlo en cuenta si queremos
realizar aplicaciones con esta resolucin, ya que tendramos que indicarlo en la
mquina virtual de Android.
Como curiosidad, la resolucin mxima que puede distinguir el ojo humano es de 300 ppp (es lo que se
dice aunque no est del todo claro). Iphone 5 tiene una resolucin de 1.136x640 (906x640 en el Iphone
4), pero al ser una pantalla ms pequea (3,5") que el Galaxy Nexus la densidad es de 326ppp. Una
resolucin excelente con su famosa "Retina Display" que indicaba la calidad de esta pantalla. El nuevo
IPAD II de Apple, presentado en marzo/2012 tambin ha incrementado notablemente su densidad de
puntos, hasta conseguir esas densidades. Pero nuevamente ha ganado Google con su tableta Nexus 10.
En Android, terminales como el Galaxy Nexus, Nexus 4 o Samsung Galaxy SIV ya pueden compararse
en este aspecto de densidad de puntos. La carrera de las resoluciones sigue avanzando. Los terminales
de gama alta comienzan a tener todos "full hd", que son 1.920 x 1.080. Es la misma resolucin que
tenemos en una televisin de 40 50 pulgadas en cada pero en una pantalla de 4,5 5 pulgadas!.
Incluso la tablet Nexus 10 supera ya esa resolucin para llegar hasta los 2.560 x 1.600 pxeles que
hacen una densidad de puntos de 300 dpi, superando a la todopoderosa Ipad (2.048x1.536 conuna
densidad de 266dpi)
Resumiendo las resoluciones y tamaos de pantalla, echemos un vistazo a esta tabla:
22/73
Vemos los grupos de la izquierda de las pantallas ms pequeas hasta las ms grandes y luego las
distintas resoluciones en las columnas dela derecha.
Tampoco hay que olvidar que Android no es solo telfonos. Dispositivos como reproductores
multimedia para las televisiones proporcionan una salida den "full HD", que corresponde a 1.920 x
1.080 puntos.
23/73
Al ver esta pantalla de seleccin de proyectos, recordamos la versatilidad de este entorno. Adems de
proyectos Java y otros menores, vemos que hemos podido integrar en l proyectos Android. La
personalizacin de Eclipse, hecha por Google para desarrollo en Android, ha sido la que ha aadido
este tipo de proyectos. Esta opcin equivale a la que tenemos de forma directa:
24/73
Indicamos, como vemos, que ser para la API10 o versin 2.3.3. Ojo, no significa que solo funcionar
en esta versin sino que utilizar el kit de desarrollo de ella. Lgicamente todas versiones superiores
sern capaces de ejecutar la creada en esta versin. La seleccin "Theme" para el aspecto grfico la
dejaremos en "None". La razn es que para tener el aspecto grfico Holo, debemos tener como mnimo
la API 15 de Android 4.0 que fue la que introdujo este estilo. Continuamos...
25/73
Atento la opcin de "Create activity" que veremos enseguida. Continuamos e indicamos los iconos de la
aplicacin:
26/73
Hemos indicado antes que nos cree unas "Actividad", que es el nombre de la pantallas de Android. En
este paso nos pregunta cmo queremos esta actividad. Indicaremos que queremos una en blanco:
27/73
28/73
Podemos ver las distintas pantallas en las que se compone el entorno Eclipse. Muchas de las vistas son
jerrquicas, pudiendo desplegar con el ratn los distintos componentes hasta llegar, por ejemplo, al
contenido del esqueleto del cdigo de esta aplicacin. Abrimos la rama "src" para llegar hasta el cdigo
Java que crea esta aplicacin. En la parte central podemos ver el cdigo que disponemos para la
creacin de este objeto o aplicacin:
Aunque todava no haga nada, vamos a ejecutarla. Para esto nos iremos a esta opcin de la barra de
botones que corresponde con "Run as"
29/73
Le estamos indicando que queremos ejecutarlo como una aplicacin Android. As el entorno Eclipse
sabe que debe lanzar un emulador para poner en marcha la aplicacin.
Anotacin
Si no te aparecen estas opciones, comprueba que tienes marcado el ttulo del proyecto en el
explorador de archivos:
30/73
Esto har, como hemos dicho, que se ejecute el emulador y dentro de l la aplicacin. De la misma
forma que se ejecutara en un terminal mvil. Antes de ejecutar la aplicacin vamos a aadir una pestaa
llamada "Console" para que nos muestre informacin de los procesos que hace Eclipse. Si no la tienes
en la parte inferior, la aadimos desde esta opcin:
Marcamos en la parte derecha que nos muestre los mensajes generados por Android. (Si no se activa la
opcin esperamos a que se ejecute el emulador). Ahora pulsamos ya en ejecutar la aplicacin. Al
generarse podemos ver los pasos realizados y que, efectivamente, lanzar el emulador:
31/73
Y por fin, aparecer ejecutndose nuestro primer programa de Android. Si vemos la consola,
entenderemos los pasos que ha realizado. Una vez que hemos desbloqueado el terminal Eclipse ha
seguido funcionando enviando la aplicacin al emulador:
La ha instalado como si se tratara de un mvil y finalmente la ha ejecutado. Adems, incluye una opcin
de men. Si pulsamos en el botn de men:
32/73
Si, muy bien, pero funcionar en mi mvil? Pues si, y lo vamos a comprobar. Exploremos las carpetas
del proyecto:
En la carpeta "Bin" podemos ver que tenemos el paquete de programa listo: Hola_mundo.apk. Si lo
copiamos a nuestro Android lo instalar y funcionar a la primera!
33/73
Anotacin
Para que se puedan instalar aplicaciones que no se descargan directamente del "market",
debemos tener esta opcin marcada, de lo contrario no nos dejara.
Otro ejemplo
Vamos con otro ejemplo, esta vez ms complejo pero con el que slo queremos ver cmo generarlos y
abrirlos para probarlos. Primero cerramos el proyecto anterior:
Aun as veremos que en el entorno de desarrollo sigue apareciendo. No pasa nada, en nuestro entorno
de trabajo tendremos habitualmente varios proyectos. Es el concepto "workspace" o espacio de trabajo.
Si an as, para no confundirnos queremos eliminar el proyecto del espacio de trabajo lo haramos con
el botn derecho en el proyecto y seleccionando:
34/73
Que indica que simplemente nos borrar del entorno de trabajo las referencias del proyecto anterior. Si
marcamos la casilla de verificacin, eliminaremos adems el proyecto de nuestro disco. Sigamos
practicando. Creamos un nuevo proyecto:
En este caso ser el proyecto de ejemplo de Android, de los que hemos descargado con el SDK:
35/73
36/73
Podemos ver que tenemos una buena coleccin de ejemplos de todo tipo, desde utilizacin de sensores a
un bloc de notas o pequeos juegos. Escogemos uno cualquiera y continuamos...
Una vez en el entorno de desarrollo, utilizamos la misma opcin que el caso anterior de "ejecutar como"
(Run as) aplicacin Android, pero esta vez desde el men:
37/73
Anotacin
Recuerda tener marcado el nombre del proyecto en la parte izquierda:
Anotacin
Hay opciones del emulador que se pueden acceder por el teclado. Ten en cuenta estos
atajos porque te facilitarn mucho su manejo:
Opciones del emulador
38/73
Queremos importar a nuestro espacio de trabajo un proyecto almacenado. Pulsamos entonces la opcin
"Import".
Como vemos, hay una amplia seleccin de elementos que queremos incorporar al "workspace". Esta
39/73
Como vemos, hay una amplia seleccin de elementos que queremos incorporar al "workspace". Esta
opcin la utilizaremos a menudo cuando incorporemos otros elementos como grficos o ficheros
adicionales. En nuestro caso seleccionamos "Existing Projects into Workspace", o lo que es lo mismo,
una proyector existente en nuestro espacio de trabajo.
Pulsamos en el botn "browse" para seleccionar la carpeta de nuestro espacio de trabajo, el que le
indicamos al iniciar Eclipse. Al seleccionarlo nos mostrar en la parte inferior los proyectos disponibles.
Seleccionamos el que queremos y lo importamos:
Ya lo tenemos incorporado. Esta ser una prctica habitual, ya que iremos incorporado los proyectos
que iremos creando.
Anotacin
Cuando tengamos ms de un proyecto en el espacio de trabajo tenemos que asegurarnos de
que hemos marcado el proyecto adecuado al ejecutarlo, de lo contrario puede que se
ejecute el que no queremos.
40/73
Sigamos con el ejemplo para poder modificar ese mensaje de texto en ingls que nos mostraba nuestra
primera aplicacin. Nos desplazaremos por sus carpetas hasta encontrar un fichero llamado
"activity_main.xml" dentro de la carpeta "layout" de "res". Si hacemos doble clic en l, veremos algo
muy interesante en la parte derecha de Eclipse:
41/73
Se trata del editor que nos va a permitir disear nuestras pantallas o "activities" de Android.
En esta pantalla tenemos los componentes para crear las interfaces de nuestras aplicaciones. Como
vemos en la pantalla, en la parte derecha tenemos el texto que luego nos muestra la ejecucin del
programas. De momento exploremos este rea porque es densa en contenido y la utilizaremos muy a
menudo.
42/73
Anotacin
Si la pantalla central queda muy pequea tienes unos botones de zoom en la parte superior
derecha:
Veremos que estn las dos cadenas de texto que se muestran en pantalla. Vamos a cambiar el texto de la
primera "hello", escribiendo por ejemplo:
43/73
Luego veremos si se actualiza este texto en la ejecucin del programa. Volvamos al diseo de la
pantalla. Revisando un poco este rea de diseo, vemos que nos indica un tamao de la pantalla en la
zona superior izquierda:
El tamao del rea de trabajo depende de la resolucin que tengan los telfonos o tabletas. Para definir
este tamao podemos indicarlo desde ese desplegable superior. Como vemos, tenemos los terminales
oficiales de Google: Nexus One, Nexus S, Galaxy Nexus y Nexus 4. Adems dos formatos de tableta y
la opcin de definir uno personalizado. Trataremos con estos formatos de resolucin ms adelante. La
tendencia es evidente, cada vez ms densidad de puntos por pantalla, es decir ms resolucin. No
confundamos tamao con resolucin. Las televisiones "full HD" (1.920x1.080) van desde tamaos de
20" hasta 60". Lgicamente la densidad de puntos es mayor cuanto ms pequea y, por tanto, la
calidad. Aunque en las televisiones se cuenta que la distancia de visionado es mucho mayor, por lo que
no se aprecia esa prdida de densidad.
Finalmente, en la parte central de esta pantalla de edicin disponemos del cdigo XML que define lo
que hemos aadido a nuestra aplicacin:
44/73
Define un formato de pantalla "lineal", es decir, un "widget" o un elemento de pantalla detrs de otro.
45/73
Define un formato de pantalla "lineal", es decir, un "widget" o un elemento de pantalla detrs de otro.
Veremos detenidamente estos formatos ms adelante. Dentro de estas etiquetas tenemos una definicin
de un "TextView" que es un texto a escribir en pantalla. Este texto contiene un enlace a la variable
"@string/hello" que definimos en el grupo de "strings" que vimos anteriormente. Ahora arrastramos un
control de tipo "TextView" debajo del que ya tenemos:
Y el XML con:
Modifiquemos este segundo cuadro de texto desde esta pantalla con este texto:
46/73
Aparece en la derecha este segundo texto que hemos incluido pero el primero no est actualizado. Esto
es porque no est grabado el fichero "strings.xml" que modificamos antes. Vamos a ejecutar el
programa, nos pedir si queremos salvar los cambios y veamos que aparece en el emulador.
Y s, ha funcionado.
Ms detalles de las aplicaciones
Ya vamos aprendiendo muchas cosas, ya sabemos crear un proyecto y acceder a la zona donde se
47/73
Ya vamos aprendiendo muchas cosas, ya sabemos crear un proyecto y acceder a la zona donde se
disean las pantallas. Ahora pasaremos a estudiar las partes de un proyecto.
Ayuda
Hemos creado varias mquinas virtuales con distintas versiones:
Nombre
Nombre de proyecto
Nombre de la aplicacin
Nombre de la aplicacin.
Si revisamos los pasos que realizamos al principio, esta es la informacin que nos solicitaba.
En el mundo Android, una "Activity" es una ventana que contiene la interfaz de usuario de nuestra
48/73
En el mundo Android, una "Activity" es una ventana que contiene la interfaz de usuario de nuestra
aplicacin. Una aplicacin puede tener varias pantallas o puede no tener ninguna. Por ejemplo, un
servicio que est ejecutando tareas de fondo puede no necesitar una ventana de interfaz de usuario.
El fichero de formato "xml", llamado "main.xml" es el que contena la definicin de la actividad o
"Activity". Es el que utilizamos en el ltimo ejemplo para mostrar un segundo texto en pantalla.
Veamos una descripcin de estas carpetas y ficheros. Atento a estas descripciones porque es muy
importante que conozcamos esta estructura:
49/73
Carpeta
Nombre
Androidmanifest.xml
Fichero XML que describe cmo se va a construir la aplicacin y de que partes se compone:
servicios, actividades, ... Adems especificaremos los permisos que necesitamos en nuestra
aplicacin.
bin/
libs/
res/
Carpeta para almacenar los recursos de nuestra aplicacin. Por ejemplo, los grficos,
iconos, cadenas en varios idiomas, ...
src/
assets/
Otros ficheros que se empaquetan con la aplicacin para instalarse en el dispositivo. Por
ejemplo, archivos de bases de datos, HTML, ficheros de texto
gen/
build.xml y *.properties
proguard.cfg
Android xxx
Contiene un fichero "android.jar" con todas las bibliotecas de clases necesarias en una
aplicacin Android.
Cuando creamos un proyecto, le hemos proporcionado el nombre de una actividad para la aplicacin.
Si vemos el rbol de ficheros de la rama "src":
"src" o "source" es la carpeta donde escribiremos nuestro cdigo Java para la aplicacin Android. Ah
50/73
"src" o "source" es la carpeta donde escribiremos nuestro cdigo Java para la aplicacin Android. Ah
recogeremos todos los elementos creados en la zona "res", donde se ubican las pantallas definidas por el
usuario, y las presentaremos con el cdigo adecuado. En este caso, el asistente de creacin del proyecto
me solicit si queramos crear tambin la actividad. Al indicar que si, nos puso, a modo de ejemplo,
este cdigo vlido de inicio.
El fichero que genera, llamado "R" es el que contiene los recursos del programa: pantallas, grficos, ...
vemos por ejemplo que dentro de "string" estn las dos cadenas de ejemplo y dentro de "layout" la
pantalla donde estn insertados estos y que se llama, por defecto, "main".
Si seleccionamos alguno de ellos, podemos ver su cdigo fuente a la derecha, donde se indica que es un
fichero generado automticamente y que no debemos modificarlo:
51/73
Contiene, como hemos comentado antes, todos los recursos de nuestro proyecto. Si nos fijamos en lo
que tenemos por defecto, podemos ver el icono de la aplicacin en tres resoluciones distintas (hdpi, ldpi,
mdpi):
Sern iconos para los distintos formatos o resoluciones de los dispositivos. Las subcarpetas de esta zona
de recursos son:
52/73
Vimos que esto daba como resultado una salida en pantalla de las dos cadenas de caracteres: una fija con
"Y la he hecho yo solo, Jose" y otra basada en una variable "@string/hello". Esta ltima definicin "@"
indica que se trata de una cadena de este fichero de recursos:
Para qu puede servir esta idea de los recursos? En principio parce que nos complica la aplicacin ya
53/73
Para qu puede servir esta idea de los recursos? En principio parce que nos complica la aplicacin ya
que tendramos que definir todos los literales que queremos poner en las pantallas. Pero imaginemos
ahora que queremos hacer multiidioma nuestra aplicacin. Si fuera as, bastara con indicar los literales
correctos del archivo de recursos en lugar de tener que definir una pantalla para cada idioma con sus
textos traducidos.
Partes de un proyecto
En este fichero indicamos todos los parmetros importantes para la compilacin del proyecto:
actividades, nombres, recursos, permisos, ... Para mantener este fichero Eclipse nos proporciona una
gran ayuda. Vemoslo haciendo doble clic sobre l:
54/73
Este fichero, como todo fichero XML almacena informacin estructurada. Esta informacin tiene varios
mbitos que podemos ver reflejados en las solapas inferiores que hemos marcado en la imagen anterior.
Todas estas solapas nos permiten mantener el fichero "AndroidManifiest.xml":
Podemos ver el contenido generado por las solapas. Tenemos la informacin de la aplicacin, versin
55/73
Podemos ver el contenido generado por las solapas. Tenemos la informacin de la aplicacin, versin
de android (sdk:10), la pantalla de inicio (activity), nombre de la aplicacin, compuesta tambin de una
cadena de caracteres del fichero de recursos "@string/app_name", ...
La primera lnea indica el nombre del paquete "Package" que es el que indicamos en la creacin del
proyecto. Las siguientes lneas identifican la versin de la aplicacin. En concreto, "VersionName" ser
el nmero que los usuarios vern en las aplicaciones de los dispositivos. Este valor puede ser una
cadena de caracteres.
El otro valor que identifica la versin "VersionCode", debe ser numrico y debe llevar la lgica de que
las nuevas versiones sern de un nmero mayor que las anteriores. De esta forma, la tienda de android
"AndroidMarket", o como se llama ahora "Play Store" sabr cuando tenemos una nueva versin del
programa para avisarnos de si queremos instalarlo. Estos valores podemos modificarlos en la solapa
"manifest"
Podemos ver que a la derecha de "Version Name" tenemos la posibilidad de hacer un "browse". Esto es,
nos permite buscar y elegir una cadena de caracteres para este campo que hemos dicho antes que era
precisamente eso, una cadena de caracteres. Si le pulsamos en explorar podemos ver:
56/73
Es decir, va a explorar la zona de recursos de las cadenas de caracteres, donde nos muestra las que hay
definidas en el fichero que ya conocemos de "strings.xml":
Todo va encajando y vemos que tenemos centralizados los recursos en esa carpeta y que podemos
utilizarlos para incluirlos en distintas partes del nuestro proyecto.
Anotacin
No hemos hablado todava de ese men que nos ha creado el ejemplo. Esto lo dejaremos
para ms adelante. Ahora nos centraremos en los aspectos generales de una aplicacin
sencilla.
La seccin "<application>" representa el ncleo de este importante fichero. Por defecto, un proyecto
57/73
La seccin "<application>" representa el ncleo de este importante fichero. Por defecto, un proyecto
lleva una actividad o una pantalla de aplicacin que es la que aparece como principal. En la definicin
de la aplicacin podemos ver las variables que indican su nombre y el icono, ambos de la seccin de
recursos (android:icon y android:label)
A largo del curso iremos viendo secciones de este fichero porque ser muy importante de cara a la
correcta instalacin y ejecucin de nuestros programas.
58/73
Veamos este concepto de otra forma: una clase es el conjunto de especificaciones o normas que definen
cmo se va a crear un objeto, es decir, las instrucciones para crear ese objeto. Una clase es la
representacin abstracta de algo y el objeto es la representacin concreta de lo que una clase define.
59/73
Los Objetos
Por un lado tenemos una clase que es la que define un "algo" con lo que podemos trabajar. Pero para
que ese "algo" no sea un "nada", tendremos que poder convertirlo en "algo tangible", es decir,
tendremos que tener la posibilidad de que exista. Aqu es cuando entran en juego los objetos, ya que un
objeto es una clase que tiene informacin real.
Digamos que la clase es la "plantilla" a partir de la cual podemos crear un objeto en la memoria. Por
ejemplo, podemos tener varios objetos del tipo Cliente, uno por cada cliente que tengamos en nuestra
cartera de clientes, pero la clase slo ser una. Dicho de otra forma: podemos tener varias instancias en
memoria de una clase. Una instancia es un objeto (los datos) creado a partir de una clase (la plantilla o el
cdigo).
En nuestros formularios o actividades: tenemos 10 botones por ejemplo y todos han sido creados a
partir de la clase "Botn". La clase es la teora y el objeto la prctica. El manual de instrucciones para
crear el objeto. Y con el ejemplo del coche... podemos crear diferentes coches a partir de la clase
"Coche" y cada uno puede tener sus propias propiedades: color, ... pero funcionan todos igual
60/73
Polimorfismo
Anotacin
En algunos sitios veremos un cuarto requisito: la abstraccin, pero este ltimo est
estrechamente ligado con la encapsulacin, ya que, de hecho, es prcticamente lo mismo,
aunque ahora lo veremos...
Herencia
Esta es la caracterstica ms importante de la POO.
La herencia permite crear nuevas clases a partir de clases existentes. La herencia puede simplificar el
diseo de la aplicacin proporcionando una estructura de relaciones entre las distintas clases. Tambin
admite la reutilizacin de cdigo porque slo se debe codificar el comportamiento de clases nuevas o
distintas.
Una relacin de herencia es una relacin en la que un tipo (el tipo derivado) se deriva de otro (el tipo
base), de tal forma que el espacio de declaracin del tipo derivado contiene implcitamente todos los
miembros de tipo no constructor del tipo base.
Un poco ms claro. La herencia es la capacidad de una clase de obtener la interfaz y comportamiento de
una clase existente.
Y otra vez: La herencia es la cualidad de crear clases que estn basadas en otras clases. La nueva clase
heredar todas las propiedades y mtodos de la clase de la que est derivada, adems de poder modificar
el comportamiento de los procedimientos que ha heredado, as como aadir otros nuevos.
Es decir, tengo una clase que es por ejemplo un coche. La herencia me dice que puedo crear un objeto
coche a partir de este y que va a "heredar" todas sus caractersticas y adems podr personalizarlo a mi
gusto. Resumiendo: gracias a la herencia podemos ampliar cualquier clase existente, adems de
aprovecharnos de todo lo que esa clase haga... De momento la clase es ese "coche" que os he
comentado, enseguida veremos la definicin de clase.
Para que lo entiendas mejor, veamos otro ejemplo clsico: Supongamos que tenemos una clase Gato que
est derivada de la clase Animal. El Gato hereda de Animal todas las caractersticas comunes a los
animales, adems de aadirle algunas caractersticas particulares a su condicin felina. Podemos decir
que un Gato es un Animal, lo mismo que un Perro es un Animal, ambos estn derivados (han heredado)
de la clase Animal, pero cada uno de ellos es diferente, aunque en el fondo los dos son animales. Esto es
herencia: usar una clase base (Animal) y poder ampliarla sin perder nada de lo heredado, pudiendo
ampliar la clase de la que se ha derivado (o heredado).
En ocasiones podrs ver los trminos de otra forma, por ejemplo otra definicin es que partiendo de
una clase llamada clase base, padre o superclase (para decir jerrquicamente que es ms importante que
la otra) podemos crear una nueva clase llamada derivada, hija o subclase. As de una clase podemos
derivar una subclase y otra dentro de esta... creando una jerarqua de clases.
En una jerarqua de clases hay unos elementos de ms nivel que otros y que para referencia a los
menores lgicamente tendr que indicar quin es su padre jerrquicamente. Por ejemplo:
61/73
Programa -> pantalla -> cuadro de texto -> contenido del cuadro de texto
Encapsulacin
La encapsulacin es la capacidad de contener y controlar el acceso a un grupo de elementos asociados.
Las clases proporcionan una de las formas ms comunes de encapsular elementos.
La encapsulacin es la capacidad de separar la implementacin de la interfaz de una clase del cdigo que
hace posible esa implementacin. Esto realmente sera una especie de abstraccin, ya que no nos
importa cmo est codificado el funcionamiento de una clase, lo nico que nos debe interesar es cmo
funciona...
Digamos que una clase es un elemento de Android (como un texto o un botn) que tiene unas
propiedades (color, fuente), mtodos y eventos (clic). Cuando decimos la implementacin de la interfaz
de una clase, nos referimos a los miembros de esa clase: mtodos, propiedades, eventos, etc. Es decir, lo
que la clase es capaz de hacer.
Cuando usamos las clases, stas tienen una serie de caractersticas (los datos que manipula) as como una
serie de comportamientos (las acciones a realizar con esos datos). La encapsulacin es esa capacidad de
la clase de ocultarnos sus interioridades para que slo veamos lo que tenemos que ver, sin tener que
preocuparnos de cmo est codificada para que haga lo que hace... simplemente nos debe importar que
lo hace.
Si tomamos el ejemplo de la clase Gato, sabemos que araa, come, se mueve, etc., pero el cmo lo hace
no es algo que deba preocuparnos.
El concepto es ms sencillo de lo que parece. Slo es la capacidad de separar por un lado lo que nos
muestra que hace ese objeto con el cdigo interno que lo realiza. As para nosotros un objeto por muy
complejo que sea slo veremos sus propiedades, mtodos y eventos desde el propio IDE. Aplica esto a
la clase botn, se que tiene esas propiedades, mtodos y eventos pero no veo nada del cdigo que
realiza esas acciones, es decir, est encapsulado. Dicho finalmente de forma tcnica: Establece la
separacin entre la interfaz del objeto y su implementacin.
Esto aporta dos ventajas:
62/73
Polimorfismo
El polimorfismo se refiere a la posibilidad de definir mltiples clases con funcionalidad diferente, pero
con mtodos o propiedades denominados de forma idntica, que pueden utilizarse de manera
intercambiable mediante cdigo cliente en tiempo de ejecucin.
Significa que puede tener mltiples clases que se pueden utilizar de forma intercambiable, si bien cada
clase implementa las mismas propiedades o los mismos mtodos de maneras diferentes. El polimorfismo
es importante en la programacin orientada a objetos puesto que permite usar elementos que tienen el
mismo nombre, independientemente del tipo de objeto que se est utilizando en ese momento. Por
ejemplo, dada una clase base "Coche", el polimorfismo permite al programador definir diferentes
mtodos "Iniciar_motor" para cualquier nmero de clases derivadas. El mtodo "Iniciar_motor" de una
clase derivada denominada "Coche_Diesel" puede ser totalmente diferente del mtodo con el mismo
nombre en la clase base. Otros procedimientos o mtodos pueden usar el mtodo "Iniciar_motor" de las
clases derivadas de la misma forma, con independencia del tipo de objeto "coche" que se est utilizando
en ese momento.
El Polimorfismo nos permite usar miembros de distintas clases de forma genrica sin tener que
preocuparnos si pertenece a una clase o a otra. Siguiendo con el ejemplo de los animales, si el Gato y el
Perro pueden morder podramos tener un "animal" que muerda sin importarnos que sea el Gato o el
Perro, simplemente podramos usar el mtodo Morder ya que ambos animales tienen esa caracterstica
"animal mordedor".
Dicho de otra forma, el polimorfismo determina que el mismo nombre de mtodo realizar diferentes
acciones segn el objeto sobre el que se ha aplicado. Aplicado a la programacin simplemente significa
que en dos objetos: ventana y archivo al utilizar un mismo mtodo se aplicar un resultado diferente. Es
decir si aplicamos el mtodo "Abrir" obviamente es el mismo nombre pero realiza cosas diferentes
dependiendo del objeto que lo llame: en un caso se abrir una ventana y en el otro un fichero.
63/73
En este caso se trata de una vista o una pantalla de Android con todos los componentes que le podemos
incorporar. Como ves, el concepto es sencillo. La nomenclatura como hemos visto en otras ocasiones
sera jerrquica: "transportes.barco.transbordador" para hacer referencia al nombre completo del objeto.
En ocasiones si el nombre del objeto es nico es capaz de encontrar su sitio correcto, es decir, si en el
cdigo hacemos referencia a "turismo", como slo existe un objeto con ese nombre en nuestra jerarqua
de objetos no hay problema en trabajar con l sin escribir el nombre completo. En cambio si el nombre
existe en varios sitios tendramos que poner el nombre completo para romper esa ambigedad.
Herencia
Ya vimos antes como era la caracterstica ms importante de la POO y permite crear una clase derivada
de otra principal. Esta nueva clase tiene todos los mtodos y propiedades que la original y adems otros
nuevos que podemos aadir. En el cdigo comprobaremos la relacin de herencia "es un": "un
todoterreno es un automvil" es cierto pero "un todoterreno es un barco" devolvera falso.
Pertenencia
64/73
un objeto "motor" o un objeto "direccin". En este caso hay una relacin de pertenencia puesto que
existe un conjunto de objetos que pertenecen a otro objeto o se unen para formar otro objeto.
En el cdigo lo representaremos como "tiene un". Un "coche tiene un motor" sera cierto pero "una
bicicleta tiene un motor" sera falso.
Utilizacin
En ocasiones un objeto utiliza a otro para alguna operacin sin implicar ninguna pertenencia entre ellos.
Por ejemplo un objeto "Ventana" puede utilizar un objeto "Grfico" para mostrar el dibujo pero no es
necesario que el objeto "Grafico" sea propiedad del objeto "Ventana". La notacin en el cdigo es "usa
un": el objeto Grafico usa una ventana sera cierto.
Reutilizacin
Finalmente si el objeto ha sido bien diseado puede ser reutilizado por otra aplicacin de forma directa
o creando una clase derivada de l. Este es uno de los objetivos principales de la POO: aprovechar el
cdigo escrito.
Esta es una aproximacin a los conceptos de la programacin orientada a objetos. Ahora pasaremos a
ver todo esto de nuevo pero de una forma ms tcnica y ajustada al lenguaje Java.
7. Actualizar versin
Las versiones tanto de Eclipse como del mdulo ADT (Android Developer Toolkit) van
evolucionando constantemente, as que es normal que nos encontremos con varios cambios que
veremos ahora.
65/73
En este caso, al ser una actualizacin del mdulo de Android, hemos seleccionado esa opcin para que
nos muestra las posibles actualizaciones. Al cabo de unos segundos nos mostrar si hay nuevos
componentes:
Si desplegamos el primer componente vemos que es la versin requerida y que nos avisaba al iniciar el
entorno (21.1.0):
66/73
Pulsaremos en siguiente para que haga la actualizacin. En la siguiente pantalla en la parte derecha
"Aceptamos" los textos de licencia:
y comenzar la actualizacin:
67/73
Anotacin
Si recibes un mensaje de error en la instalacin:
68/73
Una vez terminado ya podemos ejecutarlo con normalidad. Vamos a comprobar las versiones. Nos
vamos a la opcin "About ADT" dentro del men "Help"
Pulsamos en "Installation Details", donde podemos ver todos los mdulos instalados con sus versiones.
Vemos la ltima 21.1correctamente actualizada:
69/73
En ocasiones, al importar proyectos de otros sitios pueden que no nos funcionen correctamente. Bien
porque estn en una versin distinta a la nuestra o porque simplemente tiene nombres de carpetas
distintas, puede ser que al importarlo nos encontremos con problemas de ejecucin. Esto podra darse
en algunos de los ejemplos que veremos a lo largo del curso y cuyos proyectos te podrs descargar.
Por ejemplo:
Se trata de un proyecto que he importado pero que no me deja ejecutar. En este caso es por la versin
de los SDK's instaladas o definidas en el proyecto. Para resolver esto, basta con indicar en el proyecto
esta opcin:
Con el botn derecho encima del proyecto seleccionaremos la opcin "Fix Project Properties" del men
"Android Tools". Esta opcin reconstruir el fichero de configuracin del proyecto adaptndose a
nuestra instalacin. El error desaparecer y podremos ejecutar sin problemas el proyecto.
Diferentes SDK
Otro de los errores habituales es que descarguemos un proyecto de Internet que est hecho en un SDK
que no tenemos instalado. Supongamos el caso de que tenemos el SDK 17 instalado en nuestro equipo
y que me descargo una aplicacin hecha con el SDK 18. Eclipse dar un mensaje indicando que no
encuentra ese SDK:
70/73
Si no queremos descargarnos ese SDK, podemos modificar el proyecto. Iremos a las propiedades del
proyecto para asignarle un SDK distinto. Podemos acceder con el botn derecho en el proyecto y luego
"Properties", o desde el men:
En ese momento el proyecto queda configurado con el SDK que disponemos en el equipo y podremos
ejecutarlo.
Lgicamente se recomienda que cada proyecto se ejecute con su propio SDK, para as disponer de todas
71/73
Lgicamente se recomienda que cada proyecto se ejecute con su propio SDK, para as disponer de todas
las funciones que incorpora el SDK correspondiente. Por ejemplo, si lo que estamos descargando es del
SDK 18, que incorpora alguna funcin nueva de Android, lgicamente no estar disponible si lo
"rebajamos" al SDK 17, ya que ste no implementar estas nuevas funciones.
72/73
Ejercicios
Ejercicio 1. Instalar el entorno de trabajo
20
73/73