Vous êtes sur la page 1sur 8

para programadores

Programación en Android, el Linux que estará en todos los móviles,

Programación
en Android
Francisco Javier Carazo Gil

El anuncio por parte de Google y las compañías líderes mundiales del sector de las
telecomunicaciones mundiales sobre la creación de Android, el sistema operativo para
móviles basado en el núcleo de Linux, ha supuesto el mayor empujón que ha recibido el
software libre quizás en toda su historia. Y es que en un sector en el que todavía no hay
un monopolio de facto como en el de los ordenadores de escritorio, en el que también se
está progresando, la colaboración de Google y los gigantes de las telecomunicaciones
van a suponer para Android poder competir en unas condiciones inmejorables contra sus
rivales de código cerrado.

E
l cada vez más bamboleante sector de los OS. El sistema operativo para PDA y smartphones (los mó-
linux@software.com.pl

móviles está viviendo a día de hoy el mayor viles que combinan funciones con PDA) desapareció como
cambio de su historia en cuanto a software se tal en febrero de 2006 dando paso a un sucesor llamado
refiere. Atrás quedaron los sistemas propios ACCESS Linux Platform del que no se sabe demasiado.
de cada empresa que apenas dejaban al usuario ejecutar En esta dura batalla de los sistemas operativos para
una máquina virtual de la versión Micro Edition de Java. dispositivos móviles los grandes contrincantes son todos
Las posibilidades del hardware móvil son hoy tan gran- de código cerrado y sus nombres son Microsoft Windows
des, que es más que posible llevar a cabo casi todas las Mobile, Blackberry OS y Symbian OS.
actividades que anteriormente sólo estaban permitidas Aparte está el sistema operativo libre para PDA y
para sistemas de escritorio o portátiles. móviles OpenMoko, y el sistema que trae iPhone que
Por ejemplo la reproducción de vídeo codificado está comenzando a llegar al mercado. Sin duda, se espera
con codec de cierta complejidad, la visualización de una auténtica guerra entre todos estos dispositivos y el
presentaciones o simplemente la posibilidad de navegar protagonista de este artículo, Android.
por Internet son hoy en día funcionalidades que se deben
exigir a los móviles de gama alta. ¿Qué es Android?
Con el paso del tiempo todas estas funcionalidades Android es una plataforma libre para teléfonos móviles,
irán pasando cada vez a gamas más bajas y posiblemente basada en GNU/Linux y con licencia GPL que va a meter
los móviles sustituirán a los equipos actuales de sobre- de lleno al software libre en esta batalla.
mesa y portátiles para la realización de muchas tareas. Creado por la Open Handset Alliance, alianza tecnoló-
Esta revolución que se nos avecina está empezándose a gica encabezada por Google, acompañada de compañías del
librar a día de hoy ya en el terreno de los sistemas operati- nivel de T-Mobile, HTC, Motorola, Telefónica, Samsung,
vos. La primera figura en caer de esta batalla ha sido Palm Intel o Nvidia; tiene el respaldo suficiente para tener un

2 Linux+ 3/2008
para programadores
Programación en Android, el Linux que estará en todos los móviles,

éxito seguro y para convertir al software libre


en el producto dominante en esta porción del
mercado de la tecnología.
El potencial de Android no está sólo ava-
lado por las empresas que lo respaldan sino
por sus propias características técnicas.

Características de Android
La característica que me parece más im-
portante es que se trata de una plataforma
totalmente abierta tanto para fabricantes de
dispositivos móviles como para desarrolla-
dores de aplicaciones. Vayamos explicando
uno a uno los puntos más importantes de la
plataforma.

Núcleo
Es Linux, concretamente la versión 2.4.16
del kernel de Linux, por ahora. A este nivel
están implementados todos los controladores
primarios (cámara, USB, teclado...), aunque Figura 1. Arquitectura del sistema
también pueden añadirse más drivers por par-
te del fabricante del dispositivo (por ejemplo
el controlador de la pantalla táctil).
Sobre el núcleo están escritas las librerías
que se encargan de las funcionalidades bási-
cas. Estas librerías están escritas en C/C++ y
pueden ser accedidas directamente desde los
programas de la plataforma. Algunas de ellas
y sus funcionalidades son:

