Introducción Android.
0. Índice de
contenidos.
- 1. Entorno.
- 2. Introducción.
- 3. Preparando el entorno.
- 4. Entendiendo Android.
- 5. Creando una aplicación HolaMundo.
- 6. Conclusiones.
1. Entorno.
Este tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil HP 17″ (2,7 Ghz AMD A4, 4 GB, 64-bit)
- Sistema Operativo: Windows 8
- IDE: Eclipse (Version: Kepler Service Release 1)
- jdk: 1.7.0_40
- Android 4.3 (API 18)
2. Introducción
En este tutorial veremos cómo preparar el entorno para desarrollar aplicaciones Android, y daremos una introducción a los elementos básicos que debes conocer para iniciarte en el mundo Android, los cuales veremos en la práctica a través de una aplicación de ejemplo que explicaremos paso a paso.
3. Preparando el entorno.
Primero comenzaremos por preparar el entorno de trabajo para desarrollar sobre la plataforma Android. En este tutorial usaremos como IDE de desarrollo Eclipse (el cuál asumiremos que está instalado ya). Luego debemos instalar y configurar Android SDK y agregar a Eclipse el plugin necesario para desarrollar aplicaciones Android.
3.1. Obteniendo e instalando Android SDK.
Primero partiremos de que el Android SDK es el API de librerías y herramientas de desarrollo que nos permite construir y probar aplicaciones Android. Ésta puede ser descargada libremente en esta dirección, una vez descargado y descomprimido, ejecutar el fichero SDK Setup.exe, con lo que se podrá tener acceso al SDK Manager y AVD Manager.
3.2. Configurando y administrando el SDK Manager.
Para comenzar a trabajar con Android tienes que descargar al menos una de las plataformas Android disponibles, a través del SDK Manager puedes descargar las que necesites, así como los paquetes disponibles.
3.3. Trabajando con AVD Manager.
Para probar nuestra aplicación Android podemos hacerlo usando un teléfono Android o usando AVD Manager, con el que se puede crear distintas instancias de emuladores y simular teléfonos de distintas características para probar las aplicaciones en la computadora.
Usando el teléfono solo necesitamos tenerlo conectado al PC y seleccionar la opción: Settings –> Applications –> Development –> USB Debugging, y cuando corramos nuestra aplicación se mostrará en el teléfono.
Usando el AVD Manager solo tenemos que crear una nueva instancia de simulador, especificarle las propiedades y a la hora de correr la aplicación indicarle qué instancia queremos usar.
3.4. Descargando e instalando ADT plugin en Eclipse.
Dentro del Eclipse selecciona la opción Help –> Install New Software para descargar ADT plugin.
A continuación pulsamos Add y en Location ponemos la siguiente dirección: https://dl-ssl.google.com/android/eclipse/
Seleccionamos la opción Developer Tools, y damos click en Next.
Aquí vemos la lista de herramientas que serán descargadas, damos click en Next, aceptamos los requerimientos de licencia, click en Finish para instalar y luego reiniciamos Eclipse.
Una vez que reiniciamos Eclipse, debemos especificar la dirección del SDK, para eso vamos a Window –> Preferences, y en el panel izquierdo señalamos Android y le especificamos la dirección de nuestro SDK.
Y ya estamos listos para crear nuestra primera aplicación. Pero primero necesitamos conocer un poco la filosofía y los principios básicos de Android.
4. Entendiendo Android.
Ahora veremos los elementos son fundamentales para entender Android. Existen cuatro tipos de componentes fundamentales que pueden conformar una aplicación Android: Activity, Service, BroadcastReceiver y ContentProvider, cada uno se encarga de realizar unos determinados tipos de tareas.
También existen los Intent, que se encargan de la navegación entre los distintos componentes.
4.1. Activity
Una Activity generalmente cumple la misma función que un Controlador en el paradigma MVC, es decir que está asociado a una vista (UI) y responde a los eventos ejecutados por el usuario.
public class MyActivity extends Activity{ @Override protected void onCreate(Boundle boundle){ super.onCreate(boundle); setContentView(R.layout.main); } }
En Android, generalmente, cada vista tiene definida su estructura y sus componentes en un fichero XML, que como veremos más adelante en la aplicación de ejemplo, por convención se ubican dentro de la carpeta layout. Y cada uno de esos ficheros es registrado de forma automática y dinámica en un fichero llamado R, así que para hacer referencia a dicho fichero lo hacemos de la forma R.layout.nombre.
4.2. Service.
Un service es el empleado generalmente para ejecutar tareas en el background de la aplicación, es decir, que no está asociado a ninguna interfaz de usuario.
Ejemplo:
public class MyService extends Service implements Runnable{ private int cont = 0; @Override protected void onCreate(Boundle boundle){ super.onCreate(boundle); Thread myThread = new Thread(this); myThread.start(); } public void run(){ while(true){ try{ Log.e("Mi Servicio", "ejecucion # " + cont++); Thread.sleep(10000); } catch(Exception e){ Log.e("Error", e.getMessage()); } } } }
Este ejemplo ejecuta un Log cada 10 segundos en el background de la aplicación.
4.3. BroadcastReceiver.
Un BroadcastReceiver responde a eventos globales, como una llamada entrante o un mensaje SMS que se reciba, por mencionar algunos.
Ejemplo:
public class MySMSBox extends BroadcastReceiver { @Override protected void onReceive(Context context, Intent intent){ if(intent.getAction.equals("android.provider.Telephony.SMS_RECIVED")){ Log.i("msg", "Mensaje recibido!"); } } }
Este es un BroadcastReceiver que ejecuta un Log cuando se recibe un mensaje SMS.
4.4. Content Provider.
Un Content Provider es empleado generalmente cuando queremos exponer datos de nuestra aplicación a otras aplicaciones dentro del entorno Android, o de igual forma, si algún Activity, Service o BroadcastReceiver de nuestra aplicación quiere acceder a los datos de otra aplicación, lo hará a través de su ContentProvider.
4.5. Intents.
A través de los Intents vamos a lograr la navegación en nuestra aplicación, este elemento nos permite describir lo que queremos hacer y a dónde queremos ir.
Ejemplo:
... Intent intent = new Intent(this, ProximaActividad.class); startActivity(intent); ...
Aquí creamos un Intent que nos permitirá navegar hasta la actividad ProximaActividad. Ésta es la manera más simple y también la más común de emplear los Intent, también existen otras más amplias y explicativas, que veremos en tutoriales posteriores.
Conociendo esto ya estamos listos para crear nuestra primera aplicación HolaMundo con Android.
5. Creando una aplicación HolaMundo.
Para ver cómo funciona Android en la práctica, la mejor manera es crear una aplicación básica, en nuestro caso crearemos una aplicación que nos permitirá calcular los impuestos sobre una determinada compra en los Estados Unidos, conociendo que los impuestos son el 7 por ciento del monto total de la compra. Por lo que crearemos una aplicación sencilla que te permita entrar el monto de la compra, calcular el impuesto y mostrar el resultado en otra vista.
Quedaría más o menos así:
El primer paso será crear la aplicación en el Eclipse, dando click derecho en la parte izquierda, New –> Other –> Android –> Android Application Project.
Damos Next y especificamos el nombre del proyecto y creamos la aplicación.
Nuestra aplicación terminada tiene la siguiente estructura de paquetes que explicaremos brevemente:
Dentro de src van las clases .java, donde definiremos nuestra lógica de negocios.
Dentro de la carpeta res están organizados los distintos recursos que componen nuestra aplicación:
- Drawable: Almacena las imágenes, iconos, etc.
- Layout: Almacena los layout, que son la representación de las vistas y sus componentes visuales en ficheros XML.
- Menu: Almacena los ficheros referentes al menú de la aplicación (no lo usaremos en este tutorial).
- Values: Dentro de values se especifica los estilos, dimensiones y ficheros para externalizar los textos de nuestras vistas.
Por último está el fichero AndroidManifest.xml, de gran importancia pues es el que describe los distintos componentes y el comportamiento de nuestra aplicación. En él además especificaremos los distintos permisos y configuraciones.
Una vez visto esto estamos listos para ver el código, y comenzaremos por la primera vista que vemos cuando se ejecuta la aplicación, que tiene su estructura definida en el fichero activity_main.xml.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Calculadora de Impuestos" android:gravity="center_horizontal" style="@style/encabezado"/> <EditText android:id="@+id/input_entrada" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="10px" android:autoText="true"/> <Button android:id="@+id/boton_calcular" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Calcular"/> </LinearLayout>
Aquí podemos ver un LinearLayout con tres componentes visuales dentro, con sus respectivas propiedades.
public class InicioActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button boton = (Button)findViewById(R.id.boton_calcular); boton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try{ EditText entrada = (EditText)findViewById(R.id.input_entrada); String strValue = entrada.getText().toString(); double valor = Double.parseDouble(strValue); double impuestos = valor * 0.07; String resultado = "Impuestos a pagar: " + impuestos; Intent intent = new Intent(v.getContext(), ResultadoActivity.class); intent.putExtra("RESULTADO", resultado); startActivity(intent); }catch(NumberFormatException nfe){ Toast.makeText(v.getContext(), "Entrada inválida", Toast.LENGTH_SHORT); } } }); } }
Y aquí vemos InicioActivity, que es la actividad encargada de mostrar y responder a los eventos de dicha vista. Debemos conocer que cada componente de nuestras vistas que tiene asignado un id y tiene una representación en el fichero R.java, localizado dentro del paquete gen, entonces para acceder a cualquier componente visual lo hacemos haciendo referencia a dicha representación y no al id en sí, por ejemplo:
... Button boton = (Button)findViewById(R.id.boton_calcular); ...
Otro aspecto a tener en cuenta es la preparación del Intent, al que le podemos poner parámetros extras para que viajen de una vista a otra.
... intent.putExtra("RESULTADO", resultado); ...
De forma general, cuando se presiona el botón tomamos el valor que hay en el campo input_entrada, lo multiplicamos por 0.07 y el resultado lo adjuntamos al intent que nos llevará a la siguiente actividad: ResultadoActivity.
El layout que representa la vista de la siguiente vista es muy sencillo:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/text_resultado" android:layout_width="fill_parent" android:layout_height="wrap_content" style="@style/encabezado"/> <Button android:id="@+id/boton_atras" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Atrás"/> </LinearLayout>
Y la actividad ResultadoActivity también:
public class ResultadoActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_resultado); String resultado = getIntent().getExtras().getString("RESULTADO"); TextView textResultado = (TextView)findViewById(R.id.text_resultado); textResultado.setText(resultado); Button boton = (Button)findViewById(R.id.boton_atras); boton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(v.getContext(), InicioActivity.class); startActivity(intent); } }); } }
Aquí indicamos que al crearse la actividad se muestre la vista representada por el layout activity_resultado. Luego tomamos el parámetro extra que viene con el intent y lo mostramos en el campo text_resultado. También indicamos que cuando se presione el botón se regrese a la actividad InicioActivity.
Por último veremos el fichero AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.holamundo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".InicioActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ResultadoActivity" > </activity> </application> </manifest>
Como vemos, hay varios aspectos de configuración, como son el paquete, la versión sdk con la que se desarrolló, la versión sdk mínima soportada, un tag <application> con los distintos aspectos propios de la aplicación como el icon, label y el tema. Dentro de este elemento están las distintas actividades y elementos que conforman nuestra aplicación, en nuestro caso está la actividad MainActivity, que a través del tag <intent-filter> con sus propiedades action y category especificamos que es la actividad principal de nuestra aplicación y que se mostrará cuando ésta sea ejecutada. Y además está la actividad ResultadoActivity.
6. Conclusiones.
En este tutorial hemos visto cómo preparar el entorno para desarrollar aplicaciones Android, así como los fundamentos y principios básicos a tener en cuenta Por último desarrollamos una aplicación sencilla para poder ver algunos de estos elementos en la práctica.
Ésto es solo una introducción al mundo Android y sus potenciales, que iremos ampliando en tutoriales posteriores.
Un saludo.