miércoles, 2 de noviembre de 2011

Primeros Pasos como Android Developer (BootCamp Rosario - Parte 3)


Estructura de un proyecto Android
Para empezar a modificar este ejemplo recién creado, estudiemos la estructura de directorios creada de una aplicación Android, así lo tenemos de ejemplo como una aplicación típica.
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:


Estudiemos estos elementos principales.

Carpeta /src/            
Contiene todo el código fuente de la aplicación (Ejemplo.java), código de la interfaz gráfica, clases auxiliares, etc. Inicialmente, Eclipse creará por nosotros el código básico de la pantalla principal (una Activity) de la aplicación, siempre bajo la estructura del paquete java definido.
Acaba de aparecer un término nuevo, para aquellos que estén acostumbrados a trabajar en Java: Activity. Más adelante haré un detallado glosario de los términos que usa Android. Por ahora, con que tengamos en cuenta que una Activity es un elemento sobre el que se construye la aplicación y que tiene un ciclo de vida bastante complejo estamos por un muy buen camino. Estas Activities son pantallas de la aplicación, en las que podemos cargar elementos de la interfaz de usuario y capturar eventos. También son los puntos entrantes de la aplicación y puede haber más de una Activity por proyecto.

Si seguimos mirando la estructura, nos encontraremos con las librerías de Android (android.jar, representado por Android 2.2 en la imagen), que nos dan toda la funcionalidad del sistema. Estas librerías dependen de la versión del SDK con el que estemos trabajando. ¿Una buena práctica de programación? siempre estar actualizados en este tema, para esto regularmente visitar la página de desarrolladores Android: http://developer.android.com/index.html A lo largo de este blog utilizaremos la versión 2.2 del SDK y a veces la 4.0 Ice Cream S. para ir estudiando los detalles, y buscaremos tener compatibilidad con versiones anteriores.


Carpeta /res/                  
Son los archivos de recursos necesarios para el proyecto: imágenes, vídeos, cadenas de texto, etc. Los diferentes tipos de recursos se deberán ordenar entre las siguientes carpetas:
·         /res/drawable/. Directorio que contienen las imágenes de la aplicación. Se puede dividir en subcarpetas según la resolución de pantalla de los dispositivos, por ejemplo: /drawable-ldpi, /drawable-mdpi y /drawable-hdpi para utilizar diferentes recursos dependiendo de la resolución del dispositivo.
·         /res/layout/. El Layout, este directorio contienen los archivos de definición de las diferentes pantallas de la interfaz gráfica. 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 en archivos XML como por ejemplo cadenas de texto (strings.xml), estilos (styles.xml), colores (colors.xml), etc.
·         /res/xml/. Contiene los archivos 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 recursos para la aplicación que se observan en la imagen, es decir, el Wizard de Eclipse nos ayuda mucho, incluso nos brinda un icono para la aplicación, que luego podemos cambiar.


Carpeta /gen/
De ahora en adelante, asociemos el directorio “gen” con GENERADO, esta carpeta contiene una serie de elementos generados automáticamente al compilar el proyecto. Cada vez que generamos nuestro proyecto, compilándolo desde Eclipse y empaquetándolo, la maquinaria de compilación de Android genera por nosotros una serie de archivos fuente, en java, dirigidos al control de los recursos de la aplicación.

De todo lo que nos genera, el archivo más importante es el que se puede observar en la imagen, el archivo R.java, que contiene 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 omisión para un proyecto nuevo:

package com.tutoriales.ejemplo;
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;
    }
}

La clase R.java es muy especial, ya que nosotros no podemos modificarla manualmente, de hecho, se genera automáticamente cada vez que modificamos los archivos de recursos, ya sea un xml con la definición de un estilo, o un xml con cadenas de texto. Esta clase se podría considerar el nexo de unión entre los recursos, el XML y las clases puramente Java. Ya veremos más adelante este tema, lo que es sumamente importante es que NO LA EDITEMOS NI MODIFIQUEMOS A LA CLASE R, contenida en el archivo R.java.

Carpeta /assets/
Contiene todos los demás archivos auxiliares necesarios para la aplicación (y que se incluirán en su propio paquete), como por ejemplo archivos 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 (/res/raw/) se generará 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 generarán ID y se podrá acceder a ellos por su ruta como a cualquier otro archivo del sistema. Usaremos uno u otro según las necesidades de nuestra aplicación.

Archivo AndroidManifest.xml
Es un archivo muy importante, ya que tiene la definición en XML de los aspectos principales de la aplicación, como por ejemplo su nombre, versión, icono a mostrar, sus componentes, y también debemos registrar los permisos necesarios para su ejecución. Veremos más adelante muchos más detalles de este archivo.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.tutoriales.ejemplo"
      android:versionCode="1"
      android:versionName="1.0">

  <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Ejemplo"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>



Bueno, en estas 3 primeras partes del BootCamp hemos cubierto lo mínimo y basico para comenzar a desarrollar para Dispositivos Android. Yo aca recomende utilizar Windows, pero tambien funciona muy bien en Mac OS y los Linux.

Hasta la proxima entrega, saludos,
MAriano!

1 comentario:

  1. Excelente hasta ahora! Es una lastima que ya no queden mas lugares para el Bootcamp del 5/11. Espero la proxima entrega!.
    Muchas Gracias

    ResponderEliminar