• Librerías en C del sistema: Implemen-


taciones de las librerías estándar de C,
preparadas para un mejor funciona-
miento en dispositivos embebidos que
usan Linux.
• Librerías multimedia: Proporcionan so-
porte para grabación y reproducción de
audio y vídeo, así como de imágenes.
• Gestor de superficies: Maneja el acceso
al dispositivo de pantalla.
• Librería del núcleo web: Moderno mo-
tor de navegación web que posibilita
usar el navegador de Android así como
vistas incrustadas de los sitios web.
• SGL: El motor gráfico 2D.
• Librerías para 3D: Implementación ba-
sada en las API de OpenGL ES 1.0.
• FreeType: Renderización de mapas de
bit y gráficos vectoriales.
• SQLite: Proporciona soporte para base
de datos relacionales.

Máquina virtual Dalvik


Es la encargada de ejecutar los programas.
Maneja dos tipos de archivos:

• .APK: Comprimido con ejecutables y


datos del programa. Figura 2. Interfaz gráfica de usuario de OpenMoko

www.lpmagazine.org 3
para programadores
Programación en Android, el Linux que estará en todos los móviles,

• .DEX: De Dalvik ejecutable, es un ar- les. Primero está el bajo nivel, manejado por
chivo similar a .class de Java pero post las facilidades estándar de Linux teniendo
procesado para conseguir un mejor ren- en cuenta permisos de acceso para archivos,
dimiento en la máquina Dalvik. usuarios, servicios, etc. El nivel alto, está ma-
nejado en Java, que se encarga de la integridad
La máquina virtual tiene acceso a: del código, del sistema de acceso, y de aislar
una aplicación de otra. Además en niveles
• Core Libraries: Librerías con las clases intermedios Android hace uso de la Memoria
estándar de Java. Protegida, gestión de procesos, así como un
• Application Framework: Módulos es- sistema de permisos explícitos de cara a los
critos en Java que permiten interactuar servicios a los que un programa desea acceder
con la agenda de contactos, la mensaje- en un momento dado. Figura 5. Hola Mundo – Hola Android
ría, llamadas...
Otros aspectos de importancia plataformas (que llevan unos cuantos años
Aplicaciones Aparte de lo ya comentado es interesante re- por delante de Android) pero gracias a las
Todas están escritas en Java pero tienen ac- saltar que Android es totalmente compatible facilidades que da Android a la comunidad
ceso directo a bajo nivel a través de la API. con cualquier tipo de transmisión por lo que esto tampoco será problema a la larga. Las
Están armadas en base a cuatro bloques de funcionará igual sobre dispositivos que usen fechas por ahora son muy difusas, pero se
construcción: GPRS con otros que usen 3G. Las interfases espera que Android esté disponible y ope-
gráficas de usuario están diseñadas usando rativo en el mercado a finales de 2008, así
• Activity: Parte visual de la aplicación. archivos XML que además de fáciles de que desgraciadamente nos tendremos que
• Intent Reciver: Un intento, traducción diseñar permiten al equipo representar las esperar un poco.
al español de intent, sería algo así como interfases en la mayor parte de los casos Lo que sí es seguro, es que en el momen-
un evento genérico que sería indepen- independientemente de las dimensiones de to de su lanzamiento al público tendrá más
diente de los programas, por lo que en la pantalla. de una campaña publicitaria detrás y mucho
caso de pedirse Android buscaría la El navegador que utiliza WebKit que a más marketing aparte, por lo que os puedo
aplicación adecuada para servir dicho su vez también está implementado usando asegurar que nos enteraremos todos.
intento. Por ejemplo podría ser algo así KHTML, por lo que nos aseguramos de
como enviar sms. un perfecto visionado de los sitios web que OpenMoko la otra
• Service: El concepto de demonio en cumplan con los estándares. La versión del alternativa libre
Linux aplicado a Android. reproductor Flash, de excepcional importan- Android no es ni mucho menos el primer
• Content provider: Proporciona a la aplica- cia en la actualidad a pesar de no ser libre, sistema operativo libre que aparece en los
ción capacidad de interactuar de manera está prevista que sea liberada en breve para dispositivos de carácter móvil. Anunciado
sencilla con la parte interna de Android. atender a los miles de dispositivos que trae- en 2006, hasta la aparición de Android
rán consigo Android. suponía el sistema libre con más fuerza en
Seguridad Además Android asegura una funciona- este campo. Basado también en el núcleo de
La seguridad es uno de los aspectos más lidad comparable o incluso mejor de la de Linux, OpenMoko usa un entorno gráfico
cuidados de Android. Está dividido en nive- dispositivos tan cuidados como iPhone, por lo de usuario basado en el servidor X.org,
que en Android tenemos un ganador seguro. las librerías GTK+ y el gestor de ventanas
Matchbox (el mismo que por cierto usarán
Previsiones de comercialización los OLPC). Está basado en el framework
Con las empresas que se encuentran respal- de OpenEmbedded y el sistema de paquetes
dando el proyecto, y no me refiero a Google ipkg.
ahora, sino a HTC, Motorola, Samsung..., Sin embargo, OpenMoko no ha tenido
Android no tendrá problemas de comercia- el respaldo de ninguna gran empresa y sólo
lización. Sólo falta software suficiente para el móvil Neo1973 de la empresa coreana
rivalizar de manera directa con las demás FIC ha llegado a venderse con dicho siste-
ma instalado para ser usado con cualquier
compañía. OpenMoko es un ejemplo más de
cómo un gran producto no llega a triunfar
por culpa de la falta de comercialización y
sobre todo por no tener el respaldo de al-
gún grande de la tecnología mundial. Algo
parecido le pasó por ejemplo a la consola
GP2X que por desgracia tiene un público
realmente limitado y no ha podido despegar
al igual que sus competidoras Nintendo DS
y Play Station Portable por culpa de la falta
Figura 3. Vista inicial del emulador Figura 4. Resultado del proyecto de prueba de comercialización.

