viernes, 28 de junio de 2013

Presentación sobre desarrollo Android en la facultad UTN regional Rosario el 27/06/2013

Esta charla fue dada por parte del grupo Cultura Libre Rosario
Estos fueron los temas tratados



Desarrollando nuestra primera aplicación Android


Primero un poco de historia


¿Cuál es su origen, que es?


Básicamente es un sistema operativo basado en Linux, diseñado para dispositivos con pantallas táctiles, como smartphones y tablets.


Aunque no sólo para estos dispositivos. Desde hace un tiempo se esta trabajando en Google TV y por lo menos para un grupo de desarrolladores Google Glass ya se encuentra listo para usar.


Otros ejemplos, donde podemos ver el sistema operativo embebido en otros dispositivos:




Para conocer  más sobre  estos desarrollos, recomiendo que realicen la siguiente búsqueda “android embedded”

Nombres de las versiones

Las versiones de Android reciben el nombre de postres en ingles. En cada versión el postre elegido empieza por una letra distinta siguiendo un orden alfabético:

A:  Apple Pie (v1.0), Tarta de manzana
B:  Banana Bread (v1.1), Pan de plátano
C:  Cupcake (v1.5), Panque.
D:  Donut (v1.6), Rosquilla.
E:  Éclair (v2.0/v2.1), Pastel francés.
F:  Froyo (v2.2), (Abreviatura de «frozen yogurt») Yogur helado.
G: Gingerbread (v2.3), Pan de jengibre.
H:  Honeycomb (v3.0/v3.1/v3.2), Panal de miel.
I:    Ice Cream Sandwich (v4.0), Sándwich de helado.
J:   Jelly Bean (v4.1/v4.2), Gominola.


Quienes comenzaron con el desarrollo
Inicialmente comenzó el proyecto la empresa Android inc., la cual fue respaldada económicamente por Google, que la terminó comprando en 2005 y presentado en 2007 junto con la fundación Open Handset Alliance (consorcio de compañías de hardware, software y telecomunicaciones).


El primer teléfono con este sistema operativo fue vendido en octubre de 2008.


Android en números
Datos de porcentajes de teléfonos con Android y cantidad de aplicaciones


Alianza de compañías
La Open Handset Alliance (OHA) es una alianza comercial de 84 compañías que se dedica a desarrollar estándares abiertos para dispositivos móviles.


Algunos de sus miembros más importantes son: Google, HTC, Dell, Intel, Motorola, Qualcomm, Texas Instruments, Samsung, LG, T-Mobile, Nvidia y Wind River Systems.


Esta alianza empuja con una fuerza muy grande la adopción de este sistema operativo en el mercado.


Fragmentación
Un tema del que se ha hablado bastante es sobre la fragmentación en Android, a lo mejor se preguntaran que es, el problema que traía en un comienzo al ir cambiando las versiones de Android, es que las nuevas características uno no las podía utilizar en versiones anteriores, entonces tenía que elegir entre realizarlo con características antiguas para abarcar la mayor cantidad de dispositivos posibles, o utilizarlas pero perder una gran cuota de mercado.


El problema mayor venía entre las versiones desde las 2.3 hacia abajo, con respecto a la 3 en adelante, por este motivo ahora podemos incluir una librería de compatibilidad para poder utilizar las nuevas características. Y por otro lado lo que está ayudando a solventar este problema, es el gran recambio de versiones que hay en el mercado, como se pueden ver en las estadísticas oficiales:



Google Play y tiendas no oficiales


Desde que el producto ha sido adquirido por la empresa Google, nos ha brindado una cantidad de herramientas muy interesantes para ampliar sus capacidades de una manera sencilla, un ejemplo de estas son:
Google Maps, Admob, Google Cloud Messaging, Analytics, App Engine, Google Play In-app Billing.


Les recomiendo mucho que busquen información sobre estos productos. Que pueden resultarles de ayuda.


Es bueno aclarar que uno también puede utilizar tiendas no oficiales para descargar y subir aplicaciones para compartir,  la tienda oficial es Google Play, además de que también podemos instalarlas directamente obteniendo el archivo de la aplicación, que deberá ser uno con extensión .apk.


En la Google Play para estar registrado como desarrollador y poder subir aplicaciones, uno debe realizar un único pago de 25 dólares. (es bueno comentarles que en estos momentos la empresa Google quitó el soporte para que los desarrolladores con cuentas argentinas puedan subir aplicaciones pagas) y uno puede subir las aplicaciones que desee, siempre que cumpla con las condiciones de uso:


Entorno de desarrollo


