Académique Documents
Professionnel Documents
Culture Documents
NET Framework
dotNetManía
www.dotnetmania.com
Silverlight 3D
Logrando efectos tridimensionales en Silverlight
Principio Open/Closed • Un ORM portable, ligero y eficaz • Silverlight PlaneProjection • Plataforma Android. Introducción al desarrollo • Migración
de código de SharePoint 2007 a 2010 • Desarrollando con Data Tier Application Component (DAC) • dnm.ux#12: Libertad, opciones y decisión
72
Eventos 08
VI SQLU Summit 2010 y Lanzamiento SQL Server 2008 R2
seminarios necesidades. El ORM que presentamos aquí es fácil de embeber en nuestros desarrollos, sencillo de
utilizar y nos brinda prácticamente toda la potencia de los grandes ORM.
dnm.ux 52-53
Libertad, opciones y decisión
dnm.q&a 54-57
Integración del CLR con SQL Server
dnm.desvan 58
Seminarios Solid Quality Mentors
Duración: 8 horas +complemento a distancia* • Precio: 150 €
Horario: 10:00 a 14:00 y de 16:00 a 20:00 • Ciudad: Madrid
Formación bonificable 100% por la Fundación Tripartita
El sistema operativo Android está basado en el kernel de Linux y ha sido desarrollado bajo el amparo de
Google. En principio, nació como un sistema operativo para móviles; hoy en día lo tenemos también en
tablets y en Google TV. Desde su presentación en noviembre de 2007, estamos actualmente en la ver-
sión 2.2 (también conocida como Froyo), una versión que quiere dar un punto de madurez hasta la siguien-
te versión: la 3.0 o Gingerbread. Pero para nosotros, como desarrolladores, la esencia de Android seguirá
siendo la misma. Este artículo pretende introducir al lector en el mundo del desarrollo para esta plata-
forma, adentrándonos en el entorno Eclipse y la programación con Java.
Diferentes versiones
Antes de comenzar, debemos tener claro cómo está
actualmente el mercado de los dispositivos. Goo- Figura 1. Diferentes versiones de
gle realiza estudios quincenales, como el mostra- Android a fecha 16 de junio de 2010
do en la figura 1, analizando qué versiones de
Android se están utilizando.
Debemos tener en cuenta para qué versión que- disposición de los programadores varias herra-
remos desarrollar, ya que si usamos el SDK de la mientas de desarrollo para todas las plataformas:
versión 2.1 estaríamos bloqueando el acceso a nues- Windows, Mac y Linux. Por un lado, tenemos el
tra aplicación a más de la mitad de los dispositivos Android SDK, que nos permite desarrollar con Java,
actuales. contiene los distintos emuladores, las Google API
y permite empaquetar nuestras aplicaciones.
Además, como entorno oficial tenemos a Eclipse,
Las herramientas de desarrollo y para él existe el Android Development Tools (ADT)
Plugin for Eclipse.
Otra de las cosas que debemos saber antes de Pero a mayores, tenemos la posibilidad de escri-
ponernos es de qué herramientas disponemos para bir código nativo; para ello se ha puesto a disposi-
Eugenio Estrada
trabajar con Android. El equipo de Android pone a ción de los desarrolladores el Native Development
Programador especializado en
tecnologías Microsoft y diseño de
interfaces de usuario
Toolkit (NDT). Éste está sobre todo pen- • OpenGL | ES. Esta librería está pensa- Los principales tipos de componen-
sado para juegos, ya que permite traba- da para el uso en juegos 3D. tes son los siguientes:
jar con OpenGL sin necesidad de la • SGL. La podemos usar para manejar
máquina virtual de Java, pudiendo así gráficos en 2D, ya sea para crear nues- • Activity. Al desarrollar una aplicación
tener un mejor rendimiento. tra propia interfaz o para juegos sim- para Android, al menos deberemos
ples en 2D. tener un Activity. Es el encargado de
Instalando el Android SDK • WebKit. Con él, podemos integrar el gestionar la interfaz de usuario y se apo-
motor de renderización Web que usan ya en una colección de rectángulos, lla-
Para instalar el SDK, debemos por un Safari, Chrome y el propio Android. mados View, que interactúan con el
lado tener instalado Eclipse 3.4 ó 3.5 con • Media Framework. Para poder hacer usuario.
el Java Development Kit 5 ó 6. Una vez lo uso de audio y vídeo, debemos usar • Service. Los servicios se ejecutan total-
tengamos instalado, debemos seguir los estar librería. mente en segundo plano; en nuestro
siguientes pasos: • FreeType. Con ella podremos renderi- ejemplo de reproductor de audio, será
zar textos usando diferentes fuentes. el que reproduzca el sonido. Otras apli-
1. Descargar el Android SDK para la plata-
forma que deseemos desde la dirección
http://developer.android.com/sdk, y
descomprimirlo en la carpeta que crea-
mos oportuno.
2. Instalar el ADT Plugin for Eclipse.
Para ello, debemos ir a la opción de
añadir nuevo software de Eclipse y aña-
dir el siguiente repositorio: https://
dlssl.google.com/android/eclipse.
3. Establecer la ubicación del Android
SDK en las preferencias de Eclipse, en
la nueva opción “Android". Aquí debe-
mos indicar la ubicación exacta donde
hemos descomprimido el SDK.
4. Instalar los componentes de desarrollo.
En el menú “Window" | “Android SDK
and ADV Manager", debemos instalar
los distintos paquetes de las diferentes
versiones de Android. En la opción “Avai-
lable Packages" instalaremos las dife-
rentes versiones del SDK, la documen-
tación, las Google API, las ROM de la ver- Figura 2. Arquitectura de Android
sión que instalemos para los dispositi-
vos virtuales y los distintos ejemplos.
Una plataforma basada caciones se pueden subscribir a él, si
Una vez seguidos todos los pasos en componentes conocen su interfaz, para comunicarse
anteriores, ya tendremos instaladas las con él.
herramientas necesarias para poder tra- El software de Android está basado en com- • Broadcast receivers. Estos componen-
bajar con Android. ponentes independientes que interactúan tes se ejecutan en segundo plano y reci-
entre sí. En una aplicación con audio, ten- ben datos de cambios en el sistema: lla-
Librerías del Android SDK dremos al menos dos componentes: uno mada recibida, llamada finalizada, nue-
ejecutándose en segundo plano reprodu- va posición en el GPS, etc. En el ejem-
Como podéis ver en la figura 2, el Android ciendo el audio, y otro en primer plano ges- plo del reproductor de audio, estos com-
SDK trae de serie un conjunto de librerías tionando la interfaz de usuario. Es impor- ponentes se utilizarían para pararlo en
que podemos usar en nuestras aplicaciones. tante destacar que estos componentes son caso de llamada o de batería baja. Las
Entre ellas, las más importantes son: independientes, ya que podría haber una comunicaciones se hacen mediante
aplicación de terceros que también ges- unos mensajes llamados Intent.
• SQLite. Nos permite tener una base de tione ese componente de audio en segun- • Content provider. Este componente es
datos local con la que gestionar todos do plano, o nosotros usar un componen- necesario para la compartición de datos
dotNetManía
los datos de nuestra aplicación. te que exponga un tercero. entre los distintos componentes de
37
nuestra aplicación. Debe exponer una en correspondencia con el API Level; por Es importante señalar que para todos
estructura de datos que se vaya a com- ejemplo, la versión 1.6 corresponde al los ficheros que guardemos en la carpe-
partir entre ellos. nivel 4 de la API, y la 2.1 al nivel 7. ta de recursos se nos va a crear un iden-
Pulsando el botón “Siguiente" podre- tificador único por el cual poder obtener-
mos generar un proyecto para testeo, algo lo; por ejemplo, en caso de tener un fiche-
Creando nuestra primera que queda fuera del ámbito de este artí- ro main.xml en la carpeta layout, que se
culo; en nuestro ejemplo no lo crearemos. genera por defecto, podremos acceder a
aplicación él mediante R.layout.main. Si abrimos
Para crear una aplicación para Android el fichero R.java de la carpeta gen, podre-
en Eclipse, debemos ir a “File" | “New" | Mientras Android 1.x continúe tenien- mos ver todos los identificadores gene-
“Project" y seleccionar “Android Project". do una cuota de mercado tan grande, rados.
Veremos el diálogo que se presenta en la si no necesitamos nada específico de
figura 3. alguna API posterior deberíamos desa-
El manifiesto de la aplicación
A la hora de crear un nuevo proyec- rrollar para la versión 1.5, API Level 3.
to, debemos tener en cuenta diferentes Toda aplicación de Android debe expo-
aspectos en cuanto a la nomenclatura. ner un fichero de manifiesto, AndroidMa‐
Por un lado, tenemos el Project Name, Los recursos de la aplicación nifest.xml (listado 1). Es, quizá, uno de
que es un identificador para Eclipse; de los elementos más importantes de nues-
él dependerá la carpeta en nuestro espa- La carpeta de recursos, res, es don- tro desarrollo, ya que en él es donde se
cio de trabajo (workspace). Por otra par- de debemos guardar los ficheros de solo deben especificar un montón de cosas
te, tenemos el Application Name, que lectura que nuestra aplicación deba usar. para nuestra aplicación.
será el nombre de nuestra aplicación, En la tabla 1 podemos ver qué tipos de En este fichero, por un lado, tenemos
cómo aparecerá en el dispositivo, etc. ficheros podremos guardar en las carpe- todas las configuraciones que establecimos
Luego tenemos el Package Name, que tas de recursos. al crear nuestro proyecto: package, Min SDK
se rige por los mismos criterios que los
proyectos en Java: el namespace inicial Directorio Recurso
de nuestro proyecto será com.empre-
sa.NombreProyecto. Por último, tene- anim Ficheros XML que definen animaciones.
mos la versión mínima del SDK para indi- color Ficheros XML que definen listas de colores.
carnos qué dispositivos pueden abrir
nuestra aplicación; para ello, la versión drawable Imágenes de mapa de bits (PNG, JPG o GIF) o ficheros XML
debe ser igual o mayor al build target que que definan figuras como shapes, animation drawables, color
hayamos seleccionado. Este número está drawables, etc.
layout Ficheros XML que definen la interfaz de usuario.
menu Ficheros XML que definen menús.
raw Permite almacenar ficheros arbitrarios.
values Ficheros XML que almacenan valores simples, como string,
integer y color. Existen convenios para algunos nombres de
los ficheros: arrays.xml, colors.xml, dimens.xml, strings.xml
y styles.xml.
xml Permite almacenar ficheros XML arbitrarios.
Figura 3. Nuevo proyecto de Android (landscape). fiesto es aquella donde establecemos los
38
El elemento Action indica las accio-
<?xml version="1.0" encoding="utf‐8"?> nes disponibles para la aplicación, como
<manifest xmlns:android="http://schemas.android.com/apk/res/android" por ejemplo podrían ser: compartir, ver,
package="com.dnm.Helloworld" editar, etc.; por otro lado, están las cate-
android:versionCode="1" gorías (Category) que indicarán desde
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
dónde se van a lanzar las acciones. Por
<activity android:name=".HelloWorldActivity" ejemplo, si estuviéramos desarrollando
android:label="@string/app_name"> una aplicación para compartir vídeos,
<intent‐filter> tendríamos un Intent Filter que indique
<action android:name="android.intent.action.MAIN" /> en su Action que queremos compartir, y
<category android:name="android.intent.category.LAUNCHER" />
</intent‐filter>
en su Category indicaríamos qué datos
</activity> queremos capturar, mediante el nodo
data.
</application>
<uses‐sdk android:minSdkVersion="7" />
Permisos
</manifest>
A la hora de descargar una aplicación
en Android Market, se nos pregunta qué
Listado 1. AndroidManifest.xml recursos utiliza nuestra aplicación. Ello no
es solamente un formalismo; la aplicación
debe definir todos esos recursos que va a
utilizar y solicitar un permiso, que se mues-
tra de esa forma en el Android Market. Entre
estos permisos se encuentran algunos que
seguramente vayan a incluir la mayor par-
te de nuestras aplicaciones, como por ejem-
plo el de acceso a Internet, y otros como
poder realizar una llamada o gestionar las
cuentas del sistema operativo.
Views
Comentábamos antes que cada Acti-
vity estaba formado por uno o varios
View, que son la pieza básica para los
componentes de nuestra interfaz. Todo
componente de la interfaz de usuario debe
derivar de la clase View. Existen princi-
palmente dos grupos de controles: por
un lado, tenemos los que derivan de View‐
Group, que son los que definen el layout
de nuestra aplicación: LinearLayout, Fra‐
Figura 4. Editando las opciones del manifiesto
meLayout, RelativeLayout, etc., que se
usarán como contenedores de elemen-
tos; por otra parte, están los que no deri-
componentes de nuestra aplicación, como <action android:name= van de ViewGroup, entre los que podemos
los Activity. En las aplicaciones podemos "android.intent.action.MAIN" /> encontrar TextView, ListView, Spinner,
definir tantos Activity como queramos; Button, EditText, TimePicker, etc.
cada uno de ellos será visible como un Y por otro lado, debemos indicar que Nuestro proyecto, en la carpeta de
icono en nuestro terminal. Pero para cada esta actividad queremos que esté dispo- recursos layout, debería tener un fiche-
terminal debemos definir su Intent Filter. nible desde el menú de aplicaciones: ro main.xml que será el que "pinte" nues-
Como dijimos antes, un intent es un men- tro Activity por defecto. Como podéis ver
saje interno del sistema operativo. <category android:name= en el listado 2, debemos definir un layout,
Por un lado, debemos indicar cuál es en nuestro caso LinearLayout, y luego
dotNetManía
"android.intent.category.LAUNCHER" />
el Activity principal de la aplicación: introducimos el resto de componentes en
40
package com.dnm.Helloworld;
<?xml version="1.0" encoding="utf‐8"?>
<LinearLayout
import android.app.Activity;
import android.os.Bundle;
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
public class HelloWorldActivity extends Activity {
android:layout_width="fill_parent"
/** Called when the activity is first created. */
android:layout_height="fill_parent">
@Override
<TextView
public void onCreate(Bundle savedInstanceState) {
android:layout_width="fill_parent"
super.onCreate(savedInstanceState);
android:layout_height="wrap_content"
setContentView(R.layout.main);
android:text="@string/hello" />
}
</LinearLayout>
}
él. En este caso tenemos un TextView, que es un con- Desde Java podemos también referirnos a un con-
trol que simplemente muestra un texto, que toma su trol y controlar sus eventos. En el listado 5 podemos ver
valor de la clave hello de los ficheros de recursos. En la cómo obtener el botón que añadimos a nuestra interfaz
carpeta de recursos values hay un fichero llamado y controlar su Click. El método findViewById nos per-
string.xml; lo que el sistema hará será buscar en todos mite obtener los View a través del id autogenerado en
los ficheros de recursos un recurso de tipo string con el fichero R.java. Y para controlar el evento debemos
la clave hello. crear un Listener para él, que le pasamos como pará-
Para añadir, por ejemplo, un simple botón a nues- metro al método setOnClickListener. Cuando ocurra
tra aplicación, debemos ponerlo debajo del TextView, el evento Click, se ejecutará el método onClick del Lis‐
como se muestra en el listado 3. tener que hayamos suministrado.
Añadiendo lógica a nuestra aplicación • Debemos tener en cuenta para qué nivel de la API que-
remos programar, de forma de poder abarcar el mayor
A lo largo de todo el artículo hemos visto un montón mercado posible.
de cosas, pero hasta el momento no hemos hablado de • El manifiesto de la aplicación es el que indica todo lo
cómo programar nuestra aplicación. Como hemos dicho referente a ésta: qué expone, qué necesita, etc.
desde el primer momento, se programa con Java, y el • Los ficheros que necesite la aplicación deberán ser
código de nuestra aplicación, que está por defecto en la guardados en las carpetas de recursos.
carpeta src, tan solo contendrá el código de nuestro • El fichero R.java es el que sirve de puente entre los
Activity, como se puede ver en el listado 4. recursos y el código.
En el listado 4 se puede observar cómo nuestra acti- • Toda aplicación debe tener un Activity principal.
vidad deriva de Activity y lo que hace es sobrescribir el
método onCreate para definir, mediante el método set‐ Con esta introducción hemos querido abrir la puerta
ContentView, nuestra vista principal. Lo que se debe a una tecnología que ofrece una forma de programar un
pasar a este método es el id del recurso, que es auto- tanto extraña para los que leemos esta revista. Una vez
generado por Eclipse; por lo tanto, debemos usar el fiche- la puerta esté abierta, procuraremos en próximos artícu-
dotNetManía
ro R.java para obtener su valor. los abordar temas más específicos de la plataforma. t
41
/*ESTÁ EN TODAS PARTES*/
Empieza en VisualStudio.com