Estructura de un
proyecto Android
Para empezar
a comprender como se construye una aplicación Android vamos a echar un vistazo
a la estructura general de un proyecto tipo.
Cuando creamos un nuevo proyecto Android en Eclipse se
genera automáticamente la estructura de carpetas necesaria para poder generar
posteriormente la aplicación. Esta estructura será común a cualquier aplicación,
independientemente de su tamaño y complejidad.
En la siguiente imagen vemos los elementos creados
inicialmente para un nuevo proyecto Android:
Describamos
los elementos principales.
Carpeta /src/
Contiene todo el código fuente de la aplicación, código de
la interfaz grafica, clases auxiliares, etc. Inicialmente, Eclipse creara por
nosotros el código básico de la pantalla (Activity) principal de la aplicación, siempre bajo la estructura del
paquete java definido.
Carpeta /res/
Contiene todos los ficheros de recursos necesarios para el
proyecto: imágenes, videos, cadenas de texto, etc. Los diferentes tipos de
recursos de deberán distribuir entre las siguientes carpetas:
: /res/drawable/. Contienen las
imágenes de la aplicación. Se puede dividir en /drawable-ldpi, /drawable-mdpi y /drawable-hdpi para utilizar diferentes recursos dependiendo de la resolución
del dispositivo.
: /res/layout/. Contienen los
ficheros de definición de las diferentes pantallas de la
: interfaz grafica. Se puede dividir en /layout y /layout-land
para definir distintos layouts
dependiendo de la orientación del dispositivo.
: /res/anim/. Contiene la definición
de las animaciones utilizadas por la aplicación.
: /res/menu/. Contiene la definición
de los menús de la aplicación.
: /res/values/. Contiene
otros recursos de la aplicación como por ejemplo cadenas de texto (strings.xml), estilos (styles.xml), colores (colors.xml), etc.
: /res/xml/. Contiene los ficheros XML
utilizados por la aplicación.
: /res/raw/. Contiene recursos adicionales,
normalmente en formato distinto a XML, que no se incluyan en el resto de carpetas de recursos.
Como ejemplo, para un proyecto nuevo Android, se crean los siguientes
recursos para la aplicación:
Contiene una serie de elementos de código generados automáticamente
al compilar el proyecto. Cada vez que generamos nuestro proyecto, la maquinaria
de compilación de Android genera por nosotros una serie de ficheros fuente en
java, dirigidos al control de los recursos de la aplicación.
El más importante es el que se puede observar en la imagen,
el fichero R.java,
y la clase R.
Esta clase R contendrá en todo momento una serie de constantes con los ID
de todos los recursos de la aplicación incluidos en la carpeta /res/, de forma que podamos acceder fácilmente
a estos recursos desde nuestro código a través de este dato. Así, por ejemplo,
la constante R.drawable.icon contendrá el ID de la imagen “icon.png”
contenida en la carpeta /res/drawable/. Veamos como
ejemplo la clase R creada por defecto para un proyecto nuevo:
package net.sgoliver;
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int
icon=0x7f020000;
}
public static final class layout {
public static final int
main=0x7f030000;
}
public static final class string {
public static final int
app_name=0x7f040001;
public static final int
hello=0x7f040000;
}
}
Carpeta /assets/
Contiene todos los demás ficheros auxiliares necesarios para
la aplicación (y que se incluirán en su propio paquete), como por ejemplo
ficheros de configuración, de datos, etc. La diferencia entre los recursos
incluidos en la carpeta /res/raw/ y los incluidos en la carpeta /assets/
es que para los primeros se generara
un ID en la clase R y
se deberá acceder a ellos con los diferentes métodos de acceso a recursos. Para
los segundos sin embargo no se generaran ID y se podrá acceder a ellos por su
ruta como a cualquier otro fichero del sistema. Usaremos uno u otro según las
necesidades de nuestra aplicación.
Carpeta /bin/
Ésta
es otra de ésas carpetas que en principio no tendremos por qué tocar. Contiene
los elementos compilados de la aplicación y otros ficheros auxiliares. Cabe
destacar el fichero con extensión “.apk”, que es el ejecutable de la aplicación
que se instalará en el dispositivo.
Contendrá
las librerías auxiliares, normalmente en formato “.jar” que utilicemos en
nuestra aplicación Android.
Fichero
AndroidManifest.xml
Contiene la definición en XML de los aspectos principales de
la aplicación, como por ejemplo su identificación (nombre, versión, icono,…),
sus componentes (pantallas, mensajes,…), o los permisos necesarios para su ejecución.
Veremos más adelante mas detalles de este fichero. En el siguiente post veremos
los componentes software principales con los que podemos construir una aplicación
Android.
Componentes de una
aplicación Android
En el post anterior vimos la estructura de un proyecto
Android y aprendimos donde colocar cada uno de los elementos que componen una aplicación,
tanto elementos de software como recursos gráficos o de datos. En este nuevo
post vamos a centrarnos específicamente en los primeros, es decir, veremos los
distintos tipos de componentes de software con los que podremos construir una aplicación
Android.
En Java o .NET estamos acostumbrados a manejar conceptos
como ventana, control, eventos
o servicios como los elementos básicos en la construcción de una aplicación.
Pues bien, en Android vamos a disponer de esos mismos elementos básicos aunque
con un pequeño cambio en la terminología y el enfoque. Repasemos los
componentes principales que pueden formar parte de una aplicación Android [Por
claridad, y para evitar confusiones al consultar documentación en inglés,
intentaré traducir lo menos posible los nombres originales de los componentes].
Activity
Las actividades (activities)
representan el componente principal de la interfaz grafica de una aplicación
Android. Se puede pensar en una actividad como
el elemento análogo a una ventana en
cualquier otro lenguaje visual.
View
Los objetos view son
los componentes básicos con los que se construye la interfaz grafica de la aplicación,
análogo por ejemplo a los controles de
Java o .NET. De inicio, Android pone a nuestra disposición una gran cantidad de
controles básicos, como cuadros de texto, botones, listas desplegables o imágenes,
aunque también existe la posibilidad de extender la funcionalidad de estos
controles básicos o crear nuestros propios controles personalizados.
Service
Los servicios son
componentes sin interfaz grafica que se ejecutan en segundo plano. En concepto,
son exactamente iguales a los servicios presentes en cualquier otro sistema
operativo. Los servicios pueden realizar cualquier tipo de acciones, por
ejemplo actualizar datos, lanzar notificaciones, o incluso mostrar elementos
visuales (activities) si se necesita en algún momento la interacción con del
usuario.
Content Provider
Un content
provider es el mecanismo que se ha definido
en Android para compartir datos entre aplicaciones. Mediante estos componentes
es posible compartir determinados datos de nuestra aplicación sin mostrar
detalles sobre su almacenamiento interno, su estructura, o su implementación.
De la misma forma, nuestra aplicación podrá acceder a los datos de otra a través
de los content
provider que se hayan definido.
Broadcast Receiver
Un broadcast
receiver es un componente destinado a
detectar y reaccionar ante determinados mensajes o eventos globales generados
por el sistema (por ejemplo: “Batería baja”, “SMS recibido”, “Tarjeta SD
insertada”, …) o por otras aplicaciónes (cualquier aplicación puede generar
mensajes (intents, en terminología Android) broadcast, es decir, no dirigidos
a una aplicación concreta sino a cualquiera que quiera escucharlo).
Widget
Los widgets son
elementos visuales, normalmente interactivos, que pueden mostrarse en la pantalla
principal (home
screen) del dispositivo Android y recibir
actualizaciones periódicas. Permiten mostrar información de la aplicación al
usuario directamente sobre la pantalla principal.
Intent
Un intent
es el elemento básico de comunicación
entre los distintos componentes Android que hemos descrito anteriormente. Se
pueden entender como los mensajes o peticiones que son enviados entre los distintos componentes de una aplicación
o entre distintas aplicaciones. Mediante un intent se puede mostrar una actividad desde
cualquier otra, iniciar un servicio, enviar un mensaje broadcast, iniciar otra aplicación, etc.
No hay comentarios:
Publicar un comentario