El lenguaje oficial de desarrollo de aplicaciones Android es Java pero también existen otras posibilidades, para personas no programadoras, o que necesiten realizar aplicaciones muy sencillas, puede resultar interesante, no hace falta aclarar que es para nada recomendable para un proyecto serio.




Otras posibilidades que pueden ser una buena opción para alguien que no necesite un alto rendimiento, y con conocimientos de HTML5, CSS y Javascript.




De todas maneras estas opciones tienen la desventaja de no tener soporte oficial, además de no haber la misma cantidad de documentación o comunidad de desarrolladores que la que existe con Java.


Sistema operativo que soportan al brindar el SDK


Hasta ahora podremos desarrollar utilizando los siguientes sistemas operativos: Windows, Linux, Mac OS (en caso de utilizar la versión de 64 bits, existe la posibilidad de que tengan que instalar alguna librería de compatibilidad, para poder utilizar alguna herramienta como puede ser el adb, del que hablaré más adelante)


Configurar la JDK


Como dije anteriormente el lenguaje oficial de desarrollo, es Java, básicamente Android levanta una instancia de la máquina virtual de Java modificada por cada aplicación, esta VM se llama Virtual Dalvik Machine.


Por este motivo cuando compilamos en vez de generar archivos .class como para una VM de Java normal, vamos a generar archivos .dex que van a ser utilizados por la VDM
Lamentablemente debe advertirse, que para algunas cosas, la versión libre de la JDK llamada OpenJDK puede traernos algunos inconvenientes.


Para obtener la versión de Oracle, debemos dirigirnos a la siguiente url:


De todas maneras, los incentivó a que utilicen la versión libre, que la pueden conseguir desde esta dirección:


Elección de un IDE y obtención de un SDK
Normalmente para el desarrollo es conveniente utilizar un IDE, para esto hasta hace una semanas, el único que tenía soporte oficial por la gente de Android era Eclipse con la adición de un pluging. Ahora también nos proveen el Android Studio, que básicamente es la versión libre del Intellij IDEA modificada. Y que a futuro se planea en transformar en el IDE oficial.


Para obtener el SDK directamente debemos dirigirnos a la web oficial, allí lo podemos obtener de 3 maneras diferentes, la versión de Eclipse junto al SDK, la de Android Studio junto al SDK, y por separado el SDK.
Una vez descargado e instalado, debemos utilizar una herramienta llamada SDK Manager para obtener las librerías según las versiones de Android y de los diferentes servicios que nombramos anteriormente, como por ejemplo GCM, Admob y otros.
Esta es la dirección oficial donde podemos obtenerlo:


Que es el NDK y el ADK?
Además del SDK normal, también podemos querer realizar cosas a más bajo nivel, escritas en C o C++, o que estén realmente optimizadas o solo se pueda lograr con ellos, para esto vamos a necesitar la Native Development Kit. Cabe aclarar que esto no va a ser realmente necesario, para la gran mayoría de las aplicaciones que podemos llegar a desarrollar y tampoco es aconsejable su uso solo por el hecho de que nos guste programar en esos lenguajes.


También otra versión de desarrollo que podemos necesitar es el ADK o Accessory Development Kit, esta es una implementación para fabricantes de hardware o a personas que por hobbie le interese construir accesorios que interactúen con Android. La versión ADK 2012 esta creada para ayudarnos a interactuar y comunicarnos con la plataforma Arduino, una plataforma muy interesante de hardware libre, y les recomiendo mucho su investigación, porque de una manera sencilla nos abre una gran gama de posibilidades.


Como utilizar nuestras herramientas de desarrollo


IDE (Android Studio, Eclipse + pluging)
Nosotros podríamos utilizar directamente el SDK armando nuestras carpetas y compilando el proyecto a mano, lo que para algunas cosas me parece genial, pero en el caso de Android, al realizar mucho énfasis en el nombre de la carpetas y estructura del proyecto, creo que es una pérdida de tiempo y recomiendo utilizar uno de los IDE que antes nombre (o en caso de que lo prefieran, configurarse algún otro).
De las dos opciones que nos brindan, mi elección es el Android Studio, una porque esta basado en el IntellijIDEA y porque es el ultimo que se anuncio en el Google IO, y que va a tener mayor soporte a futuro además de traer algunas características interesantes. (Advierto que en estos momentos no es totalmente estable y puede llegar a faltarle soporte para algunas cosas, como el manejo del NDK, aunque esto es temporal)


Los dos IDE's nos dan la opción de crear un nuevo proyecto Android, nos arma el sistema de carpeta, configura las librerías, y demás.
Una de las grandes diferencias es que en la versión previa (Eclipse), la automatización de tareas como la compilación y verificación de errores se realizaba con Ant, muchos desarrolladores para tener más funcionalidades y por costumbre al proyecto Android le adicionaron Maven. En cambio con la nueva versión de IDE al generar el proyecto ya te genera una integración con Gradle (sistema de  automatización de tareas, obtención de librerías, etc ) similar a Maven, pero una de las ventajas que tiene Gradle es el tener un código mucho más sencillo e intuitivo, para configurarlo. Lo que a programadores que nunca han utilizado un sistema construcción de proyectos como estos, les va a resultar mucho más sencillo de manejar, y al que si tiene experiencia manejando por ejemplo Maven, no va a tener ningún tipo de inconveniente con Gradle. ( es más puede utilizar los repositorios de Maven)


Herramientas del SDK


Este es el listado de herramientas que nos brinda el SDK:
De todas ellas, estas van a ser las más importantes, por lo menos en un comienzo:


ADB
Es una herramienta de línea de comandos extremadamente útil, para comunicarnos con el emulador o con el dispositivo real, donde podremos realizar cosas como por ejemplo instalar una aplicación con el siguiente comando: adb install aplicacion.apk


AVD Manager
Con el vamos a poder crear máquinas virtuales con las que vamos a poder probar la mayoría de nuestras aplicaciones ( restricciones, no podemos probar la última versión del API de Google Maps, se ven mal aplicaciones con requerimientos gráficos elevados, como por ejemplo vídeo juegos, o cosas armadas con Canvas ) Una de las cosas interesante es que ya tenemos modelos de VM con características de dispositivos conocidos, como por ejemplo Nexus , etc, etc definidas y listas para usar.


LogCat
Es la herramienta que vamos a utilizar para ver la salida de debug de nuestra aplicación, lo bueno es que ya traen las librerías una clase Log, con la que vamos a poder ir configurando si el mensaje es de debug, warning, error y estos solo se mostrarán mientras la aplicación esté en modo debug.


Monitor DDMS
Esta es una herramienta gráfica donde vamos a poder ver la salida del LogCat, procesos, heap, navegar por las carpetas, tomar screenshot, y otras tareas más.


Creando nuestra primera Aplicación


Pasos para crear la aplicación con el AndroidStudio (nos generará un típico Hello World!)


  • Elegimos crear un nuevo proyecto.
  • Le cambiamos el nombre al proyecto y el nombre de los paquetes (tener cuidado con letras minúsculas, y tratar de que sea un nombre único)
  • Configuramos librerías con Gradle, o las agregamos a mano.
  • También podemos agregar los recursos que necesitemos, como imágenes u otro tipo de archivos.


Desarrollo


Estructura de nuestra aplicación ( estructura de carpetas, archivos de configuración ) http://developer.android.com/tools/projects/index.html


Ciclo de vida


Crear la UI por medio de los XML


El Android Manifest



Recomendaciones


Explorar todo lo que se pueda de la web oficial: http://developer.android.com
Buscar respuestas en sitios como: http://stackoverflow.com/
Unirse a listas de correos como: www.desarrolladores-android.com
Y por último, buscar algunas comunidades en la red social Google Plus


Con respecto a la web oficial, las dos secciones más importantes para arrancar son:


Seguir el training de la web oficial : http://developer.android.com/training/index.html
Seguir las pautas de diseño ( soporte para múltiples screens, navegación dentro de la aplicación ) http://developer.android.com/design/index.html


Si Android es Open Source, donde esta el código?


Podemos dirigirnos directamente a la web oficial del proyecto AOSP (Android Open Source Project)
Allí podremos obtener el código fuente, para crear nuestra propia ROM, o simplemente ver como esta escrito, cosa muy útil para aprender, o directamente contribuir al mismo.


Y las licencias?
En pocas palabras, el kernel del sistema operativo Android es Linux, el cual está licenciado con GPLv2, así que su código es libre, como las versiones que nosotros modifiquemos.
En cambio el resto está licenciado bajo Apache, lo que lo diferencia, es que con esta licencia no es necesariamente obligatorio liberar el código y lo podrías distribuir como tuyo ( aunque eso sería lo opuesto al motivo de crecimiento de Android, y el único motivo real para brindar esa posibilidad es por culpa de los fabricantes de hardware, que muchas veces no les agrada mucho liberar su código, recomiendo que vean este video http://www.youtube.com/watch?v=7XTHdcmjenI para que entiendan de qué hablo)


Enlaces interesantes sobre el tema:


Nota final: Me alegro mucho de haber realizado esto participando del grupo Cultura Libre Rosario
http://culturalibrerosario.org/

Esta es la presentación que se mostró en la misma:
Presentación



Espero que les allá gustado.

Saludos a todos, Gabriel