Desarrollo en Android: Conceptos Básicos

40
Desarrollo de Aplicaciones Móviles en Android Conceptos Básicos Gabriel Huecas Universidad Politécnica de Madrid 30 de Septiembre de 2011

description

Conceptos básicos para desarrollar aplicaciones móviles en Android

Transcript of Desarrollo en Android: Conceptos Básicos

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

Escritas en C/C++

Escritas en Java

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: Entorno de Ejecución

• Core Libraries: bibliotecas Java

• Máquina virtual Dalvik.

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

Versiones de Plataformas

Data collected 14-day period ended on September 2nd, 20011

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();

TraceView: Timeline

TraceView: Profile

dmtracedump