Tus primeros pasos en Android

Cuando empecé a programar Android, me hubiera gustado tener una guía como esta. Por lo tanto, la voy a armar para los futuros desarrolladores en esta hermosa tecnología.

Hace una semana me viene rondando en la cabeza la idea de crear una guía extensa sobre cómo adentrarte en el mundo de Android. Quizá es algo que debería haber escrito apenas arranqué mi diario, dado que trabajo con desarrollo móvil desde hace más de 5 años.

Podría decir que de todas las cosas que suelo hablar, es la que más conozco. Por lo tanto, voy a ofrecerles lo que me hubiera gustado tener cuando arranqué: Una guía que te lleve de la mano hacia la experiencia.

Por qué Android Nativo?

En un mundo gobernado por React y la idea de lanzar tu aplicación a múltiples plataformas, ¿por qué querrías aprender Android nativo?

Digamos que soy un purista al respecto de estas cuestiones, pero también tengo una cuota de realismo. Comprendo que si tu empresa es chica o quizá te estás lanzando solo, contratar un programador android y otro de Swift es caro.

La salida más rápida es usar un framework como React Native que te simplifica desarrollar una sola vez y salir a todas las plataformas.

Sin embargo, nos estamos olvidando de una cuestión fundamental: Si bien React es muy distinto al viejo Phonegap o Cordova, no deja de ser un puente hacia lo nativo.

React tiene que generar código para representar lo que estamos escribiendo en Javascript o Typescript. Eso nos quita algo de control sobre cómo queremos desarrollar nuestra aplicación.

Y luego esta el problema de la compatibilidad. Android saca una nueva versión cada año. En la mayoría de los casos, implica un cambio en el hardware (como una versión nueva de la cámara que maneje una perspectiva 3D).

Cuando Google saca una nueva versión de su sistema operativo, lanza un SDK (Software Development Kit). Esto es un conjunto de herramientas que nos permite trabajar con las nuevas funcionalidades de ese sistema.

Y React, conjunto de los demás frameworks, tiene que lanzar un soporte específico para cada nuevo SDK. En el caso de los programadores nativos, trabajos directamente con el que nos provee Google.

No me malinterpreten: React es muy bueno, su soporte también. Si tu objetivo es trabajar independiente en aplicaciones que no involucren un manejo de hardware muy específico, te va a funcionar sin problemas.

Pero por ejemplo, no confiaría a React una aplicación de reconocimiento facial. Prefiero crear una con Android que trabaje con un Bridge en C o C++ con OpenCV. Pero no nos adelantemos.

Resumiendo: Programar Android nativo nos pone al frente de todo lo nuevo que vaya saliendo. Y no nos limitemos a móviles, también tenemos Android TV, Android Wear, Android Auto, entre otros.

Otro punto interesante es que nativamente podemos trabajar con Java o Kotlin. En el caso de React, desarrollamos con Javascript o Typescript.

Antes de empezar

Programar en una tecnología requiere entender los fundamentos. Por eso, te invito a leer mi artículo sobre como aprender a programar de cero:

Otro punto que me interesa remarcar, es que tengo un curso en Udemy para aprender Android desde cero. Te recomiendo tomar el curso pero también leer este artículo 🙂

Herramientas Indispensables

Estas son las herramientas de software que vas a necesitar para iniciar tu camino en el desarrollo de Android:

  • Intellij: Con este IDE vas a poder correr aplicaciones en Java. Con la versión Community te alcanza.
  • Android Studio: Es fundamental. Con este IDE vas a correr aplicaciones en Android. La instalación ya viene con el SDK incluido.
  • JDK (Java Development Kit): Es el kit de desarrollo de Java. Cualquier versión de la 8 o superior te sirve.
  • Visual Studio Code: Esto podría ser opcional. Se trata de un editor de código creado por Microsoft. El más famoso hasta la fecha. A veces puede que necesites editar un archivo puntual y no quieras abrir un IDE.
  • Windows, Linux o Mac: Android se puede desarrollar en cualquiera de estos sistemas operativos. Aunque la instalación en Linux puede ser un poco más compleja.
  • Disco SSD: Un disco sólido, indispensable. Android Studio accede al disco constantemente, por lo que tener una velocidad buena te va a beneficiar en muchos aspectos, especialmente en la compilación.
  • 8GB de RAM: Es lo recomendable. Lo mínimo sería cuatro.
  • Café, Mate o Té: Cualquier cosa que te mantenga despierto por muchas horas. Probablemente el requisito mas importante 🙂

Aprender Java

Si leen por ahí que Java está muriendo, no se preocupen: No es así. Esto lo digo con seguridad porque Java es un lenguaje multiplataforma. Hoy día muchos bancos confían su sistema a Java Spring (un framework de desarrollo web y APIs).

