SlideShare uma empresa Scribd logo
1 de 8
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Mais procurados (17)

Android y leopard
Android y leopardAndroid y leopard
Android y leopard
 
Android laura c parra
Android laura c parraAndroid laura c parra
Android laura c parra
 
Sistema android
Sistema androidSistema android
Sistema android
 
Mi colegio por siempre
Mi colegio por siempreMi colegio por siempre
Mi colegio por siempre
 
"Android de la A a la Z" -- Unidad 9
"Android de la A a la Z" -- Unidad 9"Android de la A a la Z" -- Unidad 9
"Android de la A a la Z" -- Unidad 9
 
Sistema operativo android
Sistema operativo androidSistema operativo android
Sistema operativo android
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Android
AndroidAndroid
Android
 
Tecnología android
Tecnología androidTecnología android
Tecnología android
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Tema 4.1 Introduccion Android
Tema 4.1 Introduccion AndroidTema 4.1 Introduccion Android
Tema 4.1 Introduccion Android
 
Android
AndroidAndroid
Android
 
software
softwaresoftware
software
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Android
AndroidAndroid
Android
 
ANDROID INFORMACION
ANDROID INFORMACIONANDROID INFORMACION
ANDROID INFORMACION
 
Investigacion documental
Investigacion documentalInvestigacion documental
Investigacion documental
 

Destaque

Con texto farma
Con texto farmaCon texto farma
Con texto farmasilvias10
 
Taller de PLEs TICEMUR 2012
Taller de PLEs TICEMUR 2012Taller de PLEs TICEMUR 2012
Taller de PLEs TICEMUR 2012Linda Castañeda
 
El desarrollo profesional de los docentes en la era Internet: entornos person...
El desarrollo profesional de los docentes en la era Internet: entornos person...El desarrollo profesional de los docentes en la era Internet: entornos person...
El desarrollo profesional de los docentes en la era Internet: entornos person...Linda Castañeda
 
SlideShare, Scribd & Issuu
SlideShare, Scribd & IssuuSlideShare, Scribd & Issuu
SlideShare, Scribd & IssuuIñaki Pérez
 
Work life balance con efecto
Work life balance con efectoWork life balance con efecto
Work life balance con efectocucuriver
 

Destaque (6)

Con texto farma
Con texto farmaCon texto farma
Con texto farma
 
Taller de PLEs TICEMUR 2012
Taller de PLEs TICEMUR 2012Taller de PLEs TICEMUR 2012
Taller de PLEs TICEMUR 2012
 
El desarrollo profesional de los docentes en la era Internet: entornos person...
El desarrollo profesional de los docentes en la era Internet: entornos person...El desarrollo profesional de los docentes en la era Internet: entornos person...
El desarrollo profesional de los docentes en la era Internet: entornos person...
 
SlideShare, Scribd & Issuu
SlideShare, Scribd & IssuuSlideShare, Scribd & Issuu
SlideShare, Scribd & Issuu
 
Work life balance con efecto
Work life balance con efectoWork life balance con efecto
Work life balance con efecto
 
Micromachismos
MicromachismosMicromachismos
Micromachismos
 

Semelhante a Android (20)

Investigacion de Aplicaciones Moviles
Investigacion de Aplicaciones MovilesInvestigacion de Aplicaciones Moviles
Investigacion de Aplicaciones Moviles
 
Sistemas operativos para celulares
Sistemas operativos para celularesSistemas operativos para celulares
Sistemas operativos para celulares
 
Investigacion
InvestigacionInvestigacion
Investigacion
 
Sistemas operativos-moviles-terminado
Sistemas operativos-moviles-terminadoSistemas operativos-moviles-terminado
Sistemas operativos-moviles-terminado
 
Sistemas Operativos Moviles
Sistemas Operativos MovilesSistemas Operativos Moviles
Sistemas Operativos Moviles
 
Investigacion
InvestigacionInvestigacion
Investigacion
 
Investigacion
InvestigacionInvestigacion
Investigacion
 
Sistemas operativos móviles
Sistemas operativos móvilesSistemas operativos móviles
Sistemas operativos móviles
 
Sistemas operativos moviles
Sistemas operativos movilesSistemas operativos moviles
Sistemas operativos moviles
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Cetis 109 (1)
Cetis 109 (1)Cetis 109 (1)
Cetis 109 (1)
 
Lenguaje C y los Sistemas Operativos Actuales
Lenguaje C y los Sistemas Operativos ActualesLenguaje C y los Sistemas Operativos Actuales
Lenguaje C y los Sistemas Operativos Actuales
 
Hardware y software
Hardware y softwareHardware y software
Hardware y software
 
Introducción a la Plataforma para Móviles Android
Introducción a la Plataforma  para Móviles AndroidIntroducción a la Plataforma  para Móviles Android
Introducción a la Plataforma para Móviles Android
 
Sistemas operativos móviles
Sistemas operativos móvilesSistemas operativos móviles
Sistemas operativos móviles
 
Sistema Operativo. android
Sistema Operativo. androidSistema Operativo. android
Sistema Operativo. android
 
Android
AndroidAndroid
Android
 
Android1
Android1Android1
Android1
 
Lizbeth
LizbethLizbeth
Lizbeth
 
Lizbeth
LizbethLizbeth
Lizbeth
 

Android

  • 1. 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
  • 2. 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
  • 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
  • 4. 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
  • 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
  • 6. 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
  • 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
  • 8. 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