Ficheros y carpetas de un proyecto Android
Un proyecto Android está formado básicamente por un
descriptor de la aplicación (AndroidManifest.xml), el código fuente en Java y
una serie de ficheros con recursos. Cada elemento se almacena en una carpeta
específica. Aprovecharemos el proyecto que acabamos de crear para estudiar la
estructura de un proyecto Android. No te asustes con el exceso de información. Más
adelante se dará más detalles sobre la finalidad de cada fichero. Aunque muy
similar existen algunas diferencias entre un proyecto creado en Android Studio
y en Eclipse. Por esta razón lo explicaremos de forma diferenciada:
Android Studio
AndroidManifest.xml:
Este fichero describe
la aplicación Android. En él se indican las actividades, las intenciones, los
servicios y los proveedores de contenido de la aplicación. También se declaran
los permisos que requerirá la aplicación. Se indica la versión mínima de Android
para poder ejecutarla, el paquete Java, la versión de la aplicación, etc.
java:
Carpeta que contiene el código fuente de la aplicación. Como
puedes observar los ficheros Java se almacenan en carpetas según el nombre de
su paquete.
MainActivity:
Clase Java con el
código de la actividad inicial.
ApplicationTest:
Clase Java pensada para insertar código de testeo de la
aplicación utilizando el API JUnit.
res:
Carpeta que contiene los recursos usados por la aplicación.
drawable:
En esta carpeta se
almacenan los ficheros de imágenes (JPG o PNG) y descriptores de imágenes en
XML. En el proyecto se ha incluido el fichero ic_launcher.png que será
utilizado como icono de la aplicación. Observa como este recursdo se ha añadido
en cuatro versiones diferentes. Como veremos en el siguiente capítulo, usaremos
un sufijo especial si queremos tener varias versiones de un recurso, de forma
que solo se cargue al cumplirse una determinada condición. Por ejemplo: (hdpi)
significa que solo ha de cargar los recursos contenidos en esta carpeta cuando
el dispositivo donde se instala la aplicación tiene una densidad gráfica alta
(180- dpi); (mdpi) se utilizará con
densidad gráfica alta (180- dpi). Si
pulsas sobre las diferentes versiones del recurso observarás como se trata del
mismo icono pero con más o menos resolución, de forma que en función de la
densidad gráfica del dispositivo se ocupe un tamaño similar en la pantalla.
Véase el apartado 2.6 del anexo E para más detalles.
layout:
Contiene ficheros XML
con vistas de la aplicación. Las vistas nos permitirán configurar las
diferentes pantallas que compondrán la interfaz de usuario de la aplicación. Se
utiliza un formato similar al HTML usado para diseñar páginas web. Se tratarán
en el siguiente capítulo.
menu:
Ficheros XML con los menús de cada actividad.
values:
También utilizaremos ficheros XML para indicar valores
usados en la aplicación, de esta manera podremos cambiarlos desde estos
ficheros sin necesidad de ir al código fuente. En dimens.xml, se ha definido el
margen horizontal y vertical por defecto. Observa como hay dos ficheros, el
usado por defecto y el etiquetado como (w820dp)que será utilizado en
dispositivos con ancho superior a 820 dp, esto ocurrirá en tabletas. En el
fichero strings.xml, tendrás que definir todas las cadenas de caracteres de tu
aplicación. Creando recursos alternativos resultará muy sencillo traducir una
aplicación a otro idioma. Finalmente en styles.xml, podrás definir los estilos
y temas de tu aplicación. Se estudian en el siguiente capítulo.
anim:
Contiene ficheros XML con animaciones de vistas (Tween).
animator:
Contiene ficheros XML con animaciones de propiedades.
Xml:
Otros ficheros XML requeridos por la aplicación.
raw:
Ficheros adicionales
que no se encuentran en formato XML.
Gradle Scripts:
En esta carpeta se
almacenan una serie de ficheros Gradle que permiten construir la aplicación.
Podrás definir aspectos importantes como la verisón del sdk de compilación
(targetSdkVersion) y la versión mínima (minSdkVersion).
Eclipse
Carpeta que contiene
el código fuente de la aplicación. Como puedes observar los ficheros Java se
almacenan en un espacio de nombres.
gen:
Carpeta que contiene el código generado de forma automática
por el SDK. Nunca hay que modificar de forma manual estos ficheros.
Dentro
encontraremos:
BuildConfig.java:
Define la constante DEBUG para que desde Java puedas saber
si tu aplicación está en fase de desarrollo.
R.java:
Define una clase que asocia los recursos de la aplicación
con identificadores. De esta forma los recursos podrán ser accedidos desde
Java.
Android x.x:
Código JAR, el API de Android según la versión seleccionada.
Android Private Libraries:
Librerías asociadas al proyecto.
assets:
Carpeta que puede
contener una serie arbitraria de ficheros o carpetas que podrán ser utilizados
por la aplicación (ficheros de datos, fuentes,…). A diferencia de la carpeta
res, nunca se modifica el contenido de los ficheros de esta carpeta ni se les
asociará un identificador.
bin:
En esta carpeta se
compila el código y se genera el .apk, fichero comprimido que contine la
aplicación final lista para instalar.
libs:
Código JAR con
librerías que quieras usar en tu proyecto. Se ha añadido automáticamente la
librería android-support-v4. Su objetivo es permitir ciertas funcionalidades
importantes no disponbles en el nivel de API seleccionado como mínimo. Gracias
a esta librería podremos utilizar lementos como Fragments, ViewPager o
Navigation Drawable, que no están disponibles en el nivel de API mínimo
seleccionado. Pero cuidado, esto no quiere decir que podamos usar cualquier
nivel de API libremente. Aparte de los elementos citados no se incluye mucho
más en esta librería.
res:
Carpeta que contiene los recursos usados por la aplicación.
Como veremos en el siguiente capítulo las subcarpetas pueden tener un sufijo si
queremos que el recurso solo se carge al cumplirse una condición. Por ejemplo
–hdpisignifica que solo ha de cargar los recursos contenidos en esta carpeta
cuando el dispositivo donde se instala la aplicación tiene una densidad gráfica
alta (>180dpi); -v11significa que el recurso solo ha de cargarse en un
dispositivo con nivel de API 11 (v3.0).
Ver sección 2.5 del apéndice C para más detalles.
drawable:
En esta carpeta se
almacenan los ficheros de imágenes (JPG o PNG) y descriptores de imágenes en
XML.
layout:
Contiene ficheros XML con vistas de la aplicación. Las
vistas nos permitirán configurar las diferentes pantallas que compondrán la
interfaz de usuario de la aplicación. Se utiliza un formato similar al HTML
usado para diseñar páginas Web.
menu:
Ficheros XML con los menús de cada actividad.
values:
También utilizaremos
ficheros XML para indicar valores del tipo string, color o estilo. De esta
manera podremos cambiar los valores sin necesidad de ir al código fuente. Por
ejemplo, nos permitiría traducir una aplicación a otro idioma.
anim:
Contiene ficheros XML
con animaciones Tween. Las animaciones son descritas al final del capítulo 4.
animator:
Contiene ficheros XML
con animaciones de propiedades.
xml:
Otros ficheros XML requeridos por la aplicación.
raw:
Ficheros adicionales que no se encuentran en formato XML.
AndroidManifest.xml:
Este fichero describe la aplicación Android. En él se
indican las actividades, intenciones, servicios y proveedores de contenido de
la aplicación. También se declaran los permisos que requerirá la aplicación. Se
indica la versión mínima de Android para poder ejecutarla, el paquete Java, la
versión de la aplicación, etc.
ic_launcher-web.png:
Icono de la aplicación de gran tamaño para ser usado en
páginas Web. El nombre puede variar si se indicó uno diferente en el proceso de
creación del proyecto. Ha de tener una resolución de 512x512 (con alfa).
proguard-project.txt
Fichero de
configuración de la herramienta ProGuard, que te permite optimizar y ofuscar el
código generado. Es decir, se obtiene un .apk más pequeño y donde resulta más
difícil hacer ingeniería inversa.
project.properties:
Fichero generado
automáticamente por el SDK. Nunca hay que modificarlo. Se utiliza para
comprobar la versión del API y otras características cuando se instala la
aplicación en el terminal.
Siguiente entrada : componentes de una aplicacion.