Minecraft esta desarrollado en Java y siguen lanzando actualizaciones, aunque muchos estemos de acuerdo que la optimización es un tema complejo de tratar. Si les interesa desarrollar mods usando Java, les dejo un artículo donde enseño como:

Minecraft Plugins con Spigot

También se han desarrollado muchas aplicaciones para escritorio, aunque en este caso yo me inclino más por usar Electron, una librería de interfaces visuales usando Javascript.

Es fundamental entender que Java corre en una JVM (Java Virtual Machine), que viene a ser una máquina virtual con su propio entorno para correr sus aplicaciones. Esto aplica a cualquier tecnología que utilicemos con este lenguaje.

Otra particularidad es que Java soporta el paradigma de programación orientada a objetos, estructurada, funcional y reactiva. Por lo tanto, es un lenguaje multiparadigma que se va a adecuar a nuestras necesidades.

Los recursos para aprender Java son miles: Mi curso de Android te enseña en la primer sección, pero también podés aprenderlo por Youtube mediante un canal español muy conocido llamado Pildoras Informáticas:

Si no te atraen los cursos de hispanohablantes, también podes encontrar alternativas en inglés. Por ejemplo, freeCodeCamp posee un tutorial de nueve horas y media enseñando los fundamentos de Java:

No quiero crear polémica, pero yo personalmente aprendí mejor de los cursos en ingles que españoles. Pero esto es una apreciación mía y completamente subjetiva. Me he cruzado con cursos en español excelentes y también con tutoriales en ingles lamentables. Hay de todo.

Aunque si lo tuyo son los libros, te recomiendo los libros de O’Reilly. Muchos rechazan la idea de un escrito, dado que el contenido tiende a desactualizarse. Pero en el caso de los fundamentos en Java, eso nunca cambia. Son bases y se van a mantener por mucho tiempo.

Instalación de Android Studio

Les comparto un artículo donde explico detalladamente como instalar Android Studio:

Como Instalar Android Studio

Aprender lo más básico de Android

Android, si bien es llamado un lenguaje de programación, en realidad es un SDK de Java. Esto significa que nuestro código sigue siendo el mismo, pero con esteroides.

Y esto implica que si aprendiste que Java es un lenguaje orientado a objetos, sabes que existen clases que podés heredar y adquirir esas funcionalidades.

Entonces podríamos decir que Android es un conjunto de librerías que contienen super clases, las cuales nos permiten heredarlas y convertir nuestras clases Java en componentes de una aplicación en Android.

Esto quizá sea un resumen demasiado acotado de cómo funciona todo, pero nos ayuda a entender dónde estamos parados. No queremos correr una app en el celular y pensar que hay gnomos detrás creando magia. Necesitamos entender las razones por las cuales eso funciona.

Y como no podía ser de otra manera, lo primero que te recomiendo es consultar la documentación oficial de Google. Ellos tienen una serie de tutoriales para empezar a entender los mecanismos básicos de una aplicación.

Es importante que aprendas lo básico e indispensable, pero que todavía no te centres en lo avanzado. Con poder crear un “Hola mundo” y verlo desde tu celular o emulador, es suficiente.

Empezar con una idea

Un error que comete mucha gente, es aprender sin un propósito inicial. No me digan que aprenden para buscar trabajo, no es un propósito válido.

La razón tiene que ser más interesante. Tienen que pensar que es lo que realmente quieren hacer con esto que están dedicando horas a ver vídeos y leer libros.

Parados en Android, podemos crear aplicaciones. Lo primero que deberías hacer es salir a la calle y detectar necesidades, sean tuyas o de otras personas.

No por estar aprendiendo vas a negarte a crear un producto. El desarrollador de Stardew Valley terminó creando su juego con el propósito inicial de aprender C#. Una cosa llevó a la otra y hoy vive de ese juego.

Entonces, necesitamos crear una app. Salimos a la calle y notamos que la gente siempre que sale de su trabajo, va a un bar cercano. La necesidad:

Encontrar un bar luego del trabajo.

Por lo tanto, nuestra app podría contener una lista de bares cercanos. Ya tenemos la idea inicial, el propósito. Ahora avancemos con la ejecución.

Manos a la obra

Yo soy devoto de la idea de que se aprende haciendo. Muchos hacen un tutorial o dos, y luego de terminarlo no saben qué hacer exactamente con lo que aprendieron.

Todos practicamos, pero pocos lo llevan a un contexto real. Por eso yo siempre les digo a mis alumnos que consigan trabajo mientras estudian, y no después.