4 Linux+ 3/2008
para programadores
Programación en Android, el Linux que estará en todos los móviles,

Listado 1. Conversor.java
Instalación del kit
de desarrollo de software
package conversor.peso; de Android
import android.app.Activity; Nada más anunciar el producto, Google
import android.os.Bundle; anunciaba que liberaba también la SDK
public class Conversorextends Activity { del mismo y que convocaba un concurso
/** Called when the activity is first created. */ llamado Android Developer Challenge cu-
@Override ya fecha de finalización está prevista para
public void onCreate(Bundle icicle) { marzo de 2008 y cuya cuantía en premios
super.onCreate(icicle); asciende hasta los 10 millones de dólares.
setContentView(R.layout.main);}} Estos dos movimientos, además de mover a
la comunidad entera, han hecho que muchos
Listado 2. Creando el primer LinearLayout horizontal de los desarrolladores libres vean con más
<?xml version="1.0"encoding="utf-8"?> que buenos ojos a Android.
<LinearLayout xmlns:android="http://schemas.android. El kit de desarrollo proporciona las
com/apk/res/android" herramientas necesarias para que, usando
android:orientation="vertical" Java y las clases pertinentes, podamos
android:layout_width="fill_parent" desarrollar (y probar usando el emulador
android:layout_height="fill_parent"> que incorpora) el software necesario para
<LinearLayout android:orientation="horizontal" el sistema.
android:layout_width="fill_parent"
android:layout_height="wrap_content"> Instalación de la SDK
</LinearLayout></LinearLayout> Procedemos primeramente a descargar la
SDK, que viene comprimida en formato
Listado 3. main.xml ZIP de la web de Android en la sección
<?xml version="1.0"encoding="utf-8"?> de Software development kit -> Download
<LinearLayout xmlns:android="http://schemas.android.com SDK -> Linux (i386). Una vez descargado
/apk/res/android" procedemos a:
android:orientation="vertical"
android:layout_width="fill_parent" • Descomprimimos el archivo:
android:layout_height="fill_parent">
<LinearLayout android:orientation="horizontal" unzip android_sdk_linux_m3-rc22a.zip
android:layout_width="fill_parent"
android:layout_height="wrap_content"> • Creamos un directorio para copiar el
<TextView android:layout_width="wrap_content" contenido (cambiamos oportunamente
android:layout_height="wrap_content" las rutas para adecuarlas a nuestro ca-
android:text="@ so):
string/libras" /><EditText id="@
+id/libras" mkdir $HOME/android_sdk
android:layout_width="fill_parent"
android:layout_height="wrap_content" /> • Copiamos el contenido:
</LinearLayout>
<LinearLayout android:orientation="horizontal" sudo cp -r $HOME/android
android:layout_width="fill_parent" _sdk_linux_m3-rc22a
android:layout_height="wrap_content"> /* $HOME/
<TextView android:layout_width="wrap_content" android_sdk
android:layout_height="wrap_content"
android:text="@string/kilogramos" /> • Añadimos al PATH de bashrc (o bash_
<EditText id="@+id/kilogramos" profile) el directorio tools de la SDK:
android:layout_width="fill_parent"
android:layout_height="wrap_content" /> sudo nano $HOME/.bashrc
</LinearLayout></LinearLayout>
• Incluimos al final por ejemplo:
Listado 4. string.xml
<?xml version="1.0" encoding="utf-8"?><resources> export PATH=${PATH}
<string name="app_name">Conversor</string> :$HOME/android_sdk/tools
<string name="libras">Libras:</string>
<string name="kilogramos">Kilogramos:</string></resources> Ya tenemos todo listo para proseguir instalando
ahora, el plugin de Eclipse.

www.lpmagazine.org 5
para programadores
Programación en Android, el Linux que estará en todos los móviles,

Instalación del plugin de Eclipse (ADT) • Antes de hacer uso de él deberemos


La instalación del plugin de Eclipse para reiniciar Eclipse y hacer que apunte al
desarrollar proyectos con Android se realiza directorio donde tenemos instalada la
de manera totalmente gráfica: SDK.
• Para asignar la ruta de la SDK al plugin
• Iniciamos Eclipse y nos dirigimos a: entramos en las preferencias de Eclip-
Help > Software updates > Find andins- se, Preferences > Android y asignamos
tall... la ruta en SDK Location.
• En el diálogo que nos aparece elegi-
mos: Search for new features to install Ya estamos listos para comenzar a realizar
y presionamos en Next. nuestros primeros proyectos con Eclipse pa-
• Creamos un nuevo sitio remoto, New ra Android. Dado que todavía se encuentra Figura 6. Resultado con libras y kilogramos ya listos
remote site incluyendo como título An- tanto Android, como su SDK, como el plu- para introducir.
droid Plugin por ejemplo; y como URL gin, en plena fase de desarrollo, deberemos
del mismo: https://dl-ssl.google.com/ estar atentos y de vez en cuando repetir los un proyecto para Android. Asignamos el
android/eclipse/. primeros pasos de la instalación del plugin nombre del proyecto así como si vamos a
• El sistema buscará información sobre para ver si hay disponible una versión trabajar con nuevo código o con código ya
el plugin y acto seguido aparecerá un nueva. existente y:
diálogo donde se nos mostrará el plugin
para elegir. Lo seleccionamos: Android Primeros pasos • Nombre del paquete: prueba.primera por
Plugin > Eclipse Integration > Android con Eclipse y Android ejemplo.
Development Tools y presionamos Gracias al plugin que acabamos de instalar, • Nombre de la actividad: prueba
Next. la creación del proyecto para Android es • Nombre de la aplicación: prueba
• Una vez seleccionado, aceptamos las algo automático. Accedemos a File > New
condiciones de uso y acto seguido el > Project... En el diálogo que nos aparece El plugin creará dos directorios y un archivo
plugin se habrá terminado de instalar. tenemos disponible una opción para crear XML:

Listado 5. Botones • src/: Donde se almacenará nuestro código.


<LinearLayout android:orientation="horizontal" • res/: Donde se almacenarán los recursos
android:layout_width="fill_parent" del proyecto.
android:layout_height="wrap_content"> • androidManifest.xml: Información sobre el
<Button id="@+id/librasAKilogramos" proyecto.
android:text="@string/librasAKilogramos"
android:layout_width="wrap_content" Creando la configuración de ejecución
android:layout_height="wrap_content" /> Nos dirigimos al diálogo de configuración de la
<Button id="@+id/kilogramosALibras" ejecución: Run > Run...
android:text="@string/kilogramosALibras" Dentro de él seleccionamos a Android y
android:layout_width="wrap_content" elegimos crear una nueva configuración. Le
android:layout_height="wrap_content" /> damos nombre y asignamos:
</LinearLayout>
• Nombre del proyecto a ejecutar.
Listado 6. Incluyendo los EditText y Button dentro del fichero java • Actividad dentro del mismo a ejecutar.
public class Conversorextends Activity {
private EditTexttextoLibras; También podemos elegir otras opciones para
private EditTexttextoKilogramos; el emulador y en el apartado al margen que se
/** Called when theactivity is first created. */ llama Common.
@Override Ya podemos entonces ejecutar la apli-
public void onCreate(Bundle icicle) { cación, depurarla o simplemente guardar
super.onCreate(icicle); esta nueva configuración de ejecución para
setContentView(R.layout.main); usarla posteriormente.
textoLibras = (EditText)findViewById(R.id.libras);
textoKilogramos = (EditText)findViewById(R.id.kilogramos); Hola mundo, hola Android
Button librasAKilogramos =(Button)findViewById(R.id.librasAKilogramos); Una vez visto esto, si ejecutáis el código
Button kilogramosALibras =(Button)findViewById(R.id.kilogramosALibras) veréis un texto parecido a un típico Hello
; World. Personalicemos algo más eso. Veamos
} qué debemos modificar para que aparezca el
} típico, Hola mundo que todos, o casi todos,
hacemos cuando comenzamos a probar con
un nuevo lenguaje o plataforma. Para ello

