Estructura de carpetas de un proyecto Android Studio
Cuando creamos un nuevo proyecto Android se generan autom谩ticamente una serie de carpetas y archivos. El n煤cleo central del proyecto es un archivo xml llamado聽AndroidManifest.xml聽(manifiesto de aqu铆 en adelante). Adem谩s se generan archivos con el c贸digo fuente y otros archivos adicionales que contienen los recursos. A continuaci贸n vamos a repasar las partes m谩s importantes de esta estructura.
Nos basaremos en el ejemplo anterior de Hola Mundo que hemos realizado anteriormente.
Carpeta App
Esta carpeta contiene todo contendr谩 todo el software de nuestra aplicaci贸n. Veamos cada una de las carpetas que contiene app:
Src
Este no contiene s贸lo la l贸gica de la aplicaci贸n, sino que lo contiene todo, a continuaci贸n vamos a ver las principales carpetas y las que se van a usar:
- main/java: Contienen la l贸gica, que en el ejemplo solo tenemos la clase MainActivity
- main/res: Que como en el caso de eclipse contiene tanto la interfaz gr谩fica como recursos, con la diferencia que esta dentro de la carpeta src.
Veamos las principales carpetas que contiene聽res:
Dentro de ella encontramos distintas carpetas con funciones espec铆ficas:
- Drawable.聽Estas carpetas contienen las im谩genes y los descriptores de ellas.
- Layout.聽Aqu铆 se encuentran los ficheros XML de las vistas de nuestro programa. Estos elementos nos permiten definir las distintas pantallas de nuestra aplicaci贸n.
- Menu.聽Aqu铆 se encuentran los archivos de los men煤s de la aplicaci贸n.
- Values.聽Estos ficheros nos permiten definir valores a nuestras variables de manera independiente al c贸digo fuente. Este mecanismo nos permite por ejemplo cambiar el valor del t铆tulo (String) de un bot贸n sin necesidad de cambiar dicho valor en el c贸digo fuente. Su uso es especialmente 煤til cuando queremos realizar diversas versiones de nuestra aplicaci贸n dependiendo del idioma o cambiar los valores de por ejemplo la conversi贸n de medidas seg煤n el dispositivo
- AndroidManifest.xml
Este es el archivo principal de cualquier aplicaci贸n Android. Es el archivo encargado de definir la aplicaci贸n y sus atributos. Aqu铆 se indican las actividades, intentos, servicios y proveedores de contenido de nuestro programa as铆 como las propiedades de la misma, como la versi贸n m铆nima de la API necesaria.
Carpeta Gen
Esta carpeta contiene el c贸digo fuente generado autom谩ticamente por el compilador y el SDK. No se debe modificar nunca a manualmente, se debe hacer desde las herramientas del SDK o el plugin ADT.
Dentro de esta carpeta hay un archivo muy importante que es la聽clase R.java.聽Dicha clase es la encargada de relacionar cada recurso de nuestra aplicaci贸n con su identificador por ello es especialmente delicada, un cambio mal realizado en este archivo provocar谩 un colapso de nuestra aplicaci贸n y que deje de funcionar. Es generada autom谩ticamente en cada compilaci贸n de nuestro proyecto.
En las versiones recientes de Android Studio, al usarse Gradle para compilar, la carpeta /gen/ se ubicar谩 en聽app/build/genrated, y m谩s concretamente la clase R.java la encontraremos en:聽app/build/generated/source/r/debug/com/nombredetupaquete.
Carpeta Assets
Esta carpeta contiene archivos que usa nuestra aplicaci贸n. Es similar a la carpeta聽res聽pero a diferencia de 茅sta, el contenido no se va a modificar nunca, es constante.
Al igual que la carpeta /gen/ en las versiones recientes de Android Studio, al usarse Gradle como compilador, la carpeta /assets/ no se crea por defecto si no se incluyen assets en el proyecto, y por lo tanto la tendremos que ubicar de forma manual en la ruta app/src/main/assets. Existe un atajo para crearla desde Android Studio, para ello haciendo click con el bot贸n derecho sobre la carpeta app, se nos abre un men煤 en el que elegimos聽New — Folder — Assets Folder聽y esto nos crear谩 la carpeta assets de forma autom谩tica.
Fichero AndroidManifiest
AndroidManifest.xml
Este es el archivo principal de cualquier aplicaci贸n Android. Es el archivo encargado de definir la aplicaci贸n y sus atributos. Aqu铆 se indican las actividades, intentos, servicios y proveedores de contenido de nuestro programa as铆 como las propiedades de la misma, como la versi贸n m铆nima de la API necesaria.