Charla: Arquitectura, aplicaciones y seguridad en Android, impartida por Antonio Díaz de Informática 64 en el curso de Especialización en Dispositivos Móviles que tuvo lugar en la Facultad de Informática de la Universidad de A Coruña del 20 al 22 de Junio de 2012.
4. ¿Qué es exactamente Android?
• Sistema operativo móvil basado en Linux
• Utilizado en dispositivos móviles
– Principalmente Smartphones de diversas empresas
• Sony
• HTC
• Motorola
• Samsung
• Huawei
• LG
• …
5. ¿Qué es exactamente Android?
• Sistema operativo móvil basado en Linux
• Utilizado en dispositivos móviles
– Aunque también en tablets
6. ¿Qué es exactamente Android?
• Sistema operativo móvil basado en Linux
• Utilizado en dispositivos móviles
– Y en otros dispositivos, como auriculares,
relojes, netbooks, etcétera.
7. ¿Cómo empezó todo?
• En 2003 Andrew Rubin deja
Danger Inc.
• En octubre del 2003
– Andrew Rubin y tres compañeros
fundan Android Inc. en California.
• Se convierte en una “startup”.
• Se vuelca en el desarrollo de
software para teléfonos móviles
– Por aquel entonces
Schwarzenegger es elegido
gobernador California.
8. ¿Cómo empezó todo?
• En mayo del 2005 Google
adquiere Dodgeball
• En julio del 2005 Google
adquiere Android Inc por 50
millones de $.
• Rumores sobre la incursión de
Google en el mundo de la
telefonía móvil.
• Por aquel entonces el huracán
Katrina devasta el sur de
Estados Unidos
9. ¿Cómo empezó todo?
• El 5 de noviembre de 2007 se funda OHA
(Open Handset Alliance)
– Operadores
– Compañías de software
– Compañías de comercialización
– Fabricantes de semiconductores
– Fabricantes de dispositivos
10. ¿Cómo empezó todo?
• También el 5 de
noviembre de 2007 se da
a conocer una plataforma
para móviles basada en
Linux.
• El 12 de noviembre se
“libera” el “kit de desarrollo
de aplicaciones”. Nacen
las apps.
• Por aquel entonces
ocurrió el famoso “¿Por
qué no te callas?”
11. Etimología y logotipo
• ¿Sueñan los androides
con ovejas eléctricas?
• Nexus-6.23
• ¿Videojuego Gauntlet:
The Third Encounter?
12. Versiones de Android
• El 22 de octubre de 2008
sale el primer móvil con
Android. T-Mobile G1
– Widgets
– Servicios de Google
– Android Market
– Finales de año en Europa
• Por aquel entonces salió
elegido presidente de
EEUU Barack Obama
13. Versiones de Android
• Versión 1.1. Primera actualización
de Android
– En febrero de 2009
– Cambios estéticos menores
– Búsquedas de voz
– Aplicaciones de pago en Android
Market
– Implementación de actualizaciones
“over the air”
• Por aquel entonces desapareció
Marta del Castillo en Sevilla
14. Versiones de Android:
Cupcake (v1.5)
• Características
– Magdalena glaseada
– Nivel de API: 3
– Cuota de mercado actual: 0’3%
– Fecha de salida: 30/04/2009
• Por aquel entonces murió
Michel Jackson
15. Versiones de Android:
Cupcake (v1.5)
• Novedades
– Widgets
– Mejoras en el
portapapeles
– Captura y reproducción
de video
– Posibilidad de subir
vídeos a YouTube y
Picasa
– Teclado virtual
16. Versiones de Android:
Donut (v1.6)
• Características
– Rosquilla
– Nivel de API: 4
– Cuota de mercado: 0’7%
– Fecha de salida 15/09/2009
• Por aquel entonces Joao
Barroso fue elegido
presidente de la Comisión
Europea
17. Versiones de Android:
Donut (v1.6)
• Novedades
– Soporte para redes CDMA
– Múltiples resoluciones de
pantalla
– Búsqueda rápida
– Nuevo Market
– Introducción de aplicaciones
– Nueva interfaz de la cámara
18. Versiones de Android:
Éclair (v2.0/v2.1)
• Características
– Pepito
– Nivel de API: 7
– Cuota de mercado: 6%
– Fecha de salida: 26/10/2009
• Por aquel entonces fue
secuestrado el buque
Alakrana
19. Versiones de Android:
Éclair (v2.0/v2.1)
• Novedades
– Apoyo de varias cuentas
– Google Maps Navigation
– Contacto rápido
– Soporte HTML5
– Fondos de pantalla animados
– De voz a texto
– Nueva pantalla de bloqueo
20. Versiones de Android:
Éclair (v2.0/v2.1)
• Nexus One
– Primer smartphone de Google
– Fabricado por HTC Corporation
– Fue lanzado al mercado el 5 de
enero de 2010 a 529$
– La familia del fallecido Philip K.
Dick se planteó demandar a
Google por llamar a su teléfono
Nexus One,
21. Versiones de Android:
Froyo (v2.2)
• Características
– Yogur helado
– Nivel de API: 8
– Cuota de mercado: 23,1%
– Fecha de salida: 20/05/2010
• Por aquel entonces David
Cameron fue elegido primer
ministro del Reino Unido
22. Versiones de Android:
Froyo (v2.2)
• Novedades
– Pantalla de inicio
rediseñada
– Galería rediseñada con
imágenes 3D
– Hostpot móvil (compartir
conexión 3G)
– Posibilidad de contraseña
en la pantalla de bloqueo
23. Versiones de Android:
Gingerbread (v2.3)
• Características
– Pan de jengibre
– Nivel de API: 9-10
– Cuota de mercado: 63,7%
– Fecha de salida: 06/12/2010
• Por aquel entonces
comenzó la “revolución
tunecina”
24. Versiones de Android:
Gingerbread (v2.3)
• Novedades
– Mejor control de copiar y pegar
– Teclado mejorado
– Gestión de la batería
– Herramientas de gestión de
desarrollo
– Soporte para cámara frontal
– Otras características
– Juegos
25. Versiones de Android:
Honeycomb (v3.0/v3.1/v3.2)
• Características
– Panal
– Nivel de API: 11-13
– Cuota de mercado: 3,3%
– Fecha de salida: 10/05/2011
• Por aquel entonces se
anuncia la muerte de Bin
Laden en Pakistán
26. Versiones de Android:
Honeycomb (v3.0/v3.1/v3.2)
• Novedades
– Versión para
tablets
– Final de los
botones físicos
– Multitarea
mejorada
– Nueva barra de
aplicaciones
27. Versiones de Android:
Ice Cream Sandwich (v4.0)
• Características
– Sandwich de helado
– Nivel de API: 14-15
– Cuota de mercado: 2’9%
– Fecha de salida: 19/10/2011
• Por aquel entonces ocurrió
la erupción submarina en
la isla de El Hierro
28. Versiones de Android:
Ice Cream Sandwich (v4.0)
• Novedades
– NFC
– Desbloqueo facial
– Análisis de datos
– Se puede modificar el tipo de
letra
– Actualización de la pantalla de
notificaciones
– Nuevo calendario y
aplicaciones de correo
electrónico
29. Versiones de Android:
Jelly Bean(v4.1 o 5.0)
• Lo que esperan los usuarios
– Chrome como navegador
predeterminado
– El fin de la fragmentación.
Que haya un estándar a la
hora de desarrollar y producir
dispositivos
– Un competidor para Siri
35. Arquitectura de Android
• Kernel Linux
– Versión 2.6 modificada de Linux
– Capa de abstracción entre el hardware y el
software
– Contiene Drivers para el manejo del
hardware del dispositivo
– Adaptado por el fabricante para optimizar el
funcionamiento del dispositivo
36. Arquitectura de Android
• Android depende de Linux para los
servicios base del sistema:
– Modelo de controladores (drivers)
– La seguridad
– Gestión de memoria
– Gestión de procesos
– Pila de red
37. Arquitectura de Android
• Librerías
– El sistema de librerías está basado en
la BSD (Berkeley Software
Distribution)
– Son librerías eficientes y
ligeras, adaptadas a dispositivos
móviles
– Están escritas en C y C++
38. Arquitectura de Android
• Librerías
– Surface Manager: Administrador de ventanas
– OpenGL|ES: Se encarga de la aceleración 3D
– SGL: Maneja los gráficos en 2D
– Media Framework: Incluye los codecs de video
– FreeType: Maneja las fuentes del sistema
– SSL: Posibilita la utilización de SSL para establecer comunicaciones seguras
– SQLite: Creación de BBDD relacionales, pudiendo transformar estructuras de
datos en objetos
– WebKit: Proporciona el motor para las aplicaciones de tipo navegador
– libc: Incluye las cabeceras y funciones según el estándar de C
39. Arquitectura de Android
• Android Runtime. Entorno de ejecución, formado por
– Core Libraries:
• Librerías básicas programadas en C.
• Funcionamiento elemental a bajo nivel.
• Ejecuta aplicaciones (1 aplicación=1 proceso=1DVM)
– Dalvik Virtual Machine:
• Comparable a la JVM en su funcionamiento
• Trabaja con ficheros .dex
• Permite ejecutar varias instancias a la vez
• No soporta todas las librerías de Java (AWT, Swing, ...)
40. Arquitectura de Android
• Dalvik Virtual Machine:
– Convierte los ficheros .class en
.dex
– Los .dex están comprimidos y
consumen menos recursos.
– Los .dex, son empaquetados
en un .apk que es el que se
distribuye en el dispositivo.
– no ejecuta bytecode, sino
registros
42. Arquitectura de Android
• Application Framework:
– Proporciona una plataforma para el
desarrollo y reutilización de componentes.
– Se accede a las capas inferiores a través de
Dalvik
– Son los componentes Java con los que
trabaja el desarrollador
43. Arquitectura de Android
• Componentes del Application Framework:
– Activity Manager: Gestiona el tiempo de ejecución en las
aplicaciones.
– Window Manager: Maneja las ventanas de las aplicaciones usando Surface
Manager.
– Content Providers: Comparte contenido entre aplicaciones.
– View System: Construye un entorno gráfico para las aplicaciones.
– Notification Manager: Comunica al usuario los distintos eventos que ocurran.
44. Arquitectura de Android
• Componentes del Application Framework:
– Package Manager: Obtiene información sobre los paquetes
instalados en el dispositivo Android.
– Telephony Manager: Se encarga de servicios de modem como
sms, telefono, ...
– Resource Manager: Gestiona los elementos de la aplicación que están
fuera del código.
– Location Manager: Relacionado con la información de posicionamiento.
– XMPP Service: Maneja el protocolo de intercambio de mensajes basados
en XML.
45. Arquitectura de Android
• Applications
– Están todas las aplicaciones del
dispositivo
– Contiene el lanzador del aplicaciones
– Los widgets también son aplicaciones
de esta capa.
– Las aplicaciones están escritas en Java
y pueden hacer uso de las otras capas
46. Arquitectura de Android
• Applications
– Las aplicaciones base incluyen:
• Un cliente de correo electrónico
• SMS
• Calendario
• Mapas
• Navegador
• Contactos
• Otros
47. Tipos de aplicaciones
Nativas: Categorías
• La mayoría de aplicaciones se sitúan en una o dos
categorías de las siguientes:
- Aplicaciones primer plano (foregorund).
- Aplicaciones en segundo plano (background).
- Aplicaciones intermitentes (Intermittent).
- Widgets, Live Wallpapers.
48. Tipos de aplicaciones
Nativas: Son los llamados “Servicios de fondo” o
“Intent Receivers “
• Corren por detrás silenciosamente a la espera de un
evento que las levante: Mensajes SMS, notificaciones
de hardware, señal de otra aplicación.
• Es posible crear aplicaciones no visibles, aunque
conviene mostrar un cuadro de dialogo de
configuración para que el usuario establezca si quiere
que el servicio se ejecute en segundo plano.
49. Tipos de aplicaciones
Nativas: Intermitentes
• Combinan los dos tipos mencionados. Ejemplo de estas serían
correo electrónico, mensajería, etc.
50. Tipos de aplicaciones
Nativas: Wallpapers, Widgets
• Estos componentes permiten
comunicarse con el dispositivo sin
necesidad de ejecutar una aplicación .
• Acceden a diversas partes del terminal
como el acelerómetro o la batería y
responder ante eventos que reciban.
• Pueden ser dinámicos o estáticos y
mostrar diversa información como el
consumo de batería, una fecha, el clima
actual, etcétera.
52. Creación de aplicaciones Android
• Alternativas a Java: HTML5
– Permite actualizaciones instantáneas.
– Muy versátil.
– Varias plataformas.
53. Creación de aplicaciones Android
• Alternativas a Java: Appcelerator Titanium
– Convierte código html/javascript a una aplicación casi nativa
– Las aplicaciones de escritorio de Titanium deben ser
implementadas en PHP, Ruby o Python,
– Las aplicaciones para dispositivos móviles mediante HTML5 y
javascript.
54. Creación de aplicaciones Android
• Alternativas a Java: Rhomobile Rhodes
– Framework basado en Ruby
– La herramienta de desarrollo es Rhodes
– Rhodes muestra componentes con apariencia similar a los nativos de cada
plataforma
– Rhodes interpreta el código escrito en Ruby para convertirlo a código nativo de cada
plataforma, objectiveC para IPhone y Java para Android o Blackberry
55. Creación de aplicaciones Android
• Alternativas a Java: Clojure
– Lenguaje de programación multiparadigma.
– Dialecto de lisp.
– Compilable a Javascript.
– Máquina Virtual de Java
– Máquina virtual de .NET
56. Creación de aplicaciones Android
• Alternativas a Java: PhoneGap
– Framework para desarrollar en múltiples plataformas con lenguajes extendidos como:
HTML5, CSS, JavaScript.
– PhoneGap encapsula una aplicación web para que sea ejecutada como una aplicación nativa sea
cual sea la plataforma móvil de destino.
– El código de la aplicación utilizará las extendidas tecnologías html, javascript y CSS y se ejecuta
utilizando el navegador web del dispositivo móvil.
– PhoneGap aporta un enlace entre javacript y las APIs nativas del dispositivo móvil donde se está
ejecutando la aplicación web.
57. Creación de aplicaciones Android
• Alternativas a Java:
Kawa, Mirah, Pindah…
– Existen otras opciones no tan extendidas ni
conocidas
– Esto podría ser sólo el principio
59. Creación de aplicaciones Android
• ¿Qué se necesita para crear aplicaciones con Java?
– Compilador de Java (JDK ):
http://www.oracle.com/technetwork/java%20/javase/downloads/i
ndex.html
60. Creación de aplicaciones Android
• ¿Qué se necesita para crear aplicaciones con Java?
– Entorno de desarrollo 1: Eclipse
http://www.eclipse.org/downloads/
61. Creación de aplicaciones Android
• ¿Qué se necesita para crear aplicaciones con Java?
– Plugin para Eclipse:
http://dl-ssl.google.com/android/eclipse/
62. Creación de aplicaciones Android
• ¿Qué se necesita para crear aplicaciones con Java?
– Entorno de desarrollo 2: NetBeans
http://www.netbeans.org/downloads/
63. Creación de aplicaciones Android
• ¿Qué se necesita para crear aplicaciones con Java?
– Plugin para NetBeans
http://kenai.com/projects/nbandroid/downloads
64. Creación de aplicaciones Android
• ¿Qué se necesita para crear aplicaciones con Java?
– SDK de Android
http://developer.android.com/sdk/index.html
65. Creación de aplicaciones Android
• ¿Qué se necesita para crear aplicaciones con Java?
– SDK de Android
http://developer.android.com/sdk/index.html
66. Componentes de una aplicación
• Activity
• View
• Service
• Content Provider
• Broadcast Intent Receiver
• Intent
• Widget
67. Componentes de una aplicación
• Activity
– Componente principal de la interfaz gráfica
– Su contenido se indica mediante vistas
– Es una clase donde se muestran las vistas
– Cada Activity es independiente de las demás
– Cuando se llaman entre sí, las actividades de
introducen en una pila LIFO
68. Componentes de una aplicación
• View
– Son los componentes
básicos con los que se
construye la interfaz
gráfica de la aplicación
– Similar a AWT o Swing en
Java
– Todas heredan de
android.view.View
– Son el nexo entre las
Activity y el usuario, ya que
reciben los eventos.
69. Componentes de una aplicación
• Service
– Componentes sin interfaz
gráfica
– Se ejecutan en segundo
plano
– Similares a los servicios de
un sistema operativo
– Realizan diversas acciones
– Heredan de la clase
Service
70. Componentes de una aplicación
• Content Provider
– Comparte datos entre aplicaciones.
– Al compartir datos no se muestran detalles sobre su
estructura o forma de almacenamiento.
– Heredan de la clase ContentProvider
71. Componentes de una aplicación
• Broadcast Intent Receiver
– Reacciona frente a mensajes
emitidos por el sistema
– Cada aplicación puede tener o emitir
varios Broadcast Intent Receiver
– No tienen interfaz gráfica asociada
– No es necesario que la aplicación
esté ejecutándose
72. Componentes de una aplicación
• Intent
– Principal elemento de comunicación entre los
distintos componentes
– Las aplicaciones responden a los intents
– Los intents son objetos de la clase Intent, con los
datos a transmitir
73. Componentes de una aplicación
• Widget
– Pequeña aplicación
utilizada para facilitar el
acceso a funciones
frecuentes.
– Son los llamados gadgets
de escritorio
– Se programa de distinta
forma a como se hace con
una aplicación normal.
74. Ciclo de vida de una aplicación
• Está controlado
por el S. O.
• Depende de la
situación en que
esté la aplicación
• Hay diversos
estados de las
Activity
• Conocer los ciclos
de vida hará que
la aplicación
funcione
correctamente
75. Ciclo de vida de una aplicación
• Estados de la Activity
- Activa (Running): El usuario la
ve y puede interactuar con ella.
– Pausada (Paused): Ha pasado a
segundo plano pero aun está
visible porque otra actividad se
coloca sobre ella, aunque no la
tapa del todo.
– Parada (Stopped): La actividad
está completamente tapada por
la nueva actividad.
– Destruida (Destroyed): Se han
liberado todos sus recursos y
necesitaría comenzar un nuevo
ciclo de vida.
76. Ciclo de vida de una aplicación
• Métodos para gestionar el ciclo
– onCreate(): Se prepara la interfaz gráfica.
– onRestart(): Una actividad parada vuelve
a estar activa.
– onStart(): Se ejecuta justo antes de que la
aplicación sea visible al usuario.
– onResume(): Se ejecuta justo antes de
que el usuario interactúe con la aplicación
– onPause(): Se ejecuta cuando la actividad
actual va a ser tapada por otra.
– onStop(): Se ejecuta cuando la actividad
se hace invisible al usuario.
– onDestroy(): Se llama antes de destruir la
actividad.
77. Estructura de un proyecto
• Al crear una aplicación Android se
genera una estructura de carpetas
• Esta estructura es común a cualquier
aplicación, independientemente de su
tamaño y complejidad.
• Se apoya en ficheros XML
• Carpeta /src/
– Incluye las clases de la aplicación
– Se tendrán tantas clases como vistas
(Activity)
– Se sobrescribirán los métodos
necesarios del ciclo de vida y se les dará
funcionalidad.
78. Estructura de un proyecto
• Carpeta /res
– Guarda todos los recursos de la
aplicación (imágenes, XML de
interfaz, XML de
strings, sonidos, audios, etc).
– A cada recurso se le asigna una
dirección
– La subcarpeta drawable contiene
las imágenes de la aplicación.
– La subcarpeta layout contiene la
interfaz de las actividades.
– La subcarpeta values contiene
los textos de la aplicación en
ficheros XML
79. Estructura de un proyecto
• Carpeta /gen/
– Contiene código generado
automáticamente cada vez que
se compilar el proyecto.
– Contiene una clase R que
contendrá las direcciones de
los recursos creados en la
carpeta /res/
– La clase R no se debe
modificar, ya que se generará
constantemente.
– Esta clase es el “puente” entre
los recursos (/res/) y la
aplicación (/src/)
80. Estructura de un proyecto
• AndroidManifest.xml
– Es único por cada aplicación
– Se establecen los aspectos generales
de la aplicación. Entre ellos:
• Los permisos que la aplicación necesita
para funcionar (Acceso a Internet, a un
SDCard, …)
• Que clases se deben invocar
• La versión de Android para la que ha
sido diseñada la aplicación
• Las actividades, y servicios que incluye
la aplicación
• El icono y el texto que se mostrará al
lanzar la aplicación
• La actividad principal de la aplicación
• Etcétera
82. Android
Android Market: Google Play
• Antes denominado Android
Market, ahora Google Play Store o
Google Play simplemente.
• Aplicación: vending.apk
• Enero 2012: 500.000 apps.
• Buscar información y descargar
apps de terceros.
83. Android
Google Play: Google Checkout/Google Wallet
• Para ser desarrollador Android hay que pagar una cuota de 25$, mediante
el sistema Google Checkout.
• Antes denominado Google
Checkout, pero ahora ha sido
absorbido por Google Wallet.
• Sistema de pago seguro de
Google.
89. Google Play:
La tienda de Android
• Preparar una aplicación
para Google Play
– El paquete debe estar
certificado
– Se exporta la aplicación
– Se rellenan los datos para
certificar la aplicación
– Se genera el APK
90. Google Play:
La tienda de Android
• Publicar una aplicación en Google
Play
– Se indica en Google Play el APK
generado antes.
– Google Play lo valida
– Se rellenan los datos para subir la
aplicación
• Capturas de la aplicación
• Información sobre la aplicación
• Datos del desarrollador
• etcétera
– Se activa la publicación