SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
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/fu
  ndamentals.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
            Escritas
en C/C++
            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
Actividades


    Vistas


 Intenciones


  Servicios
                 AndroidManifest.xml




Notificaciones
                                       Bloques de Construcción




Proveedores
 Contenido
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),   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
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

Contenu connexe

Tendances

Tendances (19)

Deletreando Android
Deletreando AndroidDeletreando Android
Deletreando Android
 
Tema 4.1 Introduccion Android
Tema 4.1 Introduccion AndroidTema 4.1 Introduccion Android
Tema 4.1 Introduccion Android
 
Curso de desarrollo de aplicaciones Android - Sesión 1
Curso de desarrollo de aplicaciones Android - Sesión 1Curso de desarrollo de aplicaciones Android - Sesión 1
Curso de desarrollo de aplicaciones Android - Sesión 1
 
Desarrollo de Aplicaciones Moviles en Android: Temas Avanzados
Desarrollo de Aplicaciones Moviles en Android: Temas AvanzadosDesarrollo de Aplicaciones Moviles en Android: Temas Avanzados
Desarrollo de Aplicaciones Moviles en Android: Temas Avanzados
 
Conceptos y Generalidades de Android
Conceptos y Generalidades de AndroidConceptos y Generalidades de Android
Conceptos y Generalidades de Android
 
Android
AndroidAndroid
Android
 
Gps
GpsGps
Gps
 
Seminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforumSeminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforum
 
Desarrollo android - 2 - arquitectura del sistema
Desarrollo android   - 2 - arquitectura del sistemaDesarrollo android   - 2 - arquitectura del sistema
Desarrollo android - 2 - arquitectura del sistema
 
Introducción a Android
Introducción a AndroidIntroducción a Android
Introducción a Android
 
Documento de android
Documento de androidDocumento de android
Documento de android
 
"Android de la A a la Z" -- Unidad 3
"Android de la A a la Z" -- Unidad 3"Android de la A a la Z" -- Unidad 3
"Android de la A a la Z" -- Unidad 3
 
Android de la A a la Z - Unidad 1
Android de la A a la Z - Unidad 1Android de la A a la Z - Unidad 1
Android de la A a la Z - Unidad 1
 
Exposición 20 aniversario linux
Exposición 20 aniversario linuxExposición 20 aniversario linux
Exposición 20 aniversario linux
 
Curso Android 2021
Curso Android  2021Curso Android  2021
Curso Android 2021
 
"Android de la A a la Z" -- Unidad 6
"Android de la A a la Z" -- Unidad 6"Android de la A a la Z" -- Unidad 6
"Android de la A a la Z" -- Unidad 6
 
"Android de la A a la Z" -- Unidad 4
"Android de la A a la Z" -- Unidad 4"Android de la A a la Z" -- Unidad 4
"Android de la A a la Z" -- Unidad 4
 
"Android de la A a la Z" -- Unidad 1
"Android de la A a la Z" -- Unidad 1"Android de la A a la Z" -- Unidad 1
"Android de la A a la Z" -- Unidad 1
 
Presentacion Google Web Toolkit
Presentacion Google Web ToolkitPresentacion Google Web Toolkit
Presentacion Google Web Toolkit
 

En vedette

Sistemas operativos "Android"
Sistemas operativos "Android"Sistemas operativos "Android"
Sistemas operativos "Android"
Lupita Solano
 

En vedette (20)

Curso desarrollo en android
Curso desarrollo en androidCurso desarrollo en android
Curso desarrollo en android
 
Introducción a Android: 10 cosas importantes que hay que entender
Introducción a Android: 10 cosas importantes que hay que entenderIntroducción a Android: 10 cosas importantes que hay que entender
Introducción a Android: 10 cosas importantes que hay que entender
 
Desarrollo De Videojuegos Con Xna
Desarrollo De Videojuegos Con XnaDesarrollo De Videojuegos Con Xna
Desarrollo De Videojuegos Con Xna
 
Taller de Android
Taller de AndroidTaller de Android
Taller de Android
 
Sistema Operativo. android
Sistema Operativo. androidSistema Operativo. android
Sistema Operativo. android
 
Presentacion Android
Presentacion AndroidPresentacion Android
Presentacion Android
 
Exposición - Android
Exposición - AndroidExposición - Android
Exposición - Android
 
Sistema Operativo Android; versiones, historia
Sistema Operativo Android; versiones, historiaSistema Operativo Android; versiones, historia
Sistema Operativo Android; versiones, historia
 
Akademy es2010 qt_quick
Akademy es2010 qt_quickAkademy es2010 qt_quick
Akademy es2010 qt_quick
 
5 Administración Android - Activity Manager
5 Administración Android  -  Activity Manager5 Administración Android  -  Activity Manager
5 Administración Android - Activity Manager
 
Sistemas operativos "Android"
Sistemas operativos "Android"Sistemas operativos "Android"
Sistemas operativos "Android"
 
Introducción a Android para desarrolladores Java
Introducción a Android para desarrolladores JavaIntroducción a Android para desarrolladores Java
Introducción a Android para desarrolladores Java
 