Un trabajo te genera enfoques, porque hay gente que ya tiene una idea y necesita ejecutarla. Cuando te la transmite, ahí es donde notás si realmente aprendiste lo suficiente. La respuesta suele ser: no.

Porque los problemas reales son mucho más grandes y complejos que cualquier curso o tutorial. Pero esto no es un fallo de tu esquema de aprendizaje, al contrario, es parte del flujo.

Pero volvamos al ejemplo del emprendimiento propio, dado que quizá todavía no hayas conseguido trabajo, y nuestra meta es que te vuelvas un experto/a.

El primer paso es que la app sea estéticamente aceptable. No podemos mostrarle a nuestros usuarios una pantalla blanca con textos negros. Por lo tanto, tenemos que aprender los fundamentos de Material Design, un patrón de diseño gráfico que Google inventó para estandarizar el diseño de sus apps.

Siguiendo los lineamientos, podríamos tener una app similar a esto:

Si tu app no responde a estos principios, podría no ser atractiva, y un producto entra por los ojos.

Marco de Referencia

Las ideas no suelen salir de la nada. Debemos investigar previamente apps similares a lo que intentamos hacer. De esta manera desarrollamos un marco de referencia, y aprendemos de los errores y aciertos de los ejemplos que estamos investigando. Nuestro marco en este caso eso Foursquare.

MockUp

Si bien aprendimos a maquetar una app, todavía no podemos diseñar nada si no sabemos como estructurarla. Vamos a dividirla en posibles pantallas según la funcionalidad:

  • Login Social: Los usuarios deberían poder acceder con una cuenta conectada a Facebook, Google o Twitter por ejemplo. Esto nos permite que tengan bares favoritos, o nos dejen comentarios.
  • Home: Aquí es donde implementaremos nuestra lista de bares. Al conocer los principios de material, podemos usar CardViews para cada item de la lista.
  • Favoritos: Similar a la Home, podríamos tener una lista de bares que el usuario frecuente y quiera tener en una pantalla aparte.
  • Detalle del Bar: Cuando se entre a un bar desde la Home, deberíamos poder acceder a información del mismo. Por ejemplo, el mapa, las opiniones de los usuarios, la calificación, una descripción corta, entre otras.

Una vez tenemos claras las pantallas, tomamos lapiz y papel y empezamos a dibujar un bosquejo del detalle de cada una. Unos botones, la lista, como se va a ver el detalle, la posición de los input de usuario y contraseña. Todo lo que nos defina la estructura en la que nos vamos a basar.

Esto es un MockUp. También hay herramientas web para hacerlo, pero recomiendo en primera instancia que sea a mano. Esto es un proceso psicológico, dado que con el lapiz tenemos mayores libertades, y nos podemos centrar en la idea más que en el uso de una herramienta.

Aprender Haciendo

Ahora llegó el momento de aprender más intensamente. En el camino por el que fuimos hasta ahora, aprendiste:

  • Fundamentos en Java y Android
  • Tomar ejemplos como punto de partida para tu proyecto
  • Cómo armar mocks
  • Los principios de Material Design

Como ven, emprender un proyecto te “obliga” a aprender a desarrollar de un modo mas real que las prácticas en los cursos. Te da un panorama, el cual vamos a seguir ampliando.

Nuestra primer pantalla es el Login Social. Hay varias formas de hacer esto, pero la más popular en este momento es usar los servicios de Firebase. Lo ideal es que hagamos un tutorial rápido de qué es y como utilizarlo con Android específicamente, dado que es un servicio multiplataforma.

Para hacerlo, les dejo una guía oficial. Pero esto solo va a servirnos para integrar Firebase, por lo que todavía nos falta implementar el servicio de login social. Les dejo otra parte de la documentación oficial para hacerlo.

Una vez el usuario ingresa a la app y llega a la pantalla principal, la home. Pero tenemos un problema: Aunque el usuario logre ingresar, en nuestro flujo actual siempre vamos a pedirle que ingrese cuando se reinicie la app.

Entonces necesitamos persistir la información. Para ello debemos investigar la clase SharedPreferences de Android, la cual nos va a permitir mantener una sesión de usuario activa, incluso si se desinstalara la app (investigar allow backup para esto).

Por lo tanto, cuando el usuario cierre y abra la aplicación, va a la Home directamente. Algo que no consideramos es agregar una función de logout, quizá implementando un menú lateral con una opción que indique dicho comportamiento. Para esto recomiendo investigar DrawerLayout.

Luego debemos trabajar los componentes de la Home. En primera instancia nos damos cuenta de que nos falta algo fundamental: La información de los bares. Aquí tenemos dos opciones: Lo hacemos nosotros o contratamos un desarrollador Web.