6 Linux+ 3/2008
para programadores
Programación en Android, el Linux que estará en todos los móviles,

Una vez cargado el proyecto, observamos el mismo. Ahora dentro de este LinearLayout
contenido de Conversor.java: colocaremos la etiqueta de Libras y el campo
La sentencia que nos interesa ahora es: de texto para insertar la cantidad.
setContentView(R.layout.main); Esta sen-
tencia indica qué interfaz de usuario se esta- TextView y EditText
blece cuando la actividad se llama. Como os Para poner la palabra Libras en el interfaz
comentamos antes al comienzo del artículo, usaremos los llamados TextView. La sintaxis
un concepto muy importante en Android es es análoga a la de los LinearLayout. Las pro-
el de actividad que puede ser llamada por piedades que usaremos serán:
otro software en ejecución, por lo que se
Figura 7. Interfaz completo facilita mucho labores como Enviar SMS o • layout_height: Altura.
Llamar a tal contacto que pueden ser a su • text: Texto del mismo.
creamos un nuevo proyecto como el anterior vez actividades.
y lo nombramos Hola Mundo. Posteriormen- Volviendo a la sentencia anterior, deciros Nuestro TextView será así:
te antes de ejecutar modificamos el archivo que establece el interfaz en el archivo main
main.xml, que está dentro de layouts y cam- de layout. Los layout están definidos en ar- <TextView android:layout_width="wrap_
biamos el siguiente valor: chivos XML, como el que hemos modificado content"
en el ejemplo de Hola Mundo. Los layout android:layout_height="wrap_content"
<TextView aunque puedan parecer poco intuitivos, nos android:text="@string/
android:layout_width="fill_parent" permiten crear interfaces de manera rápida libras" />
android:layout_height="wrap_content" y lo que es más importante, solucionan el
android:text="Hola Mundo! Hola El campo @string/libras hace referencia al
problema de los distintos tamaños de pantalla
Android." que hay en los dispositivos móviles. archivo string.xml definido en el directorio
/> values del proyecto.
Empezando a trabajar con layouts Este archivo que de primeras sólo tiene
De manera que el campo android:text, con- Puesto que queremos hacer algo así como: guardado el nombre de la aplicación, appNa-
tenga la cadena para escribir ¡Hola Mundo! me, nos servirá para almacenar las cadenas
Hola Android. Con esta simple modificación • Libras: (campo de texto para introducir de nuestra interfaz. Por ejemplo en este caso
ya cambiamos el valor del campo que apa- cantidad) tendremos:
rece en pantalla. Como veréis, el directorio • Kilogramos: (campo de texto para introdu-
layouts con sus distintos archivos XML de cir cantidad) <?xml version="1.0"
los que os he hablado anteriormente para • Botón para convertir de libras a kilogra- encoding="utf-8"?>
definir interfaces gráficos de usuario, puede mos. <resources>
parecer de primeras más complejo, sin em- • Botón para convertir de kilogramos a li- <string name="app_name">
bargo es cuestión de acostumbrarse al modo bras. Conversor</string>
de programar del mismo. <string name="libras">
Los layout nos ofrecen la posibilidad de ha- Libras:</string>
Conversor de kilos a libras cerlo definiendo primero un tipo de contene- </resources>
Para hacer un ejemplo un poco más complejo dores llamados: LinearLayout. Éstos agru-
en el que manejemos algo más de Android, pan otros contenedores a su vez en su interior Ya tenemos la etiqueta puesta. Pasemos ahora
vamos a comenzar a desarrollar un conversor y pueden tener dos orientaciones: vertical u a crear el campo de texto donde se insertará
de kilos a libras. De esta manera tendremos horizontal. Nosotros tendremos primero un la cantidad de libras. Usaremos los llamados
además de algo de cálculo detrás, un interfaz LinearLayout vertical que almacene los EditText y también los incorporaremos al
un poco más completo con: cuatro campos que nos interesan. Luego ani- LinearLayout vertical que hemos creado. Las
daremos dentro de él más LinearLayout con propiedades que usaremos serán:
• Un campo para introducir los kilos y otro orientación horizontal para poder contener
para introducir las libras. el resto de elementos. La sintaxis de XML
• Un botón para convertir de kilos a libras y nos facilita muchos estos anidamientos. Si
otro para hacer lo contrario. os fijáis ese LinearLayout vertical que os co-
mento ya viene definido dentro del proyecto En la red
Lo primero que haremos será crear un autogenerado por la siguiente sentencia:
proyecto tal y como lo hemos hecho antes. android:orientation="vertical”. Para crear • Android
Para el ejemplo he elegido los siguientes la línea definida porla etiqueta Libras y el http://code.google.com/android/
nombres: campo de texto para insertar el valor de las index.html
mismas, creamos otros LinearLayout que • Open Handset Alliance
• Nombre proyecto: Conversor tenga orientación horizontal. Lo anidamos http://www.openhandsetalliance.com/
• Nombre paquete: conversor.peso como está demostrado en el Listado 2. • Android Development Community
• Nombre actividad: Conversor Lo único que hemos cambiado en el nue- http://www.anddev.org/
• Nombre aplicación: Conversor vo LinearLayout ha sido la orientación del

