El documento describe los 6 pasos para desarrollar aplicaciones Android en Eclipse: 1) instalar JDK y Eclipse, 2) instalar Android SDK, 3) instalar plugin ADT de Eclipse, 4) configurar el plugin ADT, 5) configurar el emulador Android, 6) crear un proyecto Android en Eclipse. Explica los componentes básicos de una aplicación Android y la estructura de carpetas de un proyecto.
2. Paso 1:
JDK de Java.
Paso 2:
Eclipse (recomendado IDE for Java Developers)
Paso 3:
Android SDK (paquete con las herramientas
básicas para desarrolar aplicaciones)
▪ Incluye SDK y AVD Manager
▪ Instalar los Targets necesarios.
3. Paso 4:
Android Development Tools (ADT)
▪ Plug-in para Eclipse
▪ Incluye vista DDMS
▪ Procesos en ejecución
▪ Navegación por el sistema de ficheros
▪ Logs
▪ Proyecto, editor de vistas, compilación de recursos,
firma y exportación de aplicaciones,…
4. Paso 5:
Configurar el Plugin ADT
▪ En la ventana de configuración de Eclipse, se debe
acceder a la sección de Android e indicar la ruta en la que
se ha instalado el SDK.
Paso 6:
Configurar Android Virtual Device (AVD)
▪ A la hora de probar y depurar aplicaciones Android no
tendremos que hacerlo necesariamente sobre un
dispositivo físico, sino que podremos configurar un
emulador o dispositivo virtual.
5. Android es un sistema operativo móvil
basado en Linux, que junto con aplicaciones
middleware está enfocado para ser utilizado
en dispositivos móviles como teléfonos
inteligentes, tabletas, Google TV y otros
dispositivos. Es desarrollado por la Open
Handset Alliance, la cual es liderada por
Google.
6. Framework de aplicación que habilita la
reutilización y reemplazo de componentes.
Máquina virtual Dalvik optimizada para
móviles.
Navegador integrado basado en WebKit .
Gráficos optimizados por una librería gráfica
2D propia; gráficos 3D basados en la
especificación OpenGL.
SQLite para almacenamiento de datos
estructurados.
7. Soporte para gran variedad de archivos
multimedia (MPEG4, H.264, MP3, AAC, AMR,
JPG, PNG, GIF).
Telefonía GSM.
Bluetooth, EDGE, 3G y WiFi (4G, WiMAX,…).
Cámara, GPS, compás, acelerómetro,…
Entorno de desarrollo completo incluyendo
emulador, herramientas de depuración,
profiling de memoria y rendimiento y plugin
para el IDE Eclipse.
8. Apple - iPhone OS
RIM – Blackberry
Microsoft - Windows Mobile 6.5, Phone 7
Series
Symbian Foundation - Symbian OS
Palm - WebOS
10. Kernel linux 2.6.
Runtime basado en
VM Dalvik.
Conjunto de librerias
C/C++.
Framework común a
todas las
aplicaciones basada
en servicios.
Aplicaciones base
implementadas en
Java (todas
reemplazables).
11. Aplicaciones
Escritas en Java y empaquetadas en Android
Package (apk)
Cada aplicación es independiente
▪ Se ejecuta en su propio proceso de Linux
▪ Cada proceso tiene su propia máquina virtual de Java
▪ Cada aplicación tiene asignado un ID de usuario de Linux
▪ Solo ese ID de usuario tiene permisos para acceder a los archivos
de la aplicación
12. Cuando creamos un
nuevo proyecto Android
en Eclipse se genera
automáticamente la
estructura de carpetas
necesaria para poder
generar posteriormente
la aplicación. Esta
estructura será común a
cualquier aplicación.
13. Carpeta /src/
Contiene todo el código
fuente de la
aplicación, código de la
interfaz gráfica, clases
auxiliares, etc.
Inicialmente, Eclipse
creará por nosotros el
código básico de la
pantalla (Activity)
principal de la
aplicación, siempre bajo
la estructura del paquete
java definido.
14. Carpeta /res/
Contiente todos los
ficheros de recursos
necesarios para el
proyecto: imágenes,
vídeos, cadenas de
texto, etc. Los
diferentes tipos de
recursos de deberán
distribuir entre las
siguientes carpetas:
15. Carpeta /res/
/res/drawable/. Contienen las imágenes de la aplicación. Se puede dividir en
/drawable-ldpi, /drawable-mdpi y /drawable-hdpi para utilizar diferentes
recursos dependiendo de la resolución del dispositivo.
/res/layout/. Contienen los ficheros de definición de las diferentes pantallas
de la interfaz gráfica. Se puede dividir en /layout y /layout-land para definir
distintos layouts dependiendo de la orientación del dispositivo.
/res/anim/. Contiene la definición de las animaciones utilizadas por la
aplicación.
/res/menu/. Contiene la definición de los menús de la aplicación.
/res/values/. Contiene otros recursos de la aplicación como por ejemplo
cadenas de texto (strings.xml), estilos (styles.xml), colores (colors.xml), etc.
/res/xml/. Contiene los ficheros XML utilizados por la aplicación.
/res/raw/. Contiene recursos adicionales, normalmente en formato distinto a
XML, que no se incluyan en el resto de carpetas de recursos.
16. Carpeta /gen/
Contiene una serie de
elementos de código
generados automáticamente
al compilar el proyecto. Cada
vez que generamos nuestro
proyecto, la maquinaria de
compilación de Android
genera por nosotros una
serie de ficheros fuente en
java dirigidos al control de
los recursos de la aplicación.
17. Carpeta /gen/
El más importante dentro del public final class R {
directorio, el fichero R.java, y la
clase R. public static final class drawable
Esta clase R contendrá en todo {
momento una serie de public static final int
constantes con los ID de todos icon=0x7f020000;
los recursos de la aplicación }
incluidos en la carpeta /res/, de public static final class layout {
forma que podamos acceder public static final int
facilmente a estos recursos main=0x7f030000;
desde nuestro código a traves }
de este dato. Así, por ejemplo, }
la constante R.drawable.icon
contendrá el ID de la imagen
“icon.png” contenida en la
carpeta /res/drawable/.
18. Carpeta /assets/
Contiene todos los demás ficheros auxiliares
necesarios para la aplicación (y que se incluirán en su
propio paquete), como por ejemplo ficheros de
configuración, de datos, etc.
La diferencia entre los recursos incluidos en la carpeta
/res/raw/ y los incluidos en la carpeta /assets/ es que
para los primeros se generará un ID en la clase R y se
deberá acceder a ellos con los diferentes métodos de
acceso a recursos. Para los segundos sin embargo no
se generarán ID y se podrá acceder a ellos por su ruta
como a cualquier otro fichero del sistema.
19. En Java estamos acostumbrados a manejar
conceptos como ventana, control, eventos o
servicios como los elementos básicos en la
construcción de una aplicación.
En Android vamos a disponer de esos mismos
elementos básicos aunque con un pequeño
cambio en la terminología y el enfoque.
21. Activity (Actividad)
Presenta una interfaz de usuario enfocada en algo que
el usuario puede realizar.
▪ Elegir un contacto, seleccionar una fotografía,…
Una aplicación consistirá en un conjunto de
actividades independientes que trabajan juntas.
▪ Una de las actividades se marca como la inicial al arrancar una
aplicación.
Se puede pensar en una actividad como el elemento
análogo a una ventana en cualquier otro lenguaje
visual.
22. View (Vista)
Los objetos view son los componentes básicos con
los que se construye la interfaz gráfica de la
aplicación, análogo por ejemplo a los controles de
Java.
Android pone a disposición una gran cantidad de
controles básicos, como cuadros de texto,
botones, listas desplegables, imágenes, etc.
23. Service (Servicio)
No tiene UI
Se ejecuta en background por periodo indefinido.
▪ Ej. Reproductor de música
Expone una interfaz para interactuar.
▪ Ej. Parar la reproducción de música
Es posible acceder desde otros componentes o
aplicaciones.
Pueden realizar cualquier tipo de acciones, por ejemplo
actualizar datos, lanzar notificaciones, o incluso mostrar
elementos visuales (activities) si se necesita en algún
momento la interacción con del usuario.
24. Content Provider
Es un mecanismo que expone un conjunto
especifico de datos a otras aplicaciones.
▪ Los datos pueden estar almacenados en cualquier lugar:
fichero, SQLite, internet,…
Hace uso de un ContentResolver para acceder a
los datos expuestos por un Content Provider.
25. Broadcast Receiver
No realiza ningún acción por si mismo
Recibe y reacciona ante anuncios de tipo broadcast
destinado a detectar y reaccionar ante determinados
mensajes o eventos globales generados por el sistema.
Existen muchos originados por el sistema
▪ Ej. Batería baja, SMS recibido, Tarjeta SD inserta, etc.
Las aplicaciones puede lanzar un mensaje broadcast, es
decir, no dirigidos a una aplicación concreta sino a
cualquiera que quiera escucharlo.
No tienen UI, aunque pueden iniciar una actividad
(Activity) para atender al anuncio.
26. Widget
Son elementos visuales, normalmente
interactivos, que pueden mostrarse en la pantalla
principal (home screen) del dispositivo Android y
recibir actualizaciones periódicas.
Permiten mostrar información de la aplicación al
usuario directamente sobre la pantalla principal.
27. Intent
Un intent es el elemento básico de comunicación
entre los distintos componentes Android.
Se pueden entender como los mensajes o peticiones
que son enviados entre los distintos componentes de
una aplicación o entre distintas aplicaciones.
Mediante un intent se puede mostrar una actividad
desde cualquier otra, iniciar un servicio, enviar un
mensaje broadcast, iniciar otra aplicación, etc.
28. Content Provider
Al recibir una petición desde un ContentResolver
Activity, Service y Broadcast Receiver
Al recibir un mensaje asíncrono llamado Intent
En un Activity y Service
▪ Representa la intención de querer realizar algo.
▪ Ej. La intención de seleccionar un contacto como remitente.
En Broadcast Receiver
▪ Representa el anuncio del comienzo de una acción.
▪ Ej. Anunciar que se ha pulsado el botón de la cámara.
29. Contiene la definición en XML de los aspectos
principales de la aplicación
(AndroidManifest.xml).
Propiedades de la aplicación
Identificación (nombre, versión, icono, …),
Declaración de todos los componentes
existentes en la aplicación.
Intent filters
▪ Un componente indica a que intent puede responder
30. Declaración de los permisos requeridos
uses-permission
Acceso a determinado, estado del telefono,
acceso a internet, etc.
Los permisos que requiere se muestran al usuario
al instalar la aplicación
Declaración de permisos propios
Restringe que aplicaciones pueden hacer uso de
un determinado componente
31.
32. Las aplicaciones en Android solo tienen un primer
plano que ocupa toda la pantalla.
Las aplicaciones están formadas por actividades
(Activitys).
En un momento dado una actividad (Activity) pasa al
primer plano y se coloca por encima de otra formado
una pila de actividades (Activitys).
El botón back cierra la actividad (Activity) y recupera
de la pila la anterior.
33. La aplicaciones en Android no tienen control de
su ciclo de vida.
Deben estar preparadas para su terminación en
cualquier momento.
Cada aplicación se ejecuta en su propio proceso.
El runtime de Android gestiona el proceso de
cada aplicación y por extensión de cada
Actividad que contenga.
34. Representa una cosa concreta que puede hacer el usuario
Corresponden con una pantalla
de la interfaz de usuario.
Muestra los controles de la
interfaz de usuario y reacciona
ante las interacciones del mismo.
Es una clases derivada de la clase
Activity.
Toda actividad se declara en el
archivo AndroidManifest.xml .
35. Normalmente una aplicación consta de varias actividades
Cada pantalla se implementa
como una actividad.
Moverse a la siguiente
actividad supone llamar al
método
startActivity()
startActivityForResult()
Una aplicación puede reusar
actividades de android o de
otras aplicaciones
36. Una actividad se compone
de todo tipo de controles o
widgets llamados View en
Android.
La clase View es la clase
base de todos los widgets.
(Button, EditText,
TextView…) .
La clase ViewGroup es la
clase base de los layouts y
de otras vistas compuestas.
37. Creando una Actividad (Activity)
onCreate:
Se llama a este método cuando se crea la actividad
setContentView:
Asigna a la vista el contenido del recurso layout
R.layout.main:
Recurso de layout de la aplicación
38. Moverse a la siguiente actividad
Lanza una nueva actividad sin recibir el resultado
startActivity(intent);
Lanza una nueva actividad y espera el resultado
startActivityForResult(intent, requestCode);
Cuando retorna la actividad llamada, se invoca al método
onActivityResult pasándole el requestCode con el que se
lanzó desde la actividad.
onActivityResult(int requestCode, int resultCode, Intent
result)
39. Métodos de transacción de estados
onCreate(Bundle)
Se invoca cuando la Actividad se arranca por primera vez.
Se utiliza para tareas de inicialización como crear la interfaz de usuario
de la Actividad.
Su parámetro es null o información de estado guardada previamente
por onSaveInstanceState()
onStart()
Se invoca cuando la Actividad va a ser mostrada al usuario
onResume()
Se invoca cuando la actividad va a empezar a interactuar con el
usuario
40. Métodos de transacción de estados
onPause()
Se invoca cuando la actividad va a pasar al fondo porque
otra actividad ha sido lanzada para ponerse delante.
Se utiliza para guardar el estado de la Actividad
onStop()
Se invoca cuando la actividad va a dejar de ser visible y no
se necesitará durante un tiempo.
Si hay escasez de recursos en el sistema, este método
podría no llegar a ser invocado y la actividad ser destruida
directamente
41. Métodos de transacción de estados
onRestart()
Se invoca cuando una actividad parada pasa a estar
activa.
onDestory()
Se invoca cuando la Actividad va a ser destruida.
Si hay escasez de recursos en el sistema, este método
podría no llegar a ser invocado y la actividad ser
destruida directamente.
42. Métodos de transacción de estados
onSaveInstanceState(Bundle)
Se invoca para permitir a la actividad guardar su
estado de la ui
Normalmente no necesita ser redefinido
onRestoreInstanceState(Bundle)
Se invoca para recuperar el estado guardado por
onSaveInstanceState().
Normalmente no necesita ser redefinido
43.
44. Representan la “intención” o solicitud de que
alguno de los componentes lleve a cabo una
tarea.
Las intenciones ofrecen un servicio de paso de
mensajes que permite interconectar
componentes de la misma o de distintas
aplicaciones.
Las intenciones se utilizan para:
Arrancar actividades
Enviar eventos a múltiples destinatarios
45. Hay dos formas de invocar a una intención: explícita, implícita
Invocación explícita
Se expecifica explícitamente en código que
componente es el encargado de manejar la intención.
Invocación implícita
Es la plataforma la que determina, a través de un
proceso de resolución de intenciones, que
componente es el más apropiado para manerjar la
intención. Un componente declara su capacidad para
atender a una intención mediante el tag <intent-filter>
en el archivo AndroidManifest.xml
46. Las intenciones se pueden usar para moverse entre actividades.
La intención puede ser explícita indicando la actividad destino o
implícita especificando una acción y unos datos y dejando que se
encuentre la actividad adecuada en tiempo de ejecución
Lanzar una actividad de manera explícita
Intent intent = new Intent(Context, Activity.class);
startActivity(intent);
Lanzar una actividad de manera implícita
Intent intent = new Intent(Intent.ACTION_DIAL, URI.parse(tel:928-76-
34-26));
startActivity(intent);