desarrollo en android: conceptos básicos
DESCRIPTION
Conceptos básicos para desarrollar aplicaciones móviles en AndroidTRANSCRIPT
Desarrollo de Aplicaciones Móviles en Android
Conceptos Básicos
Gabriel Huecas Universidad Politécnica de Madrid
30 de Septiembre de 2011
URL básicos
• Para empezar: http://www.slideshare.net/dtmilano/android-development-tutorial-v3
• Seguimos: http://www.slideshare.net/sullis/introduction-to-android
• Detalles: http://www.slideshare.net/tedchien/android-in-a-nutshell-2559290
• Completo: http://www.slideshare.net/techmi/curso-desarrollo-en-android
URL avanzados
• http://developer.android.com/guide/topics/fundamentals.html
• http://www.dalvikvm.com/
• http://www.retrodev.com/
Entorno de desarrollo completo
• Compilador
• Emulador
• Depurador
• Perfiles de rendimiento
Plugin para Eclipse
Orientado a comandos
Arquitectura: Aplicaciones
• Incluidas por defecto de Android
• Añadidas por el usuario
– Sin diferenciación
– De terceras empresas
– o de su propio desarrollo
• Usan API, servicios y bibliotecas de forma igualitaria
Arquitectura: Entorno de Aplicaciones (I)
• Conjunto de herramientas de desarrollo de cualquier aplicación
– Activity Manager: Gestión del Ciclo de Vida
– Window Manager: Gestiona las ventanas de las aplicaciones y utiliza la librería Surface Manager.
– Telephone Manager: Incluye todas las API vinculadas a las funcionalidades propias del teléfono (llamadas, mensajes, etc.).
Arquitectura: Entorno de Aplicaciones (II)
– Content Provider: Compartición de datos entre aplicaciones. Acceso a los contactos, agenda…
– View System: Elementos de construcción de (GUI): botones, entradas de texto, fechas,… y gestión de dichos elementos: tamaños, disposición, …
– Location Manager: información de localización y posicionamiento.
– Notification Manager: Comunicación de eventos al usuario: llamadas entrantes, SMS, conexiones Bluetooth, …. Pueden asociarse una acción (Intent)
– XMPP Service: API de acceso para intercambio de mensajes XML.
Arquitectura: Bibliotecas (I)
• libc: básica de C, basada en BSD
• Surface Manager: gestión y construcción de elementos visuales y views de una aplicación
• OpenGL/SL y SGL: biblioteca gráfica con soporte 3D (OpenGL/SL) y 2D (SDL)
• Media Libraries: biblioteca de códecs y formatos multimedia
Arquitectura: Bibliotecas (II)
• FreeType: fuentes
• SSL: comunicaciones seguras
• SQLite: creación y gestión de bases de datos relacionales
• WebKit: núcleo del navegador Web
Arquitectura: Núcleo Linux
• Basado en el núcleo de Linux 2.6
– HAL: capa de abstracción para el hardware disponible en los dispositivos móviles.
– Drivers necesarios para que cualquier componente hardware pueda ser utilizado mediante las llamadas correspondientes.
– Fabricantes de Hw:
• Crean las bibliotecas de control
• Y los drivers
Dalvik
• VM: arquitectura basada en registros • Optimizada para
– Bajo consumo de memoria – Recolección de basura – Ejecuta múltiples instancias simultáneamente – Delega en el núcleo
• Gestión de procesos • Gestión de memoria • Gestión de hilos
– Bibliotecas escritas en C/C++ con wrappers de acceso – No hay JIT
• Los programas de Android se compilan en .dex (Dalvik Executable) y se empaquetan en un .apl (Android Package) – reutiliza la información duplicada por múltiples archivos .class, – Ocupa muchos menos que un .jar. – Bytecode propio, incompatible con JVM
• Ingeniería inversa .dex: www.retrodev.com
Bloques de Construcción
AndroidManifest.xml
Act
ivid
ades
Vis
tas
Inte
nci
on
es
Serv
icio
s
No
tifi
caci
on
es
Pro
veed
ore
s C
on
ten
ido
Actividades
• Las Actividades se apilan
• Sólo una es visible
• Sólo una está activa
• Se apilan encima según aparecen
Estado de las actividades
• Activa – Encima de la pila
• Pausada – Sin foco, todavía visible
• Parada – No visible
– Puede eliminarse en caso de pocos recursos
• En Destrucción – Se ha notificado su destrucción
Vistas
• Bloques de construcción básicos
• Saben cómo dibujarse
• Responden a eventos
• Organizados como árboles para construir el GUI
• Descritos en XML en los recursos de layout
Views y ViewGroups
• Las Views y ViewGroups construyen complejos GUIs
• El framework de Android es responsable de:
– Medidas
– Emplazamientos
– Dibujado
Patrón: carga de layout
• Android compila el código XML que describe el layout
• Después se carga al crearse la Actividad
public void onCreate (Bundle savedInstanceState)
{
...
setContentView(R.layout.filename);
...
}
Patrón: identificadores
• Identificadores únicos en la definición de la View en XML
– permite su posterior uso en Java
private View name;
public void onCreate (Bundle savedInstanceState)
{
...
name= (View)findViewById(R.id.name);
...
}
Intents
• Descripción abstracta de una operación – Permite especificar la Actividad a invocar
• Describe lo que la aplicación quiere
• Se asocian una acción, unos datos y una categoría – Las actividades declaran las acciones que pueden
llevar a cabo y los tipos de datos que pueden gestionar. La categoría indica si la actividad se arranca desde el lanzador de aplicaciones, desde el menú de otra aplicación o desde otra actividad
Ejemplo de Intención
<!-- This filter says that we can view or edit the data of a single note --> <intent-filter android:label="@string/resolve_edit"> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.EDIT" /> <action android:name="com.android.notepad.action.EDIT_NOTE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.cursor.item/vnd.google.note" /> </intent-filter>
Servicios
• Se ejecutan en background
• No interactúan con el usuario
• Ejecutan en el hilo principal del proceso
• Se mantiene en ejecución mientras
– Se arranque
– Tengan conexiones
Notificaciones
• Alertan al usuario de eventos
• Se envían a través del NotificationManager
• Tipos
– Iconos persistentes
– LEDs encendidos
– Sonidos o vibraciones
Proveedores de Contenidos
• Los ContentProviders son objetos para – Obtener datos
– Almacenar datos
• Datos disponibles para todas las apps
• UNICO modo de compartir información entre paquetes
• Normalmente, SQLite
• Poco acople con clientes
• Acceso a través de URI (¡acceso único!)
Estados de los Procesos
• Procesos en primer plano (críticos)
• Procesos visibles (alta prioridad)
• Procesos de servicio (alta prioridad)
• Procesos en segundo plano (baja prioridad)
• Procesos vacios (baja prioridad)
– Cacheados para posterior uso
AndroidManifest.xml
• Fichero de control que le dice al sistema qué hacer y cómo se relacionan los componentes de alto nivel
• Pegamento que especifica que Intenciones reciben las Actividades
• Especifica los permisos
Organización del Código en Eclipse
Código Fuente en Java
Código Automático ¡NO TOCAR¡
Recursos desestructurados
Recursos estructurados ID único Resoluciones localizaciones
Descripción de la Aplicación
Resource Manager
• Elementos no programáticos – Imágenes, videos, audio, textos….
• Almacenados en /res y /assets de la aplicación – /res accesible mediante la clase R
• Compilada por entorno android
• Estructurado: localización, resolución pantalla,…
• R.carpeta.recurso – R.layout.main
– /assets no se generan IDs para el contenido • Especificar path relativo y nombre de los ficheros
proguard.cfg
• Modifica el código para
– Minimizar el tamaño
– Optimizarlo
– Ofuscarlo: más difícil de desensamblar por ingeniería inversa
– Resulta un .apk más pequeño y eficiente
Buenas Prácticas
• Ojo a las prestaciones (no es un desktop)
• Evite crear objetos
• Usar métodos nativos
• Mejor virtual que interfaces
• Mejor static que virtual (si no se necesitan objetos!)
• Sin getters/setters internos
• Declarar constantes (final)
• Evitar enums
Soporte de Múltiples Pantallas
Low Density (120), ldpi
Medium Density (160), mdpi
High Density (240), hdpi
Extra High Density (320), xhdpi
Small screen QVGA (240x320) 480x640
Normal screen
WQVGA400 (240x400) WQVGA432 (240x432)
HVGA (320x480) WVGA800 (480x800) WVGA854 (480x854) 600x1024
640x960
Large screen WVGA800 (480x800) WVGA854 (480x854)
WVGA800 (480x800) WVGA854 (480x854) 600x1024
Extra Large screen
1024x600 XWGA (1280x800) 1024x768 1024x768
1536x1152 1920x1152 1920x1200
2048x1536 2560x1536 2560x1600
Tamaños de Pantalla y Densidades
ldpi mdpi hdpi xhdpi
Small 3.5%
Normal 0.9% 16.9% 74.0%
Large 3.2%
xlarge 1.5%
Datos recogidos en 7 días, finalizando el 2 de septiembre de 2011
Pruebas
• A partir de Android 1.6 • Creación de proyectos de pruebas • ActivityUnitTestCase para ejecutar casos de test
aislados • ServiceTestCase para probar servicios • ActivityInstrumentationTestCase2 para pruebas
funcionales de actividades • ApiDemos incluye algunas ejemplos de pruebas • monkeyrunner, generar eventos de usuario
seudoaleatorio
TraceView
// start tracing to "/sdcard/calc.trace"
Debug.startMethodTracing("calc");
// ...
// stop tracing
Debug.stopMethodTracing();