www.lpmagazine.org 7
para programadores
Programación en Android, el Linux que estará en todos los móviles,

• id: Identificador
Listado 7. Campos numéricos
• layout_width: Anchura
<EditText id="@+id/libras" • layout_height: Altura
android:layout_width="fill_parent"
android:numeric="true" Los valores que hemos usado o usaremos
android:layout_height="wrap_content" /> para anchura y altura, wrap_content y fi-
ll_parent, envuelven el contenido o rellenan
<EditText id="@+id/kilogramos" al padre respectivamente. Es la manera más
android:layout_width="fill_parent" rápida y eficiente (al menos para estos ejem-
android:numeric="true" plos) de definir una altura y una anchura que
android:layout_height="wrap_content" /> se ajustan a nuestras necesidades. Nuestro
EditText tendrá la siguiente forma:

Listado 8. Definición de los métodos de cálculo <EditText id="@+id/libras"


librasAKilogramos.setOnClickListener(new View.OnClickListener() android:layout_width="fill_parent"
{ android:layout_height="wrap_content"
public void onClick(View view) />
{
textoKilogramos.setText(""+Double.parseDouble(textoLibras.getText(). Si hacemos lo mismo para kilogramos y lo
toString())*.4535924); añadimos al main.xml y a string.xml nos
} quedarán como en los Listados 3 y 4. El re-
} sultado lo podéis ver en la Figura 6.
)
; Añadiendo botones
Para incluir los botones, los haremos inclu-
kilogramosALibras.setOnClickListener(new View.OnClickListener() yendo dos button en un nuevo LinearLayout
{ horizontal que albergará a ambos botones. Los
public void onClick(View view) botones, los incluiremos usando button, las
{ propiedades que usaremos del mismo son:
textoLibras.setText(""+Double.parseDouble
(textoKilogramos.getText( • id: Identificador
).toString())/.4535924); • text: Texto
} • layout_width: Anchura
} • layout_height: Altura
)
; En el texto se hará una referencia al texto en sí
que aparecerá dentro del botón que estará guar-
Listado 9. Botón cerrar dado en string.xml.
En string.xml: Como veis el sistema es siempre el mis-
<string name="cerrar">Cerrar</string> mo, en main.xml definimos las propiedades
En main.xml: y en string.xml almacenamos el contenido
<Button id="@+id/cerrar" y las cadenas que aparecen en nuestra in-
android:text="@string/cerrar" terfaz.
android:layout_width="fill_parent" Definamos primero lo que vamos a
android:layout_height="wrap_content" /> incluir en el main.xml. Creamos un nuevo
En Conversor.java: LinearLayout horizontal e incluimos los
Button salir = (Button) findViewById(R.id.salir); botones (Listado 5).
[...]
salir.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
setResult(RESULT_OK);
finish();
}
}
)
;
Figura 8. Conversor funcionando

