Workshop de programación en Android

Post on 04-Dec-2014

622 views 0 download

description

Transparencias del workshop de Programación en Android

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: luis@serendipio.com

©  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@serendipio.com

©  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