6. 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
7. 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.).
8. 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.
9. 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
10. 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
12. 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
13. 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
14. Actividades
Vistas
Intenciones
Servicios
AndroidManifest.xml
Notificaciones
Bloques de Construcción
Proveedores
Contenido
15. Actividades
• Las Actividades se apilan
• Sólo una es visible
• Sólo una está activa
• Se apilan encima según aparecen
16. 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
17. 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
18. Views y ViewGroups
• Las Views y ViewGroups
construyen complejos GUIs
• El framework de Android
es responsable de:
– Medidas
– Emplazamientos
– Dibujado
19.
20. 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);
...
}
21. 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);
...
}
22. 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
23. 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>
24. 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
25. Notificaciones
• Alertan al usuario de eventos
• Se envían a través del NotificationManager
• Tipos
– Iconos persistentes
– LEDs encendidos
– Sonidos o vibraciones
26. 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!)
27. 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
28. 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
29. 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
30. 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
31. 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
32. 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
33. Soporte de Múltiples Pantallas
Low Density (120), Medium Density High Density (240), Extra High
ldpi (160), mdpi hdpi Density
(320), xhdpi
Small screen QVGA (240x320) 480x640
Normal WQVGA400 (240x400) HVGA (320x480) WVGA800 (480x800) 640x960
screen WQVGA432 (240x432) WVGA854 (480x854)
600x1024
Large screen WVGA800 (480x800) WVGA800 (480x800)
WVGA854 (480x854) WVGA854 (480x854)
600x1024
Extra Large 1024x600 XWGA (1280x800) 1536x1152 2048x1536
screen 1024x768 1920x1152 2560x1536
1024x768 1920x1200 2560x1600
34. 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
36. 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