Notas de clase de Programación de Dispositivos Móviles

Desafortunadamente, la aplicación Duelo de Vaqueros se ha detenido

Curso optativo de la licenciatura en Ciencias de la Computación (plan 2013). El contenido del curso es sobre desarrollo de Android. Comienza con consideraciones más básicas sobre desarrollo móvil en general, luego introduce al Android SDK y Android Studio para empezar a explorar la plataforma de Android y las herramientas y conceptos más básicos para empezar a desarrollar aplicaciones con Android.

Participé en la impartición de este curso durante la pandemia por COVID-19; que motivó a trabajar los cursos a distancia. Hace algunos años, me preguntaba porqué la Facultad de Ciencas no ofrece ni una carrera en Modalidad Abierta o a Distancia. La respuesta que recibí por varios colegas en ese momento fue que "las carreras de ciencias son muy difíciles" (y cuál no) "y que por eso no se pueden dar a distancia"... Hasta que lo intentaron y resulta que siempre sí se podía, solo hacía falta intentarlo.

Las clases a distancia necesitan un modelo MUY diferente al de las clases presenciales; y si existe una opinión generalizada sobre la "mala" calidad de la enseñanza a distancia, tiene mucho que ver con que muchos docentes no fueron capacitados -o simplemente se negaron a cambiar su forma de trabajo- y durante la pandemia se presentó un modelo de educación "presencial a distnacia" que simplemente no dio el ancho. No solo lo ví como docente, sino también como estudiante de posgrado.

Tratando de adecuar este curso para la modalidad en línea, hice una reestructuración significativa a la organización de los temas y grabé las clases. Ahora presento ese material y las video clases en esta sección.

Los videos se encuentran hospedados en la comunidad HardLimit, que reúne entusiastas de la tecología digital y cuenta con una plataforma de video basada en PeerTube.
Recomiendo que abra el enlace dando click en el texto "PeerTube" en la esquina inferior derecha del (los) video(s) que desee consultar, pues en HardLimit los videos cuentan con una descripción con marcas de tiempo que desglozan detalladamente el contenido de cada video.

Para su fácil acceso, dejo el enlace a la lista de reproduccón en HardLimit.

Tras esta ya no tan pequeña introducción, va una lista de los temas que he elaborado para este curso:

Introducción a Android


Empezamos el curso con una introducción muy general al desarrollo móvil, la historia de Android y sus características como Plataforma de desarrollo y Sistema Operativo

Consideraciones generales del desarrollo móvil


Antes de empezar a conocer las herramientas con las que vamos a desarrollar aplicaciones para Android, vamos a revisar algunas de las consideraciones del desarrollo móvil más importantes.

Android Studio


Empecemos a conocer la herramienta principal con la que desarrollamos aplicaciones Android: Android Studio

Trabajo en equipo

Tema opcional


La estrategia de trabajo del curso; en el que al final los estudiantes completan una aplicación para un cliente real, sumada al trabajo a distancia por la pandemia; hacen que sea necesario revisar algunos conceptos en torno a la Ingeniería de Software.

En este tema se introducen conceptos y práctias para el desarrollo en equipo; basadas en Metodologías Ágiles, Diseño Centrado en el Usuario y Colaboración asíncrona no precencial.

Porque es posible crear software de calidad sin tener que compartir el mismo espacio que tus compañeros de trabajo (aunque compartir una cerveza durante una reta de Mario Kart siempre es deseable).

Desarrollando aplicaciones para Android


En estas notas se presenta un proyecto que muestra algunos de los conceptos más básicos que son necesarios para empezar a desarrollar aplicaciones para Android.

El proyecto que se desarrolla en estas notas está disponible en Gitlab: https://gitlab.com/nachintoch/cowboy-duel

Por último, para desarrollar el proyecto se cuentan con los siguientes recursos (imágenes y sonidos para replicar la aplicación de ejemplo, pero puede usar otros si lo desea): recursos.zip

Material design


El lenguaje de dieseño estándar de Android es Material Design . Estas notas introducen algunos de los fundamentos más básicos para implementar interfaces gráficas en Android siguiendo el estandar de diseño.

Este tema está dividido en dos notas, la primera parte puede ser accedida aquí (el video incluye ambas partes).

Estas notas inician el desarrollo de un proyecto que se retoma en varias notas más adelante. https://gitlab.com/nachintoch/gui-design-patterns-w-material-desig

Ciclo de vida de una aplicación Android


Todas las aplicaciones, programas y sistemas tienen un ciclo de vida: son instanciadas, puestas en marcha, consumen recursos, son pausadas y eventualmente crashean (o su ejecución termina).

En este tema conoceremos cómo es el ciclo de vida de una aplicación Android, y el marco de trabajo que delimitan para nuestras apps.

Este tema está dividido en dos notas, la segunda parte nos sugiere como diseñar y sobre todo documentar una aplicación Android, usando el marco de trabajo que delimita su Ciclo de Vida (el video incluye ambas partes).

Fragmentos


En estas notas, se retoma el proyecto de ejemplo de Material Design y se continua su desarrollo para conocer los fragmentos, que son pantallas que pueden acomodarse de la forma en que mejor nos convenga para implementar las interfaces de nuestras apps. Además, a diferencia de un Layout, los Fragmentos se definen en código; por lo que son pantallas con atributos y comportamiento. Los fragmentos se usan para implementar uno de los patrones de diseño de Android más preciados: Master-Detail Flow.

Los fragmentos también se usan para implementar pantallas "predefinidas" que podemos usar para desarrollar rápido. Se agregará una Pantalla de Preferencias a la aplicación que ejemplifica Material Design también

Enlace al repositorio de ejemplo: https://gitlab.com/nachintoch/gui-design-patterns-w-material-desig

Proveedores de Contenidos


En este tema conoceremos el componente de una aplicación Android que nos permite definir repositorios de información que podemos incluso compartir con otras aplicaciones (si así lo configuramos).
El almacenamiento es independiente de la implementación por lo que aunque el proyecto se ejemplifica usando la implementación nativa de SQLite de Android, pero podríamos usar otros manejadores de bases de datos, almacenamiento en la nube, archivos locales o en otros medios.

Enlace al proyecto de ejemplo: https://gitlab.com/nachintoch/gui-design-patterns-w-material-desig

Diálogos emergentes con FragmentDialog

Las actividades y fragmentos de una aplicación Android pueden configurarse para ser mostrados en forma de cuadros de texto o dialogos emergentes. Una de las estrategias más empleadas para construir Dialogos emergentes es definiendo subclases de DialogFragment

Encontrará el repositorio del proyecto de ejemplo que se construye en el video en la siguiente liga: https://gitlab.com/nachintoch/ejemplo-dialogo-personalizado

Realidad Aumentada (RA) con SceneForm

Pese a que Google ha sido inconsistente respecto a la presencia de Realidad Aumentada y Virtual en Android, la comunidad ha mantenido paquetes que permiten una fácil integración de estas tecnologías en nuestras aplicaciones... Con ciertas limitaciones...
En estas notas se presenta cómo usar SceneForm para crear una simple aplicación que aumenta rostros empleando la cámara frontal del dispositivo, pudiendo aumentar los rostros mediante texturas (que pueden implementarse cómo imágenes PNG que SceneForm dibuja sobre el contorno de los rostros detectados) o mediante modelos 3D

El proyecto que se desarrolla en estas notas se encuentra hospedado en el siguiente repositorio: https://gitlab.com/nachintoch/ejemplo-ar-sceneview