Desarrollo de una API

Lo que necesitamos para gestionar los datos de los bares, es una API que nos permita accederlos desde nuestra app en Android. En primera instancia te recomiendo que hagas mi Curso de Desarrollo de Webs y APIs en Laravel.

No obstante, puede que no te sientas cómodo con PHP. En ese caso, tengo una serie de artículos donde desarrollo una API con NodeJS:

Y si necesitas crear una web administradora de esa API:

Consumo de API

Una vez tenemos la API desarrollada, sea de terceros o nuestra, debemos consumirla a través de nuestra aplicación. Les dejo un artículo donde enseño a hacerlo mediante una librería llamada Retrofit:

Continuamos con el desarrollo

Ahora que podemos consumir la información de los bares, debemos representarla en una lista con CardViews. Para ello podemos usar RecyclerView. Les dejo un tutorial detallado de cómo hacer esto.

Luego de entender como funcionan estos componentes, notamos que al hacer click en algun bar, podemos acceder al detalle. Vamos a llenar la información de esa pantalla con lo que recibimos en la API. Esto no es nada nuevo.

La parte nueva quizá sea el mapa. Necesitamos mostrar uno indicando donde queda el bar. Para ello podemos investigar sobre la API de Google Maps. Quizá al inicio parezca muy complejo, pero yo tuve la experiencia de implementarla y es bastante sencillo una vez entendés los componentes implicados.

Luego debemos considerar la idea de que nuestro bar tenga fotos para mostrar. Lo podemos resolver con un ViewPager para crear una galería. En el medio también aprenderemos a manejar Fragments, un componente de Android que nació con el surgimiento de las tabletas, si mal recuerdo en la versión 4.

Finalmente nuestra pantalla de favoritos se podría manejar de dos maneras distintas:

  • SharedPreferences: Guardamos la información de los bares favoritos localmente.
  • API: Guardamos la información en la API asociado a un id de usuario. Luego la recuperamos mediante algún método GET.

La primera forma puede ser compleja, dado que debemos guardar objetos, y SharedPreferences no lo soporta. Como alternativa, podemos usar la librería Gson que ya habíamos importado con Retrofit. Nuestro algoritmo sería:

  • Recibimos objeto lista bares.
  • Convertimos objeto en json string mediante Gson.
  • Guardamos json string en SharedPreferences.
  • Pedimos objeto json string.
  • Convertimos json string a objeto lista bares mediante Gson.
  • Recorremos la lista bares con nuestro Adapter del RecyclerView.

Y ya tenemos nuestra aplicación funcional. En el proceso aprendimos un montón de cosas y logramos llegar a un producto funcional.

Conclusiones

Si imaginamos por un solo momento el hecho de tener que estudiar todos estos conceptos sin un producto detrás, se puede volver muy tedioso.

Sin embargo, si aprendemos sobre la marcha, podemos lograr adquirir lo que llamo “conocimiento inconsciente”. Aprendemos sin darnos cuenta, porque estamos poniéndolo a prueba y experimentando en un caso real.

Hay una motivación y un producto. Difícil detenernos, ¿no?

Ahora bien, recapitulemos todo lo aprendido en este proyecto:

  • Fundamentos en Java y Android
  • Tomar ejemplos como punto de partida para tu proyecto
  • Cómo armar mocks
  • Los principios de Material Design
  • Consumo e implementación de APIs con Retrofit
  • Listas con RecyclerViews y CardViews
  • Galerías con ViewPager.
  • Geolocalización y mapeo con Google Maps API.
  • SharedPreferences para mantener sesiones
  • Manejo de Firebase
  • Menus laterales con DrawerLayout
  • Fragments
  • Gson

Y a todo esto deberíamos sumarle ciertas habilidades adquiridas con la gestión de un proyecto. Aprendimos mucho más que siguiendo un par de tutoriales.

Claro que una cosa no quita a la otra. Los cursos y tutoriales son tan necesarios como emprender proyectos propios. Lo que quiero decir es que no hagas una cosa sin la otra.

Si este artículo te motivó a emprender tus proyectos con Android, dejame un comentario!

Si te gustan los artículos que escribo y querés apoyarme con el proyecto, podés hacerlo mediante Patreon 🙂

¡Nos vemos en el siguiente artículo!

¡Deja un comentario!

Artículos relacionados

Curso Android | #4. Emuladores

En este capítulo, vamos a configurar un emulador y ver alternativas al emulador de Android Studio. Podés acceder al curso completo desde este link. También

Curso Android | #3. Crear un proyecto

En este capítulo vamos a crear nuestro primer proyecto desde 0, viendo todas las posibilidades que nos ofrece Android Studio Podés acceder al curso completo