Las practicas de laboratorio del curso. Cada una se abre sola: no necesita internet mas que para las tipografias, y guarda tu avance en el navegador.
Aterrizar MVVM sobre un dominio chico: navegacion, ViewModel compartido y una capa de dominio que no sabe que existe Android.
Salir del proceso: primero corrutinas sobre trabajo que tarda, y luego una API de verdad del otro lado, con sus esperas y sus errores.
Media hora en Kotlin Playground para entender qué es suspender, y luego una app donde dos barras de progreso avanzan a la vez sin que la interfaz se congele.
La misma app de la Práctica 2, pero ahora restaurantes y reseñas viven en un servidor compartido. Vas a consultar datos remotos y completar el CRUD de reseñas, con su carga, sus errores y sus permisos.
Los datos dejan de vivir en la memoria del proceso y pasan a un archivo del telefono: SQLite con Room, y una consulta que avisa sola cuando su resultado cambia.
Un login de verdad contra la API del curso: tokens que se guardan en el telefono sin regalarse, un servidor que decide que puedes hacer, y una sesion que se renueva sola y se cierra cuando toca.
Una app con login contra la API del curso. Vas a recibir un par de tokens, guardarlos en el teléfono sin regalarlos, dejar que el servidor decida qué puedes ver, y renovarlos cuando caduquen — que va a ser cada cinco minutos.
Tu app del reto necesita un servidor que sepa quién es quién y qué puede hacer cada quien. Este anexo te da uno de referencia con el mismo contrato que usaste en la Práctica 6, te dice por qué construirlo en vez de instalar uno, y cómo adaptarlo a tu proyecto.
Tu app del reto necesita un servidor que sepa quién es quién y qué puede hacer cada quien. Este anexo te da uno de referencia con el mismo contrato que usaste en la Práctica 6, te dice por qué construirlo en vez de instalar uno, y cómo adaptarlo a tu proyecto.
De pantallas sueltas a un sistema: tokens de color, tipografia, forma y espaciado con Material 3, componentes propios que solo usan tokens, y la prueba de accesibilidad que casi nadie hace.
El servidor avisa: una conexion que se queda abierta mientras la app se ve, y un trabajo que el sistema corre cuando no. Notificaciones sin Firebase ni segunda app, y las reglas que Android impone a cambio.
Nadie construye lo que necesita: lo pide. Primero a mano, con una interfaz y un contenedor, y despues con Hilt, que escribe el contenedor al compilar. El premio es una prueba que corre sin internet.
Una imagen es el dato mas caro del telefono: el mas pesado en la red, el mas grande en memoria y el que mas informacion privada lleva escondida. Elegirla y fotografiarla sin pedir permisos, reducirla antes de subirla, y un servidor que la guarda donde debe.
La app de Avisos de la Práctica 8, ya con Hilt, aprende a llevar una imagen: elegida de la galería o tomada con la cámara, reducida en el teléfono, subida a tu propio servidor y mostrada en el tablón. Sin pedir un solo permiso, y sin que la foto se pierda si Android mata la app mientras la cámara está abierta.
El servidor del anexo de identidad aprende a recibir, guardar y servir imágenes. Las imágenes van a un almacén de objetos que habla S3, como Amazon; la base guarda solo su clave. Es el servidor de la Práctica 10, y el punto de partida para las fotos de tu reto.
Que la app se pruebe sola: reglas en la JVM en segundos, el ViewModel contra un servidor de mentira, la pantalla como la recorre TalkBack, y mutantes para descubrir lo que no estaba probado. Y el servidor tambien: pytest contra la base de verdad, y una matriz de trazabilidad que lo demuestra.
La app de Avisos de la Práctica 10, completa, aprende a probarse: reglas en la JVM en segundos, el ViewModel contra un servidor de mentira, la pantalla como la recorre TalkBack, y una cacería de mutantes para descubrir qué no estaba probado.
Las tres fallas de la clase de calidad, resueltas paso a paso con pytest: un profesor que borraba lo ajeno, un reintento que duplicaba y fotos que nadie usaba. Cada corrección llega con la prueba que la demuestra, y todo termina en la matriz de trazabilidad que pide la entrega final del reto.
Un chat cuya sala vive en tu computadora: FastAPI con WebSocket en Docker, un tunel que la saca a internet, una invitacion con QR y un anfitrion que decide quien entra. Y una conexion que sobrevive cuando la red falla, con pruebas que lo demuestran.
Un modelo de lenguaje que corre en el CPU del telefono, sin internet: cargarlo una vez y fuera del hilo principal, mostrar la respuesta mientras se genera y detenerla, pedirle las cosas para que un modelo chico obedezca, y probar la app con un modelo de mentira.
Una guía por práctica, escrita para estudiar el tema y no el ejemplo: conceptos, decisiones de diseño, errores frecuentes, fragmentos para interpretar y preguntas de autoevaluación con respuestas posibles. Empieza por la síntesis si quieres ver lo que cruza todas.
Las distinciones que cruzan varias guías: estado y evento, qué sobrevive a cada cambio, errores y reintentos, idempotencia, qué afirma cada tipo de prueba y seguridad por capas. Con preguntas integradoras al final.
Jetpack Compose, MVVM, ViewModel y Navigation
Kotlin Coroutines, suspensión, concurrencia estructurada, cancelación y dispatchers
HTTP, Retrofit, DTO, repositorios, estados de UI, errores y CRUD
SQLite, Room, Entity, DAO, Database, Flow, StateFlow, inyección manual de dependencias y migraciones
JWT, tokens, DataStore, Android Keystore, OkHttp y renovación de sesiones
Tokens, temas, componentes, Compose y accesibilidad
SSE, callbackFlow, ciclo de vida, notificaciones y WorkManager
Inyección de dependencias, inversión de dependencias, Hilt, Dagger y KSP
Coil, Photo Picker, FileProvider, compresión, EXIF, multipart y estado guardado
Pruebas locales, instrumentadas, corrutinas y calidad de las comprobaciones
FastAPI, Docker, WebSocket, protocolos, reconexión, QR y pruebas
Lo que no es tema de ninguna practica pero todas usan: adb listo en la terminal, en Windows, macOS y Linux.