Tabla de Contenidos
Programación de dispositivos móviles con Android
Android
Android es un sistema operativo basado en Linux, diseñado principalmente para dispositivos móviles como teléfonos y tabletas, aunque también se utiliza en relojes, televisores, automóviles y otros dispositivos.
Para desarrollar aplicaciones Android se utiliza el Android SDK (Software Development Kit), un conjunto de herramientas, bibliotecas y APIs que permiten crear, compilar, probar y depurar aplicaciones.
De forma simplificada podemos distinguir:
- Android: el sistema operativo que se ejecuta en el dispositivo
- Android SDK: las herramientas y APIs utilizadas para desarrollar aplicaciones
- Android Studio: el entorno de desarrollo utilizado para escribir y gestionar nuestros proyectos
Las aplicaciones Android se ejecutan sobre ART (Android Runtime), el entorno de ejecución utilizado actualmente por Android.
Android Studio
Android Studio es el entorno de desarrollo integrado (IDE) oficial para crear aplicaciones Android. Está basado en IntelliJ IDEA e incorpora las herramientas necesarias para facilitar el desarrollo.
Entre sus principales características se encuentran:
- Editor de código para Kotlin y Java
- Integración con Gradle para compilar los proyectos
- Gestión del Android SDK
- Emulador de dispositivos Android
- Herramientas de depuración
- Diseño y previsualización de interfaces
- Integración con sistemas de control de versiones como Git
Durante el módulo utilizaremos Android Studio, Kotlin y el Android SDK para desarrollar nuestras aplicaciones.
Android Studio es el IDE, pero por sí solo no contiene todas las APIs necesarias para desarrollar aplicaciones. Para ello necesita utilizar el Android SDK.
Android SDK
El Android SDK (Software Development Kit) es el conjunto de herramientas, bibliotecas y APIs necesarias para desarrollar aplicaciones para Android.
El SDK incluye, entre otros elementos:
- Las APIs correspondientes a las diferentes versiones de Android
- Herramientas de compilación
- Herramientas para comunicarse con dispositivos Android
- Herramientas de depuración
- Gestión de dispositivos virtuales
- Utilidades utilizadas internamente por Android Studio
Android Studio permite instalar y gestionar estos componentes mediante el SDK Manager. Por ejemplo, un equipo puede tener instaladas diferentes versiones del SDK:
Android SDK
|
+-- Android API 35
+-- Android API 36
+-- Android API 37
|
+-- Build Tools
|
+-- Platform Tools
|
+-- adb
No es necesario instalar todas las versiones disponibles. Normalmente se instalan únicamente aquellas que van a utilizarse para desarrollar y probar las aplicaciones.
Versiones de Android y niveles de API
Android ha tenido numerosas versiones desde su aparición. Cada versión incorpora nuevas funcionalidades y modificaciones en el sistema operativo. Para identificar las capacidades disponibles en cada versión, Android utiliza un número denominado API Level.
Por ejemplo:
| Versión de Android | API Level |
|---|---|
| Android 14 | 34 |
| Android 15 | 35 |
| Android 16 | 36 |
| Android 17 | 37 |
El nivel de API resulta especialmente importante durante el desarrollo, ya que determina qué funcionalidades de Android podemos utilizar.
En los proyectos encontraremos principalmente tres valores dentro del fichero app/build.gradle.kts
minSdk = 24 targetSdk = 36 compileSdk = 37
| Propiedad | Significado |
|---|---|
| minSdk | Versión mínima de Android en la que puede instalarse la aplicación |
| targetSdk | Versión de Android para la que se ha preparado y probado principalmente la aplicación |
| compileSdk | Versión de las APIs que utiliza el compilador para construir la aplicación |
Por ejemplo:
minSdk = 24 targetSdk = 36 compileSdk = 37
significa que la aplicación:
- puede instalarse desde API 24
- está preparada principalmente para el comportamiento de API 36
- puede utilizar las APIs disponibles durante la compilación con API 37
Que una aplicación utilice compileSdk = 37 no significa que solamente pueda ejecutarse en dispositivos con API 37.
La versión mínima en la que puede instalarse viene determinada por minSdk.
Estructura básica de un proyecto Android
Cuando creamos un proyecto nuevo en Android Studio se genera automáticamente una estructura de directorios y archivos. Una versión simplificada podría ser:
MiAplicacion | +-- app | | | +-- manifests | | | | | +-- AndroidManifest.xml | | | +-- kotlin | | | | | +-- MainActivity.kt | | | +-- res | | | +-- drawable | +-- mipmap | +-- values | +-- Gradle Scripts
Algunos de sus elementos más importantes son:
| Elemento | Función |
|---|---|
MainActivity.kt | Contiene inicialmente el código de la actividad principal |
AndroidManifest.xml | Define características y componentes importantes de la aplicación |
res | Contiene recursos como textos, imágenes, iconos o colores |
build.gradle.kts | Configuración de compilación del proyecto |
libs.versions.toml | Puede utilizarse para gestionar versiones de librerías y plugins |
Vista Android en el IDE
Gradle
Los proyectos Android utilizan Gradle como sistema de compilación. Gradle se encarga, entre otras tareas, de:
- Compilar el código
- Gestionar las dependencias
- Procesar los recursos de la aplicación
- Ejecutar pruebas
- Generar los archivos instalables de la aplicación
Por ejemplo, si nuestra aplicación necesita utilizar una determinada librería, Gradle puede descargarla automáticamente. En proyectos actuales es habitual encontrar dependencias definidas mediante un catálogo de versiones:
implementation(libs.androidx.core.ktx) implementation(libs.androidx.activity.compose)
Las versiones correspondientes pueden encontrarse en:
gradle/libs.versions.toml
Ejecución de una aplicación
Una aplicación Android necesita ejecutarse sobre un dispositivo Android. Tenemos principalmente dos posibilidades:
- Emulador
- Dispositivo físico
Ambas serán configuradas desde el Device Manager de Android Studio.
El emulador es capaz de simular diferentes dispositivos Android. Permite seleccionar características como:
- Tamaño de pantalla
- Resolución
- Versión de Android
- Cantidad de memoria
- Tipo de dispositivo
Su principal ventaja es que permite probar rápidamente una aplicación utilizando diferentes configuraciones. Sin embargo, el emulador puede consumir una cantidad considerable de memoria y recursos del ordenador.
Por otro lado, si tenemos un dispositivo físico Android también podemos ejecutar directamente la aplicación.
Para hacerlo será necesario activar las Opciones de desarrollador y la Depuración USB o Depuración Wifi en nuestro dispositivo. Después podremos conectar el dispositivo al ordenador ejecutar directamente la aplicación desde Android Studio.
En equipos con recursos limitados puede ser recomendable utilizar dispositivos Android físicos en lugar del emulador.
Fundamentos de una aplicación Android
Una aplicación Android está formada por diferentes componentes que trabajan conjuntamente. Algunos se encargan de mostrar la interfaz, otros de gestionar datos, ejecutar tareas en segundo plano o comunicarse con otras aplicaciones.
En las primeras aplicaciones nos centraremos principalmente en las Activities, los recursos y el archivo AndroidManifest.xml.
Activity
Una Activity representa normalmente una pantalla de una aplicación Android. Por ejemplo, una aplicación podría tener:
Pantalla de inicio -> MainActivity Pantalla de ajustes -> SettingsActivity Pantalla de detalle -> DetailActivity
En un proyecto básico creado con Android Studio suele existir inicialmente una clase:
MainActivity.kt
En un proyecto con Jetpack Compose podemos encontrar algo similar a:
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MiAplicacion() } } }
El método onCreate() se ejecuta cuando se crea la Activity. Mediante setContent indicamos la interfaz que se mostrará utilizando Jetpack Compose.
setContent { MiAplicacion() }
Ciclo de vida de una Activity
Una Activity pasa por diferentes estados durante su ejecución: https:// developer.android.com
Por ejemplo:
Se crea | V Se muestra | V El usuario interactúa | V Pasa a segundo plano | V Puede destruirse
Android dispone de diferentes métodos asociados a estos cambios:
| Método | Momento aproximado |
|---|---|
onCreate() | Cuando se crea la Activity |
onStart() | Cuando comienza a ser visible |
onResume() | Cuando el usuario puede interactuar con ella |
onPause() | Cuando pierde el foco |
onStop() | Cuando deja de ser visible |
onDestroy() | Antes de ser destruida |
No siempre será necesario utilizar todos estos métodos, pero es importante comprender que Android controla el ciclo de vida de las pantallas.
AndroidManifest.xml
El archivo AndroidManifest.xml contiene información importante sobre la aplicación. Entre otras cosas puede indicar:
- Las Activities disponibles
- La Activity que se inicia al abrir la aplicación
- Los permisos necesarios
- Características generales de la aplicación
Por ejemplo:
<activity android:name=".MainActivity" android:exported="true"> </activity>
Recursos
Android permite separar determinados elementos del código fuente mediante el sistema de recursos. Estos recursos se almacenan dentro del directorio app/src/main/res
Algunos directorios habituales son:
| Directorio | Contenido |
|---|---|
drawable | Imágenes y recursos gráficos |
mipmap | Iconos de la aplicación |
values | Textos, colores, temas y otros valores |
Por ejemplo, los textos pueden almacenarse en:
res/values/strings.xml
<string name="app_name">Mi aplicación</string> <string name="saludo">Hola Android</string>
Separar los textos del código facilita, entre otras cosas, la traducción de las aplicaciones a distintos idiomas.
Context
El Context representa el entorno desde el que se está ejecutando una parte de la aplicación. Permite acceder a diferentes recursos y servicios del sistema Android. Por ejemplo, puede utilizarse para:
- Acceder a recursos
- Iniciar otras Activities
- Acceder a servicios del sistema
- Mostrar determinados mensajes
Depuración y Logcat
Android Studio incluye Logcat, una herramienta que permite visualizar mensajes generados por la aplicación y por el sistema Android. Podemos escribir nuestros propios mensajes utilizando:
Log.d("MI_APP", "Aplicación iniciada")
Esto resulta muy útil para comprobar qué está ocurriendo durante la ejecución y localizar errores.
En Android no debemos depender de println() como hacíamos en las aplicaciones de consola. Para depuración es habitual utilizar Logcat.
Desarrollo de interfaces
Existen dos grandes formas de construir interfaces en Android:
- Views y XML, sistema tradicional de Android
- Jetpack Compose, sistema moderno de interfaces declarativas
Durante el módulo utilizaremos principalmente Jetpack Compose. Con Compose las interfaces se construyen mediante funciones en lenguaje Kotlin. Es el sistema oficial de Google para el diseño de interfaces.
Funciones Composable
Las funciones que forman parte de la interfaz se marcan con la anotación:
@Composable
Por ejemplo:
@Composable fun Saludo() { Text("Hola Android") }
Una función @Composable puede llamar a otras funciones @Composable para construir interfaces más complejas.
Por ejemplo:
@Composable fun PantallaPrincipal() { Column { Text("Bienvenido") Text("Mi primera aplicación") } }
Mostrar la interfaz
Desde la Activity podemos indicar qué interfaz queremos mostrar utilizando:
setContent { PantallaPrincipal() }
Un ejemplo completo sería:
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { PantallaPrincipal() } } }
Componentes básicos
Compose incluye numerosos componentes para construir interfaces. Algunos de los más utilizados al principio son:
| Componente | Función |
|---|---|
Text | Mostrar texto |
Button | Crear botones |
TextField | Introducir texto |
Image | Mostrar imágenes |
Icon | Mostrar iconos |
Por ejemplo:
@Composable fun Ejemplo() { Text("Nombre") Button( onClick = { // Acción al pulsar } ) { Text("Aceptar") } }
Organización de elementos
Compose permite organizar los componentes mediante distintos contenedores. Los principales son:
| Componente | Función |
|---|---|
Column | Coloca los elementos verticalmente |
Row | Coloca los elementos horizontalmente |
Box | Permite superponer o posicionar elementos |
Ejemplo:
@Composable fun DatosUsuario() { Column { Text("Nombre: Ana") Text("Edad: 22") } }
También podemos combinar diferentes contenedores:
@Composable fun FichaUsuario() { Column { Text("Usuario") Row { Text("Ana") Text("22 años") } } }
Modifier
Modifier se utiliza para modificar el aspecto, tamaño o posición de los componentes. Por ejemplo:
Text( text = "Hola Android", modifier = Modifier.padding(16.dp) )
También podemos encadenar varios modificadores:
Button( onClick = { }, modifier = Modifier .fillMaxWidth() .padding(16.dp) ) { Text("Aceptar") }
Algunos modificadores habituales son:
padding()fillMaxWidth()fillMaxSize()width()height()
Material Design
Jetpack Compose utiliza habitualmente componentes basados en Material Design. Por ejemplo:
Button( onClick = { } ) { Text("Guardar") }
o:
TextField( value = "", onValueChange = { }, label = { Text("Nombre") } )
Estos componentes ya incluyen comportamientos y estilos preparados para aplicaciones Android modernas.
Previsualizar componentes
Android Studio permite previsualizar componentes Compose sin ejecutar completamente la aplicación. Para ello se utiliza la anotación:
@Preview
Por ejemplo:
@Preview(showBackground = true) @Composable fun PantallaPreview() { PantallaPrincipal() }
Esto permite comprobar rápidamente cómo se verá una parte de la interfaz.
Componentes reutilizables
Una de las ventajas de Compose es que podemos dividir una interfaz en funciones pequeñas y reutilizables. Por ejemplo:
@Composable fun Titulo(texto: String) { Text(texto) }
Podemos reutilizarla varias veces:
@Composable fun Pantalla() { Column { Titulo("Usuarios") Titulo("Configuración") } }
Esto facilita mantener el código organizado y evita repetir elementos.
Estado y eventos
Listas y componentes reutilizables
Navegación entre pantallas
Arquitectura de aplicaciones Android
Persistencia de datos
Acceso a servicios web y APIs
Permisos y acceso a funcionalidades del dispositivo
Programación multimedia
Notificaciones y tareas en segundo plano
Interfaces tradicionales con XML y Views
Desarrollo de una aplicación completa
© 2026 Fernando Valdeón