Ventajas y desvetajas de Android
Ventajas y desvetajas de AndroidVentajas y desvetajas de Android
Ventajas y desvetajas de Android
 
Intro. a Android Instituto Bosc de la Coma en Olot
Intro. a Android Instituto Bosc de la Coma en OlotIntro. a Android Instituto Bosc de la Coma en Olot
Intro. a Android Instituto Bosc de la Coma en Olot
 
linea del tiempo Magalyy
linea del tiempo Magalyylinea del tiempo Magalyy
linea del tiempo Magalyy
 
Entendiendo android
Entendiendo androidEntendiendo android
Entendiendo android
 
Primer Ejemplo de Proyecto en Android Studio
Primer Ejemplo de Proyecto en Android StudioPrimer Ejemplo de Proyecto en Android Studio
Primer Ejemplo de Proyecto en Android Studio
 
Linea del tiempo de Windows
Linea del tiempo de WindowsLinea del tiempo de Windows
Linea del tiempo de Windows
 
Diapositivas android
Diapositivas androidDiapositivas android
Diapositivas android
 
Linea del tiempo (windows)
Linea del tiempo (windows)Linea del tiempo (windows)
Linea del tiempo (windows)
 

Similaire à Desarrollo en Android: Conceptos Básicos

Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
Manuel Carrasco Moñino
 

Similaire à Desarrollo en Android: Conceptos Básicos (20)

Android UC3M Sesión 1
Android UC3M Sesión 1Android UC3M Sesión 1
Android UC3M Sesión 1
 
Introducción al desarrollo Android, Sesión 1
Introducción al desarrollo Android, Sesión 1Introducción al desarrollo Android, Sesión 1
Introducción al desarrollo Android, Sesión 1
 
Presentacion cw2012
Presentacion cw2012Presentacion cw2012
Presentacion cw2012
 
Android basics v3
Android basics v3Android basics v3
Android basics v3
 
Ingeniería Inversa en Android. Rooted Labs. Rooted CON 2012.
Ingeniería Inversa en Android.  Rooted Labs. Rooted CON 2012.Ingeniería Inversa en Android.  Rooted Labs. Rooted CON 2012.
Ingeniería Inversa en Android. Rooted Labs. Rooted CON 2012.
 
Introduccion android
Introduccion androidIntroduccion android
Introduccion android
 
Arquitectura 63583.pptx
Arquitectura 63583.pptxArquitectura 63583.pptx
Arquitectura 63583.pptx
 
Drupalcamp 2014 reconstruir un medio digital idealista news
Drupalcamp 2014   reconstruir un medio digital idealista newsDrupalcamp 2014   reconstruir un medio digital idealista news
Drupalcamp 2014 reconstruir un medio digital idealista news
 
Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014
Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014
Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014
 
Introducción a Android
Introducción a AndroidIntroducción a Android
Introducción a Android
 
TRABAJO.ppt
TRABAJO.pptTRABAJO.ppt
TRABAJO.ppt
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
Android Basics v2.5
Android Basics v2.5Android Basics v2.5
Android Basics v2.5
 
Tema1 seleccion de_arquitecturas_y_herramientas_de_programacion
Tema1 seleccion de_arquitecturas_y_herramientas_de_programacionTema1 seleccion de_arquitecturas_y_herramientas_de_programacion
Tema1 seleccion de_arquitecturas_y_herramientas_de_programacion
 
¿Cómo iniciarse en programación Android?
¿Cómo iniciarse en programación Android?¿Cómo iniciarse en programación Android?
¿Cómo iniciarse en programación Android?
 
6.android introduccion
6.android   introduccion   6.android   introduccion
6.android introduccion
 
Presentacion para la Flagship Store de Telefónica
Presentacion para la Flagship Store de TelefónicaPresentacion para la Flagship Store de Telefónica
Presentacion para la Flagship Store de Telefónica
 
Taller Android seedrocket
Taller Android seedrocketTaller Android seedrocket
Taller Android seedrocket
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a Android
 
Drupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidadDrupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidad
 

Dernier

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Dernier (15)

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 

Desarrollo en Android: Conceptos Básicos

  • 1. Desarrollo de Aplicaciones Móviles en Android Conceptos Básicos Gabriel Huecas Universidad Politécnica de Madrid 30 de Septiembre de 2011
  • 2. 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
  • 3. URL avanzados • http://developer.android.com/guide/topics/fu ndamentals.html • http://www.dalvikvm.com/ • http://www.retrodev.com/
  • 4. Entorno de desarrollo completo • Compilador • Emulador • Depurador • Perfiles de rendimiento Plugin para Eclipse Orientado a comandos
  • 5. Escritas Escritas en C/C++ en Java
  • 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
  • 11. Arquitectura: Entorno de Ejecución • Core Libraries: bibliotecas Java • Máquina virtual Dalvik.
  • 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
  • 35. Versiones de Plataformas Data collected 14-day period ended on September 2nd, 20011
  • 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
  • 37. TraceView // start tracing to "/sdcard/calc.trace" Debug.startMethodTracing("calc"); // ... // stop tracing Debug.stopMethodTracing();