8 Linux+ 3/2008
para programadores
Programación en Android, el Linux que estará en todos los móviles,

Dotando de funcionalidad
a nuestro ejemplo
Como podéis observar en la toma de pan-
talla anterior ya tenemos el interfaz dise-
ñado y funcionando sin embargo, es un
mero esqueleto que no tiene funcionalidad.
Lo primero que haremos será importar: Figura 10. Logo de Android
import android.widget.EditText y import La manera más eficiente de hacerlo es mercado, está llamada a ser quien lidere el
android.widget.Button. Eclipse puede hacer asignar la propiedad de campo numérico a emergente sector de los sistemas operativos
esta labor por nosotros si presionamos: Con- los mismos. Esto lo hacemos en el fichero para dispositivos móviles.
trol + Mayúsculas + O sobre la instanciación main.xml (Listado 7). La inclusión de menús o de más elementos
del objeto del que no tiene el import oportuno Una vez hecho ésto nos ahorramos el en la interfaz así como el manejo de las librerías
(lo que resulta bastante cómodo la verdad). posible problema de que el usuario introduz- que os he comentado anteriormente, son el si-
Creamos dos atributos privados para la ca una letra en alguno de estos dos campos guiente paso para seguir desarrollando nuestro
clase, uno para cada EditText y otros dos y el consiguiente manejo de excepciones, trabajo.
objetos ya dentro del método onCreate para con la típica estructura de Java try y catch Manejar el bluetooth o crear una apli-
manejar las acciones de los botones. también en Android. cación que use navegación web son posibi-
Además asignamos a cada uno que Para hacer la operación crearemos dos lidades que gracias a la API de Android se
manejen el EditText o Button correspon- métodos dentro de onCreate que se dediquen desarrollan de manera bastante simple.
diente con el método findViewById al que le cada uno a hacer la operación de libras a ki- Las llamadas DevTools son una ayuda
pasamos como parámetro el identificador y logramos y viceversa. más para el desarrollador que Android nos
nos devuelve el objeto de la vista con dicho Para ello utilizaremos onClickListener ofrece. Os animo desde aquí a que forméis
identificador. Veamos cómo sería el código y dentro de él crearemos la definición de la parte de la comunidad de desarrolladores y
(Listado 6). acción para el evento onClick. comencéis a hacer aún más grande a este
Como podéis observar textoLibras y texto- La primera acción será si hacemos clic sistema operativo que está llamado a hacer
Kilogramos son atributos de la clase Conversor en el botón de transformación de libras a ki- historia.
ya que los manejaremos en más métodos que en logramos rellenar el campo texto kilogramos Las posibilidades como habéis visto
el onCreate. Ahora crearemos dos métodos más con el producto del número de libras por la son numerosas y las dificultades, como
en la clase para hacer las dos acciones, pasar de razón de conversión (0.4535924) para este por ejemplo lo raro que pueden resultar
libras a kilogramos y viceversa. caso. La acción inversa será hacer lo mismo de primeras el uso de layouts, son sólo
pero dividiendo y cambiando de orden los cuestión de acostumbrarse, porque Google
Definiendo métodos campos (Listado 8). y el resto de componentes del proyecto han
para realizar los cálculos conseguido diseñarlo de manera que resulta
Lo primero que haremos será obligar a Incluimos un botón realmente fácil programar y desarrollar para
Android que no acepte valores que no sean para cerrar la aplicación el mismo.
numéricos en los EditText. Para terminar el ejemplo vamos a añadir a
nuestra aplicación un botón para cerrarla.
Para ello usaremos en el archivo con el códi-
go Java los métodos:
Sobre el autor
• setResult con el parámetro RESULT_OK
para indicar a Android que la actividad ha Francisco Javier Carazo Gil esIngeniero
finalizado correctamente. Técnico en Informática de Sistemas.
• finish() para cerrar la aplicación. Nacido en Córdoba, actualmente está
estudiando Ingeniería en Informática. Ha
Además incluiremos el Listado 9. Si pulsa- trabajado anteriormente con contrato de
mos el botón Cerrar la aplicación se cerrará becario en el Ilustre Colegio de Aboga-
y volveremos al menú inicial de Android en dos de Lucena.
el emulador. Podéis ver el resultado en la Es webmaster de LinuxHispano.net,
Figura 10 sitio del que es uno de los fundadores.
Colaborador habitual de esta revista,sus
Conclusiones intereses son principalmente el software
Con este artículo no se ha intentado dar una libre, la programación y todo lo relaciona-
explicación compleja y completa de todas do con GNU/Linux.
las posibilidades que nos ofrece Android. Su sitio web personal está en http:
Sin embargo, espero que el contenido //www.jcarazo.com. Podéis contactar
del mismo os sirva para romper el hielo y con él a través de su correo personal,
animaros a programar en esta plataforma que carazo@gmail.com.
Figura 9. Botón cerrar incluido gracias al apoyo de las empresas líderes del

www.lpmagazine.org 9