
Gracias a este conjunto de recursos podrás iniciarte en el mundo del desarrollo de aplicaciones móviles bajo sistema Android. No pretende ser un manual en el que se explique paso a paso cómo diseñar tu propia aplicación, aunque se aproxime, se trata solamente de una lista de documentos clasificados y ordenados para utilizarlos en el desarrollo de un nuevo proyecto Android.
Android Studio
Android Studio es el IDE oficial y gratuito para el desarrollo de aplicaciones Android. Incluye soporte para la instalación del SDK de Android así como su propio emulador para probar y depurar las aplicaciones. Se basa en el entorno de desarrollo IntelliJ IDEA de JetBrains.
- Instalación de Android Studio
- Estructura básica de un proyecto en Android Studio
- Componentes básicos de una aplicación Android
- Ejemplo de una aplicación básica Android (con paso de parámetros entre actividades)
- Ejemplo de una aplicación básica Android (recibiendo parámetros al cerrar la actividad)
- Control de Versiones Git en Android Studio (Deshabilitar el Control de Versiones)
- Construir el proyecto con Gradle (Flavors) (Variables para entornos de desarrollo y producción)
- Configuración del proxy en Android Studio, SDK y Gradle
Aunque Android Studio posee su propio emulador de móviles con imágenes oficiales, existen otros emuladores con iguales o mejores resultados de rendimiento para probar tus proyectos.
Desarrolladores
Existen una serie de recursos en Internet que los desarrolladores de Android deben conocer y visitar asiduamente.
- API: guía explicativa de Android
- API: paquetes y clases de Android
- API: ejemplos de Android
- Android Developer Fundamentals Course
- Centro de Políticas de Desarrolladores de Google
- Cómo certificarte como Desarrollador oficial de Android
- Cómo decompilar un aplicación de Android
Antes de introducirse en Android, os recomendamos tener una buena base de programación en Java:
Material Design
Material Design es el diseño oficial de Google que sigue para todas sus aplicaciones, y que insiste en que los desarrolladores de terceros utilicen las suyas propias.
- Fundamentos
- Superficies
- Diseño de contenido
- Movimientos y animaciones
- Diseño adaptativo
- Nuevo Material Design
- Paleta de colores
- Guía de desarrollo (Oficial)
- Guía de desarrollo (Alternativa)
Componentes de una aplicación
Una aplicación puede componerse de los siguientes componentes. Cada uno de ellos tiene un funcionalidad completamente diferente en el sistema Android.
- Activity
- |--> Activity LifeCycle (Ciclo de vida de una actividad)
- |--> BackStack (Pila de actividades)
- |--> Bundle (Paso de datos entre actividades) (Simple) (Serializable)
- |--> Fragment
- |--> Fragment LifeCycle (Ciclo de vida de un fragmento)
- Intent
- Intent-filter
- BroadcastReceiver
- PendingIntent
- ContentProvider
- Service
- IntentService
Tanto la aplicación como el resto de componentes llevan asociado un contexto con una serie de funciones que pueden realizar:
Patrón MVP (Modelo-Vista-Presentador)
La forma correcta de estructurar el código en un proyecto Android sería la utilización del patrón MVP:
AndroidManifest.xml
Recursos de la aplicación
Android permite externalizar los recursos de una aplicación (cadenas, imágenes, diseños, estilos, etc.) y utlizar el adecuado en función del idioma, el tamaño de pantalla, etc.
Diseño
Mapas de bits, iconos y vectores
- Mapas de bits alternativos
- Iconos alternativos (Image Asset Studio)
- Gráficos vectoriales (Vector Asset Studio)
Estilos y temas
Idiomas y cadenas
Componentes de la interfaz de usuario
Estos y muchos más son los elementos visuales que se pueden introducir en la interfaz gráfica de una aplicación Android.
- Button
- ImageView / TextView / EditText / TextInputLayout (Estilos TextInputLayout)
- CheckBox / RadioButton
- Spinner (Código ejemplo)
- AlertDialog (Yes/No/Cancel)
- DatePicker / TimePicker (Código ejemplo)
- ActionBar / AppBar
- Toolbar (Cómo eliminar el Toolbar cargado por defecto en la actividad)
- Back Button / Up Button (Código ejemplo)
- Keyboard system (cómo ocultarlo)
- RecyclerView: Básico con Layout personalizado (Código ejemplo)
- RecyclerView: Datos de ejemplo en el diseño
- RecyclerView: Paginado
- RecyclerView: Funciones Swipe
- Crear elementos gráficos mediante código (Código ejemplo)
- CoordinatorLayout: Animaciones
Depuración, Logs y Explorador de archivos
Android Studio nos permite desde el código fuente ir generando mensajes con información de la ejecución de la aplicación o de errores que se produzcan durante la misma. Estos mensajes aparecen en la ventana de Logcat:
- Visor de mensajes Logcat
- Creación de mensajes de logs
- Crear clase MyLogs (Código ejemplo)
Android Studio nos permite depurar paso a paso la ejecución de una aplicación y visualizar el contenido de las variables y objetos para solucionar errores de una manera más cómoda.
Android Studio también permite acceder a los archivos internos y privados de una aplicación directamente en el propio dispositivo sin que éste tenga que estar rooteado:
Notificaciones simples
Mediante los siguientes tipos de notificaciones la aplicación puede informar al usuario sobre cualquier hecho de la misma.
Permisos
La aplicación Android debe solicitar durante su instalación (en las versiones más antiguas) o durante su ejecución (en las más modernas) los permisos necesarios para completar ciertas acciones en el dispositivo.
- Permisos a partir de Marshmallow (1) (2) (3 Más completo) (Código ejemplo)
- Lista de permisos
Tareas asíncronas e Indicadores de progreso
Las tareas asíncronas permiten ejecutar en segundo plano y de manera independiente a la actividad las tareas necesarias para no interferir con la usabilidad de la aplicación por parte del usuario. Estas tareas se pueden acompañar de indicadores de progreso para saber si se han completado o no.
- AsynTask: Información general
- AsynTask: Explicación detallada
- AsynTask: Cómo pasar parámetros al constructor
- AsynTask: Cómo matar la actividad que la ha lanzado
- Progress Indicators: Tipos
- ProgressBar en un AsyncTask
Acceso a servicios de Internet
- Comprobar si la conexión de Wifi o Datos están activas
- URLConnection: Acceso a URLs
- URLConnection: Forzar StrictMode para no realizar un AsyncTask
Tratamiento de contenido XML
Tratamiento de contenido JSON
Librería de acceso a API
Almacenamiento
Android proporciona las siguientes opciones para almacenar información en un dispositivo. Se desarrollarán cada una de ellas en los siguientes apartados.
- Preferencias compartidas (SharedPreferences)
- Almacenamiento interno
- Almacenamiento externo
- Bases de datos SQLite
Almacenamiento interno
El almacenamiento interno corresponde con las carpetas privadas del dispositivo. En ellas sólo las aplicaciones pueden escribir, además de que cada aplicación sólo puede escribir en su carpeta asignada y nunca en las demás.
Almacenamiento externo
El almacenamiento externo corresponde con las carpetas públicas del dispositivo en el almacenamiento compartido, ya sea en la memoria interna del dispositivo o en la tarjeta de memoria. Atención: Hay que tener en cuenta que al montar el móvil como almacenamiento USB, el almacenamiento externo se desmonta y las aplicaciones que lo utilicen se matan y no podrán acceder a él durante ese tiempo.
Bases de datos SQLite
Android permite manejar bases de datos internas a la aplicación en formato SQLite.
- Crear bases de datos
- Insertar, actualizar y eliminar datos
- Recuperar datos
- Recuperar datos por nombre de columna
- Base de datos como Singleton
- Uso global del contexto de la aplicación (en Manifest.xml añadir <application name=".MyApplication"...>
- Actualizar la base de datos
- Acceder a la base de datos desde línea de comandos con "adb"
Depurar la base de datos en el PC:
- Utilizar el Explorador de Archivos del Dispositivo para descargar la base de datos a nuestro PC.
- Utilizar el programa SQLite Browser o similar para ver el contenido de dicha base de datos.
Depurar la base de datos en el propio dispositivo:
- Pedir el permiso WRITE_EXTERNAL_STORAGE.
- Modificar la ruta por defecto de la base de datos al crearla y cambiarla a otra del almacenamiento externo. Se puede utilizar la variable de almacenamiento externo.
- Tener en cuenta que la base de datos no se elimina automáticamente al eliminar la aplicación o borrar sus datos, hay que eliminarla a mano al estar fuera de la carpeta privada de la aplicación.
- Utilizar la aplicación X-plore o SQLite Viewer en el dispoisitivo para visualizar el contenido, pero el fichero de la base de datos debe llevar la extensión .db para que se pueda abrir.
Bases de datos REALM
- Instalar REALM en el proyecto (con las últimas versiones de Gradle hay que indicar id 'realm-android').
- Inicializar Realm en clase Application.
- Configurar la entidad de datos (objetos).
- Abrir la base de datos con Realm-Studio.
- Insertar o actualizar objetos.
- Insertar IDs únicos (buscar en este enlace Autoincrementing).
-
Depurar con Android Studio (por defecto no se muestran los valores de los objetos).
Preferencias
Las preferencias se pueden utilizar para almacenar información del tipo "clave/valor" en la memoria interna y privada del dispositivo.
SharedPreferences: para preferencias sin interfaz gráfico.
PreferenceActivity: para preferencias con interfaz gráfico.
- Crear actividad para gestionar las preferencias y cómo leerlas (API)
- Habilitar "Up Button".
- Escuchar si se ha modificado una preferencia.
- Mostrar el número de versión de la aplicación.
Navegador interno
Podemos incluir en la aplicación un navegador para visualizar cualquier web de Internet y no depender de una aplicación diferente en el dispositivo. Para ello debemos proveer a la aplicación del permiso Internet.
En este caso utilizaremos el componente WebView:
Pero si queremos personalizar el navegador y utilizar la información de cookies, contraseñas, historial del navegador Chrome en nuestro dispositivo, podemos utilizar el componente ChromeCustomTabs:
Fragmentos
La interfaz gráfica de una actividad la podemos descomponer en pequeñas porciones y cargar en ellas diferentes fragmentos según nuestras necesidades o las características del dispositivo.
Documentos
Desde Android podemos manejar ficheros de documentos de una manera general, independientemente de si esos documentos están en local, en una tarjeta de memoria o en la nube.
Imágenes, vídeos y cámara
Desde Android podemos manejar ficheros de imágenes y vídeos, además de capturarlos desde la cámara de fotos del dispositivo.
- Guardar imágenes capturadas desde la cámara
- Guardar imágenes desde la galería fotográfica
- Eliminar contenido del ImageView
- Convertir imágenes a/desde BASE64 (BASE64 a JPG / JPG a BASE64)
- Glide: Librería de tratamiento de imágenes
- Código ejemplo
Localización
Podemos capturar la posición de un dispositivo así como los cambios sucesivos en su posición.
Google Maps
Podemos utilizar la API de Google Maps para insertar un mapa con información personalizada en nuestra aplicación.
- Crear API Key y nuevo mapa
- Posicionar el mapa
- Capturar eventos del mapa / Marcadores / Líneas
- Habilitar "Mi ubicación" en el mapa
Intents explícitos e implícitos
Los Intents permiten a nuestra aplicación enviar datos a otras aplicaciones del mismo dispositivo, de manera explícita si conocemos qué aplicación exacta es, o de manera implícita dejando al usuario que elija la aplicación que él quiera dentro de las que estén preparadas para trabajar con esos datos. Por ejemplo:
- Intent explícito: Llamada de teléfono
- Intent implícito: Correos electrónicos / Con archivos adjuntos
Intent-filters
Podemos definir Intent-filters en nuestra para decirle a Android qué "Intents implícitos" somos capaces de aceptar desde nuestra aplicación.
- Recibir datos de otras aplicaciones (Oficial)
- Recibir datos de otras aplicaciones (Ejemplo)
- Recibir ficheros de otras aplicaciones (Código ejemplo)
- Actividad que se lanza por defecto al iniciar
- Depurar la aplicación al lanzarse desde un Intent-filter
BroadcastReceivers
Los BroadcastReceivers permiten a nuestra aplicación responder a los anuncios (broadcast) que hace el sistema u otra aplicación. Por ejemplo:
ContentProviders
Un ContentProvider nos permite compartir información entre aplicaciones.
- Crear un ContentProvider para proporcionar información a otras aplicaciones.
- Acceder al ContentProvider de otra aplicación.
Widgets
Los widgets permiten crear mini-aplicaciones para la pantalla del dispositivo.
- Crear e inicializar un widget
- Pantalla de configuración del widget
- Lanzar una actividad desde el widget (Para pasar datos a la actividad hay que modificar los FLAGS de la función PendingIntent.getActivity)
Notificaciones Push
Las notificaciones Push son mensajes que se envían de forma directa a aplicaciones del dispositivo y que estas manejan, normalmente, avisando mediante una notificación en la barra de estado.
OneSignal
- OneSignal: Servidor de notificaciones Push
- OneSignal: Cómo utilizarlo en Android
- OneSignal: API REST
- Ejemplo de uso de la API REST (ver imagen) (Cliente REST Google Chrome) (App JAVA)
Firebase
- Firebase (Parte 1 Parte 2 Parte 3 Parte 4 Parte 5)
- Firebase (Otro tutorial)
Alternativas
Actividades especiales
Cómo implementar diferentes tipos de actividades.
- Splash Screens ¿Qué son? ¿Cómo crearlas? ¿Cómo añadir un temporizador? (Código ejemplo)
Publicidad
Una de las maneras de monetizar nuestra aplicación consiste en inluir publicidad en la misma. Una de las opciones para ello es utilizar el programa de Google AdMob, específico para aplicaciones móviles.
- Manifest.xml: permisos INTERNET | ACCESS_NETWORK_STATE.
- Google AdMob: Al crear la cuenta en Google AdMob se os pedirá también crear una cuenta en Google AdSense. Ir a "Monetizar una aplicación nueva" y configurar la aplicación. Dentro de la aplicación crear el banner del anuncio para obtener su ID.
- Añadir anuncio en la aplicación.
- Solicitar anuncios de prueba en la aplicación (Código ejemplo).
- Cómo monetizar tu App.
Pruebas
Durante el desarrollo de la aplicación, es necesario realizar diferentes tipos de pruebas que nos permitan comprobar que los resultados obtenidos en cada tipo de ejecución son los esperados.
- Tipos de pruebas
- Pruebas de unidades locales
- Pruebas de unidades instrumentadas
- Crear pruebas de unidades instrumentadas con Espresso Test Recorder
- Código ejemplo
Cuestionario
Pon a prueba tus conocimientos con los siguientes cuestionarios.
Pendiente de clasificar
A continuación dejo una serie de enlaces interesantes que aún no he podido probar para incluirlos en los apartados anteriores.
- Android en 20 consejos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
- Navigation View
- Botones físicos (KeyEvent List)
- MaterialSearchView
- Códigos secretos
- Login con cuenta Google (Otro parte 1 parte 2)
- Login con cuenta Facebook
- Login contra servidor PHP
- Crear nuestra propia cuenta en Android
- Imágenes: Glide vs Picasso
- Bottom Sheets
- Librería GSON: Tratamiento de contenido JSON
Android: Guía de referencia para el desarrollo de aplicaciones móviles escrito por Rafa Morales está protegido por una licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional