Workshop de programación en Android
-
Upload
luis-munoz-hueso -
Category
Technology
-
view
622 -
download
0
description
Transcript of Workshop de programación en Android
© Luis Muñoz Hueso con licencia Crea3ve Commons
WORKSHOP DE PROGRAMACIÓN EN ANDROID
Luis Muñoz Hueso
@munozluis http://es.linkedin.com/in/lumunoz/
http://www.slideshare.net/lrmunoz
© Luis Muñoz Hueso con licencia Crea3ve Commons
INTRODUCCIÓN
© Luis Muñoz Hueso con licencia Crea3ve Commons
VUESTRO PROFESOR…
• Luis Muñoz Hueso • Ingeniero de Telecomunicación • Posgrado en emprendimiento (entrepreneurship) • +11 años de experiencia en desarrollo de
software en diferentes industrias y países • Fundador de la red social Serendipio, y la
plataforma de desarrollo de apps Fabriapps • Contacto:
– Twitter: @munozluis – Linkedin: http://es.linkedin.com/in/lumunoz – Email: [email protected]
© Luis Muñoz Hueso con licencia Crea3ve Commons
MI TIMELINE 1996 2001 2002 2005 2006 2007 2010 2012
© Luis Muñoz Hueso con licencia Crea3ve Commons
EL MOMENTO QUE LO CAMBIÓ TODO
Julio 07 Noviembre 07
© Luis Muñoz Hueso con licencia Crea3ve Commons
LA TECNOLOGÍA MÁS PENETRANTE DE LA HISTORIA
© Luis Muñoz Hueso con licencia Crea3ve Commons
PUNTO DE INFLEXIÓN: MÁS SMARTPHONES QUE PCS
© Luis Muñoz Hueso con licencia Crea3ve Commons
SMARTPHONES EQUIVALE A APPS
© Luis Muñoz Hueso con licencia Crea3ve Commons
PRINCIPALES PLATAFORMAS
• La plataforma líder es Android
• El 90% del mercado lo copan Android, iOS, y la web móvil
© Luis Muñoz Hueso con licencia Crea3ve Commons
UN NUEVO NICHO PROFESIONAL
+200% año/año* +500K nuevos empleos (US)
2,9 21,7 22
287,9
0
100
200
300
400
2012 2016
Gra3s
Pago Evolución exponencial de las descargas
*Fuente: Dice.com, Elan **Fuente: Sta3sta
2011 2012
Descargas (miles de millones)
© Luis Muñoz Hueso con licencia Crea3ve Commons
OPCIONES PARA DESARROLLO DE APPS
© Luis Muñoz Hueso con licencia Crea3ve Commons
REFERENCIAS Y RECURSOS
• Documentación de Android – http://developer.android.com/training/index.html
– http://developer.android.com/guide/components/index.html
• Libros – Learning Android – O’Reilly – Programming Android – O’Reilly
• Stack overflow – http://stackoverflow.com/
© Luis Muñoz Hueso con licencia Crea3ve Commons
CURSO DE ANDROID
• Este workshop es parte de un curso de Android para principiantes de 20 horas
• Para más información:
© Luis Muñoz Hueso con licencia Crea3ve Commons
EN ESTE CURSO…
• Trataremos el uso de aplicaciones nativas en Android a un nivel introductorio – Orientado a un entorno profesional
• Otros cursos en proyecto: – Niveles intermedio-avanzado de desarrollo nativo bajo Android
– Desarrollo de aplicaciones nativas en iOS (niveles inicial-intermedio-avanzado).
– Desarrollo de aplicaciones híbridas basadas en Phonegap (Apache Cordova) y HTML5
© Luis Muñoz Hueso con licencia Crea3ve Commons
A TENER EN CUENTA SOBRE EL CURSO
• A veces escribiremos código o haremos cosas que no entenderemos (en principio) – Tened un poco de paciencia J
• Terminología en inglés – Mótivo: búsquedas en foros, resolución de problemas, etc.
• Estructura temporal: bloques de 25 min + 5 min de descanso – 4 bloques – Descanso de 30 min – 4 bloques
© Luis Muñoz Hueso con licencia Crea3ve Commons
AGENDA DEL CURSO DE ANDROID
• Día 1 – Introducción – Preparación del entorno de desarrollo – Hello Android World! – Fundamentos de la plataforma Android – Estructura de un proyecto Android – Herramientas del SDK
• Día 2 – Repaso de Java y Eclipse – Arquitectura de las aplicaciones Android – Diseño de una aplicación de ejemplo
© Luis Muñoz Hueso con licencia Crea3ve Commons
AGENDA DEL CURSO DE ANDROID
• Día 3 – Interfaz gráfica de las apps Android (UI)
• Componentes gráficos y layouts • Mejores prácticas para el diseño de Uis en Android
• Día 4 – Librerías Android
• Bases de datos • Comunicación con un servidor • Acceso a las capacidades del teléfono
• Día 5 – Gestión del ciclo de vida de un app Android
• Desarrollo, testeo, depuración, publicar en Google Play
– Resumen del curso y próximos pasos.
© Luis Muñoz Hueso con licencia Crea3ve Commons
PREPARACIÓN DEL ENTORNO DE DESARROLLO
© Luis Muñoz Hueso con licencia Crea3ve Commons
QUÉ NECESITAMOS PARA DESARROLLAR EN ANDROID?
• Un PC con uno de los sistemas operativos principales – Recomendado Mac o Linux
• Java 6 – Se puede usar Java 7, pero compilando para 6
• Un entorno de desarrollo (IDE) – Como veremos, el mejor soportado y el más utilizado es Eclipse, por lo que se recomienda su uso
• El SDK de Android • Idealmente, un móvil Android con el que poder realizar pruebas en un terminal real – No es estríctamente necesario
© Luis Muñoz Hueso con licencia Crea3ve Commons
JAVA
• Descargar Java SE 6 SDK – http://www.oracle.com/technetwork/java/javase/downloads/index.html
© Luis Muñoz Hueso con licencia Crea3ve Commons
FUNDAMENTOS DE JAVA
• Lenguaje de programación creado por Sun Microsystems en 1995
• Orientado a Objetos • Basado en C++ y Smalltalk
– Pero más simple • Lenguaje interpretado independiente de la plataforma – Máquina virtual – Write once, run everywhere
• Multitud de beneficios – Seguro, escalable, eficiente, simple, multi-hilo, librerías gráficas, etc.
© Luis Muñoz Hueso con licencia Crea3ve Commons
ECLIPSE
• Instalar Eclipse Indigo Classic o EE Edition – http://www.eclipse.org/downloads/
© Luis Muñoz Hueso con licencia Crea3ve Commons
FUNDAMENTOS DE ECLIPSE
• Eclipse es un proyecto open source iniciado por IBM – Basado en el antiguo VisualAge
• Originalmente concebido para Java, se utiliza para multitud de lenguajes de programación – El propio Eclipse está desarrollado en Java, con algunas extensiones
• Arquitectura de plugins – Eclipse es extensible mediante plugins orientados a diferentes propósitos (lenguajes de programación, herramientas, etc.)
© Luis Muñoz Hueso con licencia Crea3ve Commons
CONCEPTOS DE ECLIPSE
• Workspace (entorno de trabajo) • Proyectos • Perspectivas
– Java – Java Browsing – Debug
• Plugins – Todos los elementos de Eclipse son plugins
• Arquitectura totalmente modular – Plugins para multitud de usos
• Inclusive para Android como veremos
© Luis Muñoz Hueso con licencia Crea3ve Commons
EL ENTORNO DE TRABAJO DE ECLIPSE
© Luis Muñoz Hueso con licencia Crea3ve Commons
SELECCIONAR EL JDK CORRECTO
© Luis Muñoz Hueso con licencia Crea3ve Commons
EJEMPLO: HELLO WORLD EN JAVA
© Luis Muñoz Hueso con licencia Crea3ve Commons
INSTALAR EL ANDROID SDK
• http://developer.android.com/sdk/index.html – Añadir al PATH
© Luis Muñoz Hueso con licencia Crea3ve Commons
CONTINUAR CON EL SDK MANAGER
• Ejecutar “android” • Seleccionar “platform-
tools” • Seleccionar al menos
una SDK platform – P.e. Android 4.1 – Seleccionar una
“System image” (x86 si está disponible)
• Extras – Seleccionar “Android
Support Library” – HAXM
© Luis Muñoz Hueso con licencia Crea3ve Commons
ESTRUCTURA DEL SDK
© Luis Muñoz Hueso con licencia Crea3ve Commons
INSTALAR ADT EN ECLIPSE
• Help à Install new software… à Add… – https://dl-ssl.google.com/android/eclipse/
© Luis Muñoz Hueso con licencia Crea3ve Commons
CONFIGURAR ADT Y ANDROID SDK
• Eclipse à Preferences à Android à SDK location
© Luis Muñoz Hueso con licencia Crea3ve Commons
HELLO ANDROID WORLD!
© Luis Muñoz Hueso con licencia Crea3ve Commons
CREAR UN PROYECTO ANDROID
• New à Other à Android Application Project
© Luis Muñoz Hueso con licencia Crea3ve Commons
CREAR UN PROYECTO ANDROID
© Luis Muñoz Hueso con licencia Crea3ve Commons
RESULTADO CREACIÓN PROYECTO
© Luis Muñoz Hueso con licencia Crea3ve Commons
CREAR UN AVD (ANDROID VIRTUAL DEVICE)
© Luis Muñoz Hueso con licencia Crea3ve Commons
AVD CON EMULACIÓN X86
• “HAX is not working and emulator runs in emulation mode” – http://stackoverflow.com/questions/10761696/android-
running-the-new-intel-emulator – [Android SDK Root]\extras\intel
\Hardware_Accelerated_Execution_Manager
© Luis Muñoz Hueso con licencia Crea3ve Commons
ARRANCAR EL EMULADOR
© Luis Muñoz Hueso con licencia Crea3ve Commons
EL EMULADOR DE ANDROID
• Se trata de un emulador, no un simulador – Un simulador “simula” lo que se está ejecutando para que aparente el resultado final • P.e. una vista previa en un constructor de ventanas
• Los binarios sobre el simulador y los de producción son diferentes
– Un emulador “emula” una plataforma y el código que se quiere ejecutar, encima de otra que probablemente sea diferente • P.e. un sistema ARM sobre una plataforma x86 • La razón por la cual a veces el emulador es lento • Las aplicaciones se ejecutan encima de la misma imagen que se instala en el móvil – Resultado fidedigno
© Luis Muñoz Hueso con licencia Crea3ve Commons
LANZAR HELLO ANDROID!
• Right-click à Run As à Android Application
© Luis Muñoz Hueso con licencia Crea3ve Commons
ANDROID DEVICE CHOOSER
© Luis Muñoz Hueso con licencia Crea3ve Commons
LANZAR HELLO ANDROID EN UN TERMINAL
• En Windows es necesario instalar los drivers del fabricante – Terminales Google: descargables desde el Android Manager
– Otros fábricantes: descargar el driver OEM correspondiente • http://developer.android.com/tools/extras/oem-usb.html
• No es necesario en el caso de Mac/Linux • Ejecutar el proyecto desde Eclipse • Seleccionar el dispositivo una vez reconocido en el “Android Device Chooser”
© Luis Muñoz Hueso con licencia Crea3ve Commons
LANZAR HELLO ANDROID EN UN TERMINAL
© Luis Muñoz Hueso con licencia Crea3ve Commons
FUNDAMENTOS DE LA PLATAFORMA ANDROID
© Luis Muñoz Hueso con licencia Crea3ve Commons
HISTORIA DE ANDROID
• 2003 - Android Inc. se funda en Palo Alto liderado por Andy Rubin
• 2005 - Google compra Android Inc. – Rumores sobre el lanzamiento del “GPhone”
• 2007 – Google anuncia Android junto con la Open Handset Alliance
• 2008 – Se libera el primer móvil Android – HTC Dream G1
• 2010 – El sistema Android se convierte en la plataforma líder en smartphones
• 2011 - Google compra Motorola • 2012 y futuro – Otros factores de forma y
dispositivos
© Luis Muñoz Hueso con licencia Crea3ve Commons
HISTORIA DE ANDROID
© Luis Muñoz Hueso con licencia Crea3ve Commons
CLAVES DEL ÉXITO DE ANDROID
• Antes que Android y iOS ya existían los smartphones y estándares para desarrollar sobre ellos – Java J2ME
• Android no fue el primer sistema operativo para móviles Open Source – Iniciativa Openmoko
• Ecosistema alrededor de la plataforma – Apoyo de los fabricantes – Creación de apps – Generación de contenido – Segmento de precio
© Luis Muñoz Hueso con licencia Crea3ve Commons
VERSIONES DE ANDROID Versión API level Apodo Android 1.0 1 Android
Android 1.1 2 Android
Android 1.5 3 Cupcake
Android 1.6 4 Donut
Android 2.0 5 Éclair
Android 2.01 6 Éclair
Android 2.1 7 Éclair
Android 2.2 8 Froyo
Android 2.3 9 Gingerbread
Android 2.3.3 10 Gingerbread
Android 3.x 11, 12, 13 Honeycomb
Android 4.0 14, 15 Ice Cream Sandwich
Android 4.1 16 Jelly Bean
Android 4.2 17 Jelly Bean (también)
© Luis Muñoz Hueso con licencia Crea3ve Commons
VERSIONES DE ANDROID
© Luis Muñoz Hueso con licencia Crea3ve Commons
DISTRIBUCIÓN DE VERSIONES
© Luis Muñoz Hueso con licencia Crea3ve Commons
EVOLUCIÓN DE LAS VERSIONES
© Luis Muñoz Hueso con licencia Crea3ve Commons
FAMILIAS
• Google Nexus – Familia de dispositivos implementación de referencia de Android • Primeros en recibir actualizaciones • Recomendados para desarrollo • Hasta ahora, 3 fabricantes
– HTC, Samsung, Asus
• Versiones de fabricantes – HTC: SenseUI – Samsung: TouchWiz – Motorola: MotoBlur
• “With Google” – Versiones con licencia para incluir las apps de Google • Maps, Gmail, Gtalk
© Luis Muñoz Hueso con licencia Crea3ve Commons
PILA TECNOLÓGICA
© Luis Muñoz Hueso con licencia Crea3ve Commons
LINUX KERNEL
• Android está construido sobre el Kernel de Linux (2.6 y 3.x) – Abstracción del hardware (drivers) – Gestión de memoria – Gestión de procesos – Networking – Seguridad
• Muchas cosas de Linux quedan fuera – Gestión de usuarios, X11, mount, etc.
• Hardware base: Arquitecturas ARM – Versiones x86 para las APIs más recientes
• El usuario nunca accede al subsistema Linux directamente
• El desarrollador sí puede acceder a través del shell adb
© Luis Muñoz Hueso con licencia Crea3ve Commons
LIBRERÍAS
• Webkit: Framework de navegador web – Desarrollado por Apple como base de Safari (y otras aplicaciones OS X), también es el motor usado por Chrome.
• OpenGL: Para los gráficos • Codecs: Para soportar los estándares de audio/video más comunes
• SQLite: Base de datos • Surface manager: Sistema de ventanas • Freetype: Motor de fuentes • Y muchas más…
© Luis Muñoz Hueso con licencia Crea3ve Commons
DALVIK Y JAVA
• El elemento fundamental del desarrollo Android
• Es una “Virtual Machine” de Java (VM) – Optimizada para dispositivos móviles (uso eficiente de la CPU y ahorro de batería)
• Existen diferencias respecto a la versión de Oracle – Código à Bytecode .class à Ficheros .dex – .dex ≈ “Dalvik Executable” – Las librerías difieren
• Por ejemplo se elimina todo lo referente a AWT/Swing y se añaden librerías específicas de Android – P.e. utilidades Base64
© Luis Muñoz Hueso con licencia Crea3ve Commons
APPLICATION FRAMEWORK
• Librerías desarrolladas específicamente para Android – Orientadas al desarrollo en Smartphones
• Exponen las capacidades de la plataforma a las apps que se construyen sobre ellas
• Cada “API Level” contiene una serie de capacidades distintas de las anteriores – Mejoras y nuevas capacidades de manera incremental
– También algunas APIs se deshechan (deprecation) • Android Support Library
– Permite emplear APIs recientes en versiones antiguas de Android
© Luis Muñoz Hueso con licencia Crea3ve Commons
APLICACIONES
• Son el código que corre por encima de la API de Android, y que cumplen una función de valor para el usuario – Aplicaciones del sistema, Aplicaciones de desarrolladores, juegos, servicios, etc.
• Cada vez más se les conoce como “apps” • Consisten en un fichero con extensión .apk
– Formado por el ejecutable Dalvik junto con los recursos (iconos, xml, audio/vídeo, etc.) y librerías adicionales
– Se trata de un fichero Zip • Deben firmarse
– Pero para testeo vale una clave de desarrollo
© Luis Muñoz Hueso con licencia Crea3ve Commons
DISTRIBUCIÓN DE APPS
• El mecanismo principal es a través de un “store” – El principal es Google Play
• Hay que pagar un registro de $25 (una vez) – Pero hay muchos más – Amazon Appstore
• http://www.amazon.com/mobile-apps/ – GetJar
• http://www.getjar.com/
• Pero hay más mecanismos: “Side Loading” – Email, Descargar de una web, USB, etc.
© Luis Muñoz Hueso con licencia Crea3ve Commons
DISTRIBUCIÓN DE APPS
• Habilitar “Unknown sources” – Fuentes desconocidas – Para instalar desde otra fuente que no sea Android Play • Otros app stores • “Side Loading”
© Luis Muñoz Hueso con licencia Crea3ve Commons
SISTEMA DE ARCHIVOS
• Tres puntos principales – Sistema, Apps, SD
• Cada app tiene su propio subsistema – /data/data/app.package
• La tarjeta SD siempre se supone presente – Todas las apps tienen
acceso • La partición del
sistema contiene el SO – Específico del
fabricante o genérico
© Luis Muñoz Hueso con licencia Crea3ve Commons
ESTRUCTURA DE UN PROYECTO ANDROID
© Luis Muñoz Hueso con licencia Crea3ve Commons
ESTRUCTURA DE UN PROYECTO ANDROID
© Luis Muñoz Hueso con licencia Crea3ve Commons
ELEMENTOS PRINCIPALES
• Bajo “src” se encuentra el código fuente de nuestra app
• Bajo “res” se encuentran los recursos de nuestra app
• Bajo “gen” se encuentra el código autogenerado a partir de los recursos – Clase R: el enlace entre el código fuente y los recursos
• Bajo “libs” se encuentran las librerias Android que nuestra app requiere
• AndroidManifest.xml • Otros ficheros y directorios
© Luis Muñoz Hueso con licencia Crea3ve Commons
ANDROID MANIFEST
© Luis Muñoz Hueso con licencia Crea3ve Commons
RECURSOS
• Bajo “values” se almacenan cadenas y estilos • Bajo “layout” se define la interfaz gráfica
(UI) para cada “Activity” • Bajo “drawable” se almacenan los diferentes
recursos gráficos según el tipo de pantalla • Bajo “menu” se almacenan la configuración de
menú para cada actividad • Los recursos son especializables para
diferentes configuraciones – Idioma, formato de pantalla, versión de la API…
• Más tipos de recursos – http://developer.android.com/guide/topics/resources/available-resources.html
© Luis Muñoz Hueso con licencia Crea3ve Commons
ALGUNOS RECURSOS IMPORTANTES
• El fichero values/strings.xml almacena las cadenas de texto de la aplicación – Utilizado para la internacionalización (I18N) de la app
© Luis Muñoz Hueso con licencia Crea3ve Commons
ALGUNOS RECURSOS IMPORTANTES
• Los ficheros layout/*.xml definen la interfaz de las diferentes ventanas de la app – El plugin ADT integra un editor visual avanzado para editar los “widgets” de la ventana
© Luis Muñoz Hueso con licencia Crea3ve Commons
LA CLASE R
• La clase R es el enlace entre el código Java y los recursos – Permite acceder a los recursos con comodidad desde el código
• Es autogenerada
© Luis Muñoz Hueso con licencia Crea3ve Commons
EL CÓDIGO JAVA
• Al final, toda la lógica de nuestra app se encuentra en el código Java
• La unidad fundamental de código en Android es la “Activity” – Se puede decir que cada “Activity” representa una pantalla de nuestro app
© Luis Muñoz Hueso con licencia Crea3ve Commons
ASISTENTE PARA LA CREACIÓN DE RECURSOS
• Los recursos pueden ser cualificados según el entorno en tiempo de ejecución – El Android Runtime decide que opción elegir según el dispositivo
• Se traduce en carpetas con “qualifiers” – Es recomendable usar el asistente XML de Android
© Luis Muñoz Hueso con licencia Crea3ve Commons
TIPOS DE PANTALLA
• Android maneja 2 parámetros de pantalla – Tamaño – Densidad
• Se deben dejar los recursos gráficos apropiados en cada directorio cualificado
© Luis Muñoz Hueso con licencia Crea3ve Commons
ANDROID DEVELOPER TOOLS
© Luis Muñoz Hueso con licencia Crea3ve Commons
ADB – ANDROID DEBUG BRIDGE
• Se trata del proceso que comunica los dispositivos (reales o emuladores) con el hardware de desarrollo – Siempre, incluido el emulador, consiste en hardware independiente real o emulado
• Muchas veces se vuelve inestable – adb devices – adb kill-server – adb start-server
© Luis Muñoz Hueso con licencia Crea3ve Commons
KEYSTORES
• Todas las aplicaciones Android deben ser firmadas
• Producción: clave válida durante 25 años
• Desarrollo: clave válida durante 1 año – Generada automáticamente por las “tools”
– Si expira basta con borrarla
© Luis Muñoz Hueso con licencia Crea3ve Commons
ANDROID
• Utilidad para gestionar el SDK – ./android
• También se utiliza para gestionar proyectos desde la línea de comandos – http://developer.android.com/tools/projects/projects-cmdline.html
android create project \ --target <target_ID> \ --name <your_project_name> \ --path path/to/your/project \ --activity <your_activity_name> \ --package <your_package_namespace>
android update project \ --name <project_name> \ --target <target_ID> \ --path <path_to_your_project>
© Luis Muñoz Hueso con licencia Crea3ve Commons
ANT
• Ant es una utilidad genérica para compilar proyectos Java – Muy empleado en la comunidad Java
• Se utiliza mucho en Android si se emplea la línea de comandos
© Luis Muñoz Hueso con licencia Crea3ve Commons
DDMS
© Luis Muñoz Hueso con licencia Crea3ve Commons
TRACEVIEW