miércoles, 18 de julio de 2012

Android lucha contra la fragmentación


La API (Application programming interface) “Fragments” de Google es una herramienta para desarrolladores que sirve para adaptar las aplicaciones a pantallas de diferentes tamaños y resoluciones con mayor facilidad.
android_fragment
La compañía pretende luchar contra la fragmentación que la variedad de dispositivos y versiones de Android suponen para los programadores. Con ‘Android Compatibility Package’ los desarrolladores podrán adaptar contenidos desde Android 1,6 a cualquier versión.
El sistema operativo Android cuenta con una gran variedad de versiones, desde la 1,6 a la 3.0 para ‘tablets’. Cada versión cuenta con mejoras sobre las anteriores y tiene un código diferente. Este hecho hace que los desarrolladores de aplicaciones tengan dificultades para adaptar sus creaciones a todos los sistemas.
Además, la gran gama de modelos de terminales, con distintos tamaños de pantalla y características propias hace que los desarrolladores tengan que acotar el alcance de sus creaciones. Google pretende terminar con esta fragmentación.
La compañía ha anunciado en el blog para desarrolladores Android Developers la publicación de unas nuevas clases para adaptar contenidos entre versiones de su sistema. Con ‘Android Compatibility Package’ los programadores podrán crear un contenido y adaptarlo a las distintas versiones de Android y a los distintos terminales. Se trata de una biblioteca estática con distintos fragmentos de API que permitirán transformar los contenidos de manera más sencilla.
El proceso también se puede realizar a la inversa ( de la más nueva a la 1.6)  y da la posibilidad a los desarrolladores de llegar a más terminales y sistemas sin tener que reprogramar las características su aplicación.
Los desarrolladores que quieran probar el nuevo ‘Android Compatibility Package’ pueden descargarlo desde la página web Android Developers. Se encuentra dentro del último paquete de herramientas y SDK de Android.

martes, 17 de julio de 2012

Montar un entorno de programación para android con eclipse y Mac


En este artículo vamos a montar paso a paso un entorno de programación android bajo el framework eclipse y el sistema operativo Mac OS X Leopard de Apple.

Introducción

Android SDK incluye una completa variedad de herramientas a medida que le ayudarán en el desarrollo de aplicaciones móviles para la plataforma Android.
Entre las más importantes encontramos el Emulador de Android y el plugin que se integra con Eclipse, Android Development Tools, pero el SDK también incluye una variedad de herramientas para debugging, packaging, y instalar sus aplicaciones en el emulador.
A pesar de existir un plugin para Eclipse se puede continuar desarrollando con su editor favorito, ya que a través de línea de comando también se podrá crear, construir y hacer debug de cualquier proyecto Android.
Necesitaremos un framework en nuestro caso vamos a utiizar el eclipse  Galileo.

Descarga e instalación de Eclipse

  1. Visita la web de descargas de Eclipse, y descárgate la última versión.
Descarga de Eclipse
Descarga de Eclipse
  1. Descomprime el archivo en el lugar donde quieras instalarlo yo siempre recomiendo directamente en el raiz . Te creará un directorio eclipse.
  2. Entra en el directorio eclipse y ejecuta eclipse.exe para lanzar la aplicación. La primera vez que arranques, te pedirá que le indiques un directorio donde colocar tu espacio de trabajo (workspace). Selecciona la ruta que quieras, que es donde se guardarán tus proyectos. Marca la opción “Use this as the default…” para que no te vuelva a preguntar más.

Instalación SDK ( Pre-Requisitos)

SO soportados
* Windows XP (32-bit) o Vista (32- or 64-bit)
* Mac OS X 10.4.8 o posterior (x86 only)
* Linux (probado en Linux Ubuntu Hardy Heron) o 64-bit distros capaces de ejecutar aplicaciones de 32 bit.
Soporte para entornos de desarrollo
Eclipse IDE:
* Eclipse 3.4 (Ganymede) or 3.5 (Galileo)
* JDK 5 o JDK 6 (JRE no es suficiente)
*Android Development Tools plugin (opcional)
* Otros entornos de desarrollo o IDEs
* JDK 5 o JDK 6 (JRE no es suficiente)
* Apache Ant 1.6.5 o posterior para Linux y Mac, 1.7 o superior para Windows
* Not compatible with Gnu Compiler for Java (gcj)
Requisitos de Hardware
*Para el paquete base de SDK, mínimo 600MB de espacio, para cada plataforma instalada en el SDK son unos 100 MB necesarios.

Descarga e instalación de las Android Development Tools (ADT)

Descargar el paquete con el SDK apropiado a su sistema.
Descargar SDK Android
Descarga SDK Android
Descarga SDK Android
Descomprimimos el fichero en una localización adecuada, más adelante se va a necesitar el nombre y la ruta hasta el directorio si queremos configurar el plugin ADT de Eclipse.
  1. Dentro de Eclipse, selecciona Install New Software, en el menú Help. Aparecerá una nueva ventana.
  2. Haz click en  ADD en la pantalla Available Software en la parte superior derecha.
  3. En la ventana que aparece, introduce alguna de esta dirección   :https://dl-ssl.google.com/android/eclipse/
Instalación
Instalación
  1. Nos pedirá reiniciar el eclipse
  1. Una vez reiniciado, debemos configurar Eclipse para que acceda al SDK de Android ya instalado. Abre el menú Eclipse y selecciona Preferences. En el apartado Android, en SDK Location debemos introducir la ruta donde hemos descomprimido el SDK de Android
En windows >> Android SDK and AVD Manager podemos descargar actualizaciones, documentación y ejemplos

Ejecutar una aplicación Android de prueba

Ahora que ya tenemos el entorno de desarrollo listo, vamos a crear un proyecto Androidpara ver que todo funciona correctamente. Lo primero que tendremos que hacer es crear un dispositivo virtual Android o AVD (Android Virtual Device) en el que probar las aplicaciones que desarrollemos.
  1. Abrimos el menú Windows y seleccionamos Android AVD Manager.
  2. Introducimos el nombre que le queremos dar al dispositivo virtual, seleccionamos la versión de Android que usará (en este caso la 2.2) e introducimos el tamaño de la tarjeta de memoria SD que tendrá (128M nos servirá).En la pestaña Hardware podremos añadir opciones para el funcionamineto del mismo Clicamos en Create AVDy después en Finish.
Ya tenemos el entorno instalado y 100% operativo.

Herramientas del SDK

El SDK de Android incluye una serie de herramientas especificas para el desarrollo de aplicaciones móviles en la plataforma Android, siendo las más importantes el Android Emulator y el ADT de Eclipse.
Android Development Tools Plugin : añade extensiones potentes que permiten crear y hacer debug en nuestras aplicaciones rápidamente y con facilidad.
Android Emulator: emulador basado en QEMU que permite diseñar, crear y probar nuestras aplicaciones sin usar un dispositivo físico.
Android Virtual Devices (AVDs): son configuraciones especificas del emulador que te permiten modelar mejor el dispositivo actual. Se pueden configurar perfiles de hardware, la plataforma elegida, el tamaño de la memoria SD y otras opciones.
Hierarchy Viewer: permite probar y optimizar la interface de usuario. Proporciona una representación visual de las clases del layout y un editor ampliado de la visualización.
Layoutopt: herramienta de línea de comando que carga los ficheros XML especificados y analiza las estructuras y herencias del layout según una serie de reglas predefinidas.
Dalvik Debug Monitor – DDM: permite administrar los procesos que corren en una instancia de emulador/dispositivo demás de asistir en la depuración de ellos.
Android Debug Bridge – ADB: nos permite instalar aplicaciones (.pak) en una instancia del emulador y acceder a una instancia de emulador usando la línea de comandos.
Android Asset Packaging – AAPT: La herramienta “aapt” permite crear archivos “.apk”, los cuales contienen las imágenes binarias de tu código y recursos de tus aplicaciones.
Android Interface Description Language – AIDL: lenguaje IDL usado para generar código que permite a dos procesos en un dispositivo funcionando con Android hablar utilizando comunicación interproceso.
SQLite3: Esta herramienta ha sido incluida para comodidad de los desarrolladores.
Provee acceso a los archivos de datos “SQLite” creados y usados por las aplicaciones Android.
Traceview: Esta herramienta produce una vista gráfica del análisis de información contenida en bitácoras que puede ser generada desde una aplicación Android.
mksdcard: ayuda a crear una imagen de disco que se puede usar con el emulador, para simular la presencia de una tarjeta de almacenamiento externa (tal como una tarjeta “SD”).
dx : convierte los archivos de “bytecode” estándar (“.class”) en archivos “Android bytecode” (“.dex”).
Activitycreator : es un “script” que genera archivos “ant build” que se puede utilizar para compilar aplicaciones Android.

Arquitectura de una Aplicación

Existen 4 tipos de bloques de construcción de cualquier aplicación Android:
Componente de interface de usuario que corresponde normalmente a una pantalla.
BroadcastReceiver Usados para ejecutar código en reacción a unevento externo.
S ervices Es código que se ejecuta en segundo plano (in background).
Content Provider Este componente es usado para compartir datos entre diferentes aplicaciones (Persistencia).
No necesariamente necesitaremos cada uno de ellos en nuestra aplicación, pero si una combinación de algunos.
Activity
Es el componente mas genérico y más común de la plataforma.
Para hacer uso de ella, necesitamos que nuestra clase herede de la superclase Activity.
La principal función es la de mostrar elementos de UI que se implementan en una View, descritos en archivos XML, y que pueden reaccionar a los eventos del usuario.
Para pasar de un elemento Activity a otro se utiliza generalmente mediante el método startActivity() o el método startActivityForResult() cuando se necesita una llamada síncrona.
La navegación entre pantallas se lleva a cabo mediante una clase especial llamada Intent.
La estructura típica de un Intent es: la acción que desea realizar (la intención) y los datos sobre los que actúa.
Intent
A un Intent podemos asociarle una acción, unos datos y una categoría.
Las actividades pueden declarar el tipo de acciones que pueden llevar a cabo y los tipos de datos que pueden gestionar.
Las acciones son cadenas de texto estándar que describen lo que que la actividad puede hacer.
Esta acción viene predefinida en la clase Intent, pero es posible definir nuevas acciones para nuestras actividades.
La misma actividad puede declarar que el tipo de datos del que se ocupa es, por ejemplo, “vnd.android.cursor.dir/person”.
También puede declarar una categoría, que básicamente indica si la actividad va a ser lanzada desde el lanzador de aplicaciones, desde el menú de otra aplicación o directamente desde otra actividad.
 
Service
Comunmente conocido, como tal, un servicio es código que se ejecuta en segundo plano (in background) y no necesita de una interface de usuario en su ciclo de vida.
Si el ciclo de vida de una aplicación es prolongado, debe de incluirse en un Service. Conviene informarse de las prioridades que gestiona el sistema en cuanto al tiempo de vida de los componentes y la influencia del servicio en esta jerarquía de prioridades.
Los servicios se inician con el método startService(Intent) de la clase abstracta Context.
De nuevo se utiliza Intent para inciar un resultado desado en la plataforma.
BroadcastReceiver
Si una apliación desea recibir y repsonder a un evento global como por ejemplo una llamada de teléfono o un mensaje de texto entrante, debe registrarse como BroadcastReceiver. Existen dos técnicas:
1. La aplicación puede implementar un elemento <receiver> en el archivo AndroidManifest.xml. Si el receptor se registra en dicho archivo, no es necesario ejecutarlo para desencadenarlo. El propio SO de Android se encarga de estas tareas de mantenimiento.
2. Una aplicación se puede registrar en tiempo de ejecución a través del método registerReceiver de la clase Context.
Al igual que Service, no dispone de UI. El código que se ejecuta en el método inRecevie no debe asumir operaciones de persistencia o prolongadas.
ContentProvider
Si una aplicación gestiona datos y debe mostrarlos a otras aplicaciones ejecutadas en el entorno de Android, es necesario implementar ContentProvider.
Implementa un conjunto estándar de métodos para que la aplicación pueda acceder a un almacén de datos, ya sea en operaciones de lectura o escritura.
ContentProvider puede proporcionar datos a una actividad o a unservicio incluidos en la misma aplicación o en otra diferente.
Se puede considerar como una capa de datos que proporciona abstracción para sus clientes y centraliza las rutinas de almacenamiento y recuperación.
Suele ser componente de aplicaciones Android de mayor tamaño que alojan al menos un elemento Activity, Service y/o BroadcastReceiver.

Hello Android

Haremos el tipico programa de Hello para comprbar que todo el proceso de instalación ha sido correcto
Creamos un nuevo proyecto Android: File > New > Android Project. Introducimos los siguientes datos para el proyecto:
  • Project Name: HelloAndroid
  • Application name: Hello, Android
  • Package name: com.example.helloAndroid
  • Create activity: helloAndroid
  • min SDK version: 8
Una vez creado del proyecto vamos a ver la  estructura de un proyecto Android
1. Assets: En este directorio se pone cualquier tipo de fichero externo que sea necesario por la aplicación que se esté ejecutando. Por ejemplo: HTML para el navegador sin necesidad de conexión, tipografías, jars de terceros. Es un repositorio de archivos.
2. Bin: Los binarios compilados de la aplicación.
3. Res: Los recursos, formada por 3 direcotorios:
- Drawable: ficheros de imágenes.
- Layout: Ficheros de diseño de las interfaz de
usuario. Ficheros xml que describen las interfaces.
- Values: definición de variables. Ficheros xml en cada uno de ellos constantes, se agrupa por temática, es decir: definición de colores,definición de texto…
4. Gen: Se almacenan los archivos auto-generados por el compilador de Android. Contiene el archivo “R.java”, que es un índice a todos los recursos definidos en el proyecto.
5. Src: Aquí va todo el código Java de la aplicación.
6. .project, .classpath: ficheros necesarios para abrir el proyecto con Eclipse.
7. AndroidManifest.xml: es un archivo requerido para cada aplicación.
Describe los valores globales de su paquete, incluida la aplicación, componentes (actividades, servicios, etc), las clases para cada uno de los componentes, qué tipo de datos puede manejar cada uno, y donde puede ser lanzado.
Application
android:icon=”drawable resource” ? Se define el icono de la aplicación. Se mostrará cuando la instalación esté instalada en el dispositivo.
android:name=”string” ? A través de este atributo se declara el nombre de la aplicación, aparecerá debajo del icono al instalar.
android:theme=”resource or theme” ? Podemos crear un tema general y usar en toda la aplicación.
activity, service, provider… Cada Activity, Service o Content Provider que creamos en nuestra aplicación debe de estar aquí. En caso contrario, la aplicación no los va a reconocer.
Permissions
Dentro de la etiqueta <manifest> podemos añadir el nodo <users-permission>. Se utiliza para definir las partes a las que la aplicación necesita acceder y los permisos de los usuarios.
-Recibir SMS
-Capturar imágenes desde la cámara
-hacer llamadas
-Acceder a internet…
Cuando se instalan aplicaciones desde el Android Market, algunas tienen un listado de permisos, donde el usuario debe permitirlos o aceptarlos si se quiere instalar la aplicación en el dispositivo.
Version
La etiqueta <uses-sdk>, se define con que versión del SDK la aplicación fue creada, con lo que se puede definir una compatibilidad hacia versiones anteriores.
En nuestro ejemplo de Hello Android deberemos modificar nuestra clase helloAndroid
Y Aquí tenemos nuestro resultado

lunes, 16 de julio de 2012

Extender PhoneGap/Cordova creando un plugin

Después de jugar un rato con Cordova (antiguo PhoneGap), una de las cosas que más me ha gustado es lo fácil que es saltar del mundo HTML al mundo nativo utilizando los plugins que incluye Cordova o incluso creando tus propios plugins.

Arquitectura de PhoneGap/Cordova

OJO: Todo lo que voy a contar está basado en la versión para Android de Cordova. Supongo que, en líneas generales, será similar en el resto de versiones (iOS, BlackBerry, etc.).
La arquitectura global de Cordova es algo así:
Arquitectura de PhoneGap/Cordova
Arquitectura de PhoneGap/Cordova
Tenemos por una parte el mundo HTML y por otra el mundo nativo, cada uno con sus componentes. La única vía de comunicación entre ambos mundos es a través de Cordova. Cordova tiene 2 partes, una Javascript que reside en el mundo HTML y otra en Java (en el caso de Android) que reside en el mundo nativo.
Toda la funcionalidad existente en Cordova (GPS, acelerómetro, lista de contactos, …) está implementada como un plugin, con su parte Javascript y su parte nativa.
Podemos usar el mismo sistema que los plugins de Cordova para añadir nuevas funcionalidades. Para eso necesitaremos:
  • Crear la parte Javascript del plugin, que será el interface disponible para nuestra aplicación web.
  • Crear la parte nativa del plugin, que será invocada desde el código Javascript y contendrá la implementación de la funcionalidad.
Vamos a ver un ejemplo sencillo, creando un plugin que nos permita iniciar desde la página web la navegación a un destino usando Google Navigation o la aplicación que tenga el usuario registrado para ello.

Creando el interface en Javascript

El código que se necesita para crear el plugin en Javascript es el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var GoTo = function() {
};
 
GoTo.prototype.location = function(address, successCallback, failureCallback) {
    return PhoneGap.exec(
            successCallback,
            failureCallback,
            'GoTo',      // Nombre con el que está registrado el plugin Java
            'location'// Acción invocada
            [address]);
};
 
cordova.addConstructor(function() {
    cordova.addPlugin("goTo", new GoTo());
});
Sólo hay que crear un objeto con los métodos que queremos exponer, en este caso tenemos un objeto GoTo que expone un único método location que podremos invocar indicando la dirección a la queremos navegar y dos callbacks que serán invocadas de forma asíncrona cuando se complete la invocación, una para el caso de que todo funcione, successCallback, y otra por si hay algún problema, failureCallback.
La implementación del método usa PhoneGap para lanzar, a través de Cordova, la invocación de la parte nativa del plugin. Para pasar parámetros hacia la parte nativa usaremos un array que será serializado como JSON.
Por último, debemos añadir a cordova el plugin, lo que hacemos con el último fragmento de código:
1
2
3
cordova.addConstructor(function() {
    cordova.addPlugin("goTo", new GoTo());
});
Con esto se añade una propiedad goTo al objeto plugins y podremos usarlo fácilmente desde Javascript:
1
plugins.goTo.location("Plaza Mayor, Madrid, España");

Implementando la parte nativa

Para implementar la parte nativa habrá que usar el lenguaje nativo del dispositivo. En el caso de Android, esto implica escribir una clase Java, que en nuestro ejemplo tendrá el siguiente aspecto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class GoToPlugin extends Plugin {
    @Override
    public PluginResult execute(String action, JSONArray data, String callbackId) {
 
        try {
            Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("google.navigation:q=" + data.getString(0)));
            this.ctx.startActivity(i);
            return new PluginResult(Status.OK);
        }
        catch (Exception e) {
            System.err.println(e.getStackTrace());
            return new PluginResult(Status.ERROR);
        }
    }
}
Olvidemos por un momento la pésima gestión de errores del ejemplo y centrémonos en el plugin. La parte nativa de un plugin es una clase que extiende Plugin en cuyo método execute debemos implementar la funcionalidad del plugin.
Los parámetros de execute incluyen:
  • La acción a realizar. En este caso sólo tenemos una, location, pero podríamos tener varias y en el execute realizar distintas acciones en función del valor del parámetro.
  • Los parámetros de la acción, que recibimos encapsulados en un array JSON. En nuestro caso el array tiene un único elemento que es un String con la dirección a la que queremos dirigirnos.
  • El id de las callback asociadas a la invocación. En este ejemplo no lo utilizamos.
La implementación de la funcionalidad no tiene mucha historia si has programado algo para Android. Únicamente estamos definiendo un Intent para indicar que queremos navegar a una ubicación y dejamos al sistema que inicie ese Intent, con lo que buscará la aplicación asociada y la activará.
Para registrar el plugin en Cordova es necesario modificar el fichero /res/xml/plugins.xml del proyecto de Eclipse y añadir nuestro plugin:
1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<plugins>
    ...
    <plugin name="GoTo" value="koalite.cordova.GoToPlugin"/>
</plugins>
Es importante recordar que el nombre asignado al plugin en el fichero plugins.xml es el nombre que debemos usar luego desde Javascript al usar el método PhoneGap.exec(...).

Conclusiones

Cuando se desarrollan aplicaciones sobre plataformas no nativas es fundamental tener algún mecanismo para poder ejecutar código nativo y acceder a funcionalidades que no estén cubiertas por el framework que estás utilizando. Creedme, he padecido mucho con .NETCF y sé de lo que hablo. Llega un momento en que Platform Invoke se convierte en uno de tus mejores amigos.
En Cordova la creación de plugins para salir del mundo HTML+JS+CSS y llegar hasta el dispositivo físico es francamente sencillo y está muy bien resuelto, lo que da mucha tranquilidad. No hay nada peor que saber que la plataforma para la que estás desarrollando soporta algo pero tu lenguaje no, y con el sistema de plugins de Cordova es sencillo remediar esa situación cuando se presenta

domingo, 15 de julio de 2012

Montar un entorno de programación para android con eclipse en Windows



Introducción

Android SDK incluye una completa variedad de herramientas a medida que le ayudarán en el desarrollo de aplicaciones móviles para la plataforma Android. Entre las más importantes encontramos el Emulador de Android y el plugin que se integra con Eclipse, Android Development Tools, pero el SDK también incluye una variedad de herramientas para debugging, packaging, y instalar sus aplicaciones en el emulador. A pesar de existir un plugin para Eclipse se puede continuar desarrollando con su editor favorito, ya que a través de línea de comando también se podrá crear, construir y hacer debug de cualquier proyecto Android. Necesitaremos un framework en nuestro caso vamos a utiizar el eclipse  Galileo con windows de 32 bits.

Descarga e instalación de Eclipse

  1. Visita la web de descargas de Eclipse, y descárgate la última versión..
  1. Descomprime el archivo en el lugar donde quieras instalarlo yo siempre recomiendo directamente en el raiz . Te creará un directorio eclipse.
  2. Entra en el directorio eclipse y ejecuta eclipse.exe para lanzar la aplicación. La primera vez que arranques, te pedirá que le indiques un directorio donde colocar tu espacio de trabajo (workspace). Selecciona la ruta que quieras, que es donde se guardarán tus proyectos. Marca la opción “Use this as the default…” para que no te vuelva a preguntar más y pulsa OK.

Instalación SDK ( Pre-Requisitos)

SO soportados * Windows XP (32-bit) o Vista (32- or 64-bit) * Mac OS X 10.4.8 o posterior (x86 only) * Linux (probado en Linux Ubuntu Hardy Heron) o 64-bit distros capaces de ejecutar aplicaciones de 32 bit. Soporte para entornos de desarrollo Eclipse IDE: * Eclipse 3.4 (Ganymede) or 3.5 (Galileo) * JDK 5 o JDK 6 (JRE no es suficiente) *Android Development Tools plugin (opcional) * Otros entornos de desarrollo o IDEs * JDK 5 o JDK 6 (JRE no es suficiente) * Apache Ant 1.6.5 o posterior para Linux y Mac, 1.7 o superior para Windows * Not compatible with Gnu Compiler for Java (gcj) Requisitos de Hardware *Para el paquete base de SDK, mínimo 600MB de espacio, para cada plataforma instalada en el SDK son unos 100 MB necesarios.

Descarga e instalación de las Android Development Tools (ADT)

Descargar el paquete con el SDK apropiado a su sistema. Descargar SDK AndroidDescomprimimos el fichero en una localización adecuada, más adelante se va a necesitar el nombre y la ruta hasta el directorio si queremos configurar el plugin ADT de Eclipse. Para poder ejecutar nuestros desarrollos dentro del SDK debemosinstalar alguna de las versiones de Android disponibles. Para lanzar el SDK y gestor de emuladores android AVD Manager existen varias métodos: ·A través del comando <SDK>/android sin opciones. ·Si estamos en Eclipse + ADT seleccionamos Window >Android SDK and AVD Manager.
  1. Dentro de Eclipse, selecciona Install New Software, en el menú Help. Aparecerá una nueva ventana.
  2. Haz click en  ADD en la pantalla Available Software en la parte superior derecha.
  3. En la ventana que aparece, introduce alguna de esta dirección : https://dl-ssl.google.com/android/eclipse/
  1. Nos pedirá reiniciar
  1. Una vez reiniciado, debemos configurar Eclipse para que acceda al SDK de Android ya instalado. Abre el menú Window y selecciona Preferences. En el apartado Android, enSDK Location debemos introducir la ruta donde hemos descomprimido el SDK de Android
En windows >> Android SDK and AVD Manager podemos descargar actualizaciones, documentación y ejemplos

Ejecutar una aplicación Android de prueba

Ahora que ya tenemos el entorno de desarrollo listo, vamos a crear un proyecto Androidpara ver que todo funciona correctamente. Lo primero que tendremos que hacer es crear un dispositivo virtual Android o AVD (Android Virtual Device) en el que probar las aplicaciones que desarrollemos.
  1. Abrimos el menú Windows y seleccionamos Android AVD Manager.
  2. Introducimos el nombre que le queremos dar al dispositivo virtual, seleccionamos la versión de Android que usará (en este caso la 2.1) e introducimos el tamaño de la tarjeta de memoria SD que tendrá (128M nos servirá).En la pestaña Hardware podremos añadir opciones para el funcionamineto del mismo Clicamos en Create AVD y después en Finish.
Ya tenemos el entorno instalado y 100% operativo.

Herramientas del SDK

El SDK de Android incluye una serie de herramientas especificas para el desarrollo de aplicaciones móviles en la plataforma Android, siendo las más importantes el Android Emulator y el ADT de Eclipse.
Android Development Tools Plugin : añade extensiones potentes que permiten crear y hacer debug en nuestras aplicaciones rápidamente y con facilidad.
Android Emulator: emulador basado en QEMU que permite diseñar, crear y probar nuestras aplicaciones sin usar un dispositivo físico.
Android Virtual Devices (AVDs): son configuraciones especificas del emulador que te permiten modelar mejor el dispositivo actual. Se pueden configurar perfiles de hardware, la plataforma elegida, el tamaño de la memoria SD y otras opciones.
Hierarchy Viewer: permite probar y optimizar la interface de usuario. Proporciona una representación visual de las clases del layout y un editor ampliado de la visualización.
Layoutopt: herramienta de línea de comando que carga los ficheros XML especificados y analiza las estructuras y herencias del layout según una serie de reglas predefinidas.
Dalvik Debug Monitor – DDM: permite administrar los procesos que corren en una instancia de emulador/dispositivo demás de asistir en la depuración de ellos.
Android Debug Bridge – ADB: nos permite instalar aplicaciones (.pak) en una instancia del emulador y acceder a una instancia de emulador usando la línea de comandos.
Android Asset Packaging – AAPT: La herramienta “aapt” permite crear archivos “.apk”, los cuales contienen las imágenes binarias de tu código y recursos de tus aplicaciones.
Android Interface Description Language – AIDL: lenguaje IDL usado para generar código que permite a dos procesos en un dispositivo funcionando con Android hablar utilizando comunicación interproceso.
SQLite3: Esta herramienta ha sido incluida para comodidad de los desarrolladores. Provee acceso a los archivos de datos “SQLite” creados y usados por las aplicaciones Android.
Traceview: Esta herramienta produce una vista gráfica del análisis de información contenida en bitácoras que puede ser generada desde una aplicación Android.
mksdcard: ayuda a crear una imagen de disco que se puede usar con el emulador, para simular la presencia de una tarjeta de almacenamiento externa (tal como una tarjeta “SD”).
dx : convierte los archivos de “bytecode” estándar (“.class”) en archivos “Android bytecode” (“.dex”).
Activitycreator : es un “script” que genera archivos “ant build” que se puede utilizar para compilar aplicaciones Android.

Arquitectura de una Aplicación

Existen 4 tipos de bloques de construcción de cualquier aplicación Android: Componente de interface de usuario que corresponde normalmente a una pantalla. BroadcastReceiver Usados para ejecutar código en reacción a unevento externo. S ervices Es código que se ejecuta en segundo plano (in background). Content Provider Este componente es usado para compartir datos entre diferentes aplicaciones (Persistencia). No necesariamente necesitaremos cada uno de ellos en nuestra aplicación, pero si una combinación de algunos.
Activity Es el componente mas genérico y más común de la plataforma. Para hacer uso de ella, necesitamos que nuestra clase herede de la superclase Activity. La principal función es la de mostrar elementos de UI que se implementan en una View, descritos en archivos XML, y que pueden reaccionar a los eventos del usuario. Para pasar de un elemento Activity a otro se utiliza generalmente mediante el método startActivity() o el método startActivityForResult() cuando se necesita una llamada síncrona. La navegación entre pantallas se lleva a cabo mediante una clase especial llamada Intent. La estructura típica de un Intent es: la acción que desea realizar (la intención) y los datos sobre los que actúa.
Intent A un Intent podemos asociarle una acción, unos datos y una categoría. Las actividades pueden declarar el tipo de acciones que pueden llevar a cabo y los tipos de datos que pueden gestionar. Las acciones son cadenas de texto estándar que describen lo que que la actividad puede hacer. Esta acción viene predefinida en la clase Intent, pero es posible definir nuevas acciones para nuestras actividades. La misma actividad puede declarar que el tipo de datos del que se ocupa es, por ejemplo, “vnd.android.cursor.dir/person”. También puede declarar una categoría, que básicamente indica si la actividad va a ser lanzada desde el lanzador de aplicaciones, desde el menú de otra aplicación o directamente desde otra actividad.
 
Service Comunmente conocido, como tal, un servicio es código que se ejecuta en segundo plano (in background) y no necesita de una interface de usuario en su ciclo de vida. Si el ciclo de vida de una aplicación es prolongado, debe de incluirse en un Service. Conviene informarse de las prioridades que gestiona el sistema en cuanto al tiempo de vida de los componentes y la influencia del servicio en esta jerarquía de prioridades. Los servicios se inician con el método startService(Intent) de la clase abstracta Context. De nuevo se utiliza Intent para inciar un resultado desado en la plataforma.
BroadcastReceiver Si una apliación desea recibir y repsonder a un evento global como por ejemplo una llamada de teléfono o un mensaje de texto entrante, debe registrarse como BroadcastReceiver. Existen dos técnicas: 1. La aplicación puede implementar un elemento <receiver> en el archivo AndroidManifest.xml. Si el receptor se registra en dicho archivo, no es necesario ejecutarlo para desencadenarlo. El propio SO de Android se encarga de estas tareas de mantenimiento. 2. Una aplicación se puede registrar en tiempo de ejecución a través del método registerReceiver de la clase Context. Al igual que Service, no dispone de UI. El código que se ejecuta en el método inRecevie no debe asumir operaciones de persistencia o prolongadas.
ContentProvider Si una aplicación gestiona datos y debe mostrarlos a otras aplicaciones ejecutadas en el entorno de Android, es necesario implementar ContentProvider. Implementa un conjunto estándar de métodos para que la aplicación pueda acceder a un almacén de datos, ya sea en operaciones de lectura o escritura. ContentProvider puede proporcionar datos a una actividad o a unservicio incluidos en la misma aplicación o en otra diferente. Se puede considerar como una capa de datos que proporciona abstracción para sus clientes y centraliza las rutinas de almacenamiento y recuperación. Suele ser componente de aplicaciones Android de mayor tamaño que alojan al menos un elemento Activity, Service y/o BroadcastReceiver.

Hello Android

Haremos el tipico programa de Hello para comprbar que todo el proceso de instalación ha sido correcto Creamos un nuevo proyecto Android: File > New > Android Project. Introducimos los siguientes datos para el proyecto:
  • Project Name: HelloAndroid
  • Application name: Hello, Android
  • Package name: com.example.helloAndroid
  • Create activity: helloAndroid
  • min SDK version: 7
También podremos crear un Test de nuestra aplicaciónUna vez creado del proyecto vamos a ver la  estructura de un proyecto Android
1. Assets: En este directorio se pone cualquier tipo de fichero externo que sea necesario por la aplicación que se esté ejecutando. Por ejemplo: HTML para el navegador sin necesidad de conexión, tipografías, jars de terceros. Es un repositorio de archivos.
2. Bin: Los binarios compilados de la aplicación.
3. Res: Los recursos, formada por 3 direcotorios: – Drawable: ficheros de imágenes. – Layout: Ficheros de diseño de las interfaz de usuario. Ficheros xml que describen las interfaces. – Values: definición de variables. Ficheros xml en cada uno de ellos constantes, se agrupa por temática, es decir: definición de colores,definición de texto…
4. Gen: Se almacenan los archivos auto-generados por el compilador de Android. Contiene el archivo “R.java”, que es un índice a todos los recursos definidos en el proyecto.
5. Src: Aquí va todo el código Java de la aplicación.
6. .project, .classpath: ficheros necesarios para abrir el proyecto con Eclipse.
7. AndroidManifest.xml: es un archivo requerido para cada aplicación. Describe los valores globales de su paquete, incluida la aplicación, componentes (actividades, servicios, etc), las clases para cada uno de los componentes, qué tipo de datos puede manejar cada uno, y donde puede ser lanzado.Application android:icon=”drawable resource” ? Se define el icono de la aplicación. Se mostrará cuando la instalación esté instalada en el dispositivo. android:name=”string” ? A través de este atributo se declara el nombre de la aplicación, aparecerá debajo del icono al instalar. android:theme=”resource or theme” ? Podemos crear un tema general y usar en toda la aplicación. activity, service, provider… Cada Activity, Service o Content Provider que creamos en nuestra aplicación debe de estar aquí. En caso contrario, la aplicación no los va a reconocer.
Permissions Dentro de la etiqueta <manifest> podemos añadir el nodo <users-permission>. Se utiliza para definir las partes a las que la aplicación necesita acceder y los permisos de los usuarios. -Recibir SMS -Capturar imágenes desde la cámara -hacer llamadas -Acceder a internet… Cuando se instalan aplicaciones desde el Android Market, algunas tienen un listado de permisos, donde el usuario debe permitirlos o aceptarlos si se quiere instalar la aplicación en el dispositivo.
Version La etiqueta <uses-sdk>, se define con que versión del SDK la aplicación fue creada, con lo que se puede definir una compatibilidad hacia versiones anteriores. En nuestro ejemplo de Hello Android deberemos modificar nuestra clase helloAndroidY Aquí tenemos nuestro resultado

sábado, 14 de julio de 2012

features de Android 3.0, conocido como Honeycomb


Android 3.0, conocido como Honeycomb, debuto con Xoom, la tablet que Motorola presentó durante la feria CES de Las Vegas en el 2011.
Honeycomb
Honeycomb
Ese fue uno de los primeros momentos en que se vio a Android 3.0 funcionando Hoy los desarrolladores de Android decidieron dar a conocer las características definitivas del primer sistema operativo pensado 100% para tablets.
“Android 3.0 es una nueva versión de la plataforma optimizada especialmente para dispositivos con pantallas más grandes, particularmente tablets”, aseguran desde Google.

Barra de sistema para estatus global y notificaciones:
A través del sistema y en todas las apps, los usuarios tienen acceso rápido a las notificaciones, estatus del sistema y botones de navegación virtuales en la System Bar, abajo de la pantalla. Está siempre presente y cuenta con el nuevo modo “lights out” para cuando quieran ver un video en full-screen, por ejemplo.
Action Bar para controlar aplicaciones:
En todas las aplicaciones se podrá acceder a la Action Bar para acceder a “opciones contextuales, navegación, widgets y otros tipos de contenido”. Se encuentra en la parte superior de la pantalla y está siempre presente cuando se usa alguna aplicación.
Pantallas principales personalizables:
Android 3.0 Honeycomb cuenta con 5 pantallas principales que se pueden personalizar dando acceso a todas las partes del sistema. Cada una de las pantallas ofrece un grid grande que mantiene su lugar en todas las orientaciones. Los usuarios pueden seleccionar y manipular los widgets, accesos directos a aplicaciones y wallpaper usando un “modo visual dedicado de layout”. Cada pantalla principal ofrece un launcher para acceder a todas las aplicaciones instaladas así como una caja de búsqueda universal para apps, contactos, archivos multimedia, contenido web y demás.
Aplicaciones recientes para ver fácilmente la multitarea:
“Multitasking es una fortaleza clave de Android y es central para la experiencia de Android 3.0”, dicen en Google. Entonces, mientras los usuarios lanzan aplicaciones para manejar diferentes tareas, pueden usar la lista de “Aplicaciones Recientes” (Recent Apps) en la “Barra de Sistema” para ver las tareas que se están llevando a cabo y con rapidez saltar de una a otra aplicación.
Teclado rediseñado:
La intención es “que escribir sea más rápido y preciso en pantallas más grandes”. Por eso, las teclas tienen nueva forma y posición y agregaron nuevas teclas como “Tab”, que ayuda a la hora de llenar formularios, por ejemplo.
Mejoras en selección de texto y copiar/pegar:
Cuando están escribiendo o leyendo texto, la nueva interfaz de Android 3.0 permite que puedan seleccionar una palabra o frase al mantener presionado y arrastrar el par de flechas selectoras a la posición que quieran. Luego en la Action Bar pueden elegir si quieren copiar, compartir, pegar, hacer una búsqueda web, etc.
Nuevas opciones de conectividad:
Soporte para protocolo de transferencia de fotos y archivos multimedia que permite a los usuarios sincronizar instantáneamente sus archivos con una cámara o computadora mediante cable USB. También se podrán conectar teclados completos sobre USB o Bluetooth, lo cual abre el juego para cualquier tipo de accesorios. Mejoras en el WiFi que “reducirán el tiempo de escaneo a través de bandas y filtros”. Nuevo soporte para Bluetooth tethering.
Navegador:
El navegador de Android 3.0 Honeycomb incluye nuevas opciones, como múltiples pestañas, modo incógnito para navegación anónima y marcadores e historial ahora gestionados en una vista unificada. Los usuarios pueden elegir loguearse automáticamente a los sitios de Google en el navegador con su cuenta y sincronizar navegadores con Chrome. Nuevo soporte multitouch disponible para JavaScript y plugins. Mejoras en el zoom y overflow scrolling.
Cámara y galería:
Rediseñaron la aplicación de cámara para aprovechar las pantallas más grandes, con lo cual tendrán un acceso más rápido a las opciones de exposición, enfoque, flash, zoom, cámara frontal y demás. La aplicación de galería cuenta con modo pantalla completa con acceso simple a las vistas previas de otras fotos en la colección.
Contactos:
La aplicación cuenta con una nueva interfaz de dos paneles y Fast Scroll para organizar y encontrar los contactos más rápido. Nuevo formato de teléfonos internacionales mientras vamos tipeando basado en país y una librería de análisis de números internacionales. La información de contacto está presentada en una interfaz con estilo tarjeta.
Correo electrónico:
Con nueva interfaz de 2 paneles, permite seleccionar uno o más mensajes, luego ir a la Action Bar para elegir alguna opción como puede ser moverlos a alguna carpeta, por ejemplo. Se pueden sincronizar los archivos adjuntos para verlos luego y seguir los emails con un widget para las pantallas principales.

Vídeo Android 3.0 Preview


AdMob con Phonegap y Android

Vamos a añadir nuestro widget de anuncios, haciendo lo siguiente:
  1. Añadir import com.google.ads.*; a los imports
  2. Asegurarse de que los permisos en el manifest incluyen:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  3. Añadir la actividad de anuncios en el manifest:

    <activity
        android:name="com.google.ads.AdActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
  4. Cambiar el contenido de la actividad principal por:

    super.onCreate(savedInstanceState);
     
    // Cambiar PUBLISHER_ID por el nuestro
    AdView adView = new AdView(this, AdSize.BANNER, PUBLISHER_ID);
     
    LinearLayout layout = super.root;
    layout.addView(adView);
     
    // Para centrarlo en modo apaisado
    layout.setHorizontalGravity(android.view.Gravity.CENTER_HORIZONTAL);
     
    adView.loadAd(new AdRequest());
Con esto, además de aprender a hacer nuestras aplicaciones con PhoneGap, podremos monetizarlas. Ahora queda ponerse con lo interesante: ver qué nos permite el SDK de PhoneGap.

Para hacer persistencia de datos Phonegap nos dá varios métodos, pero para empezar nosotros usaremos el LocalStorage del nuevo HTML 5, un método perfectamente soportado por los navegadores de los sistemas operativos móviles más usados.
El proceso es sencillo, y se detalla en ésta pequeña web, totalmente autoexplicativa:


    Testeos
 
<script type="text/javascript">// <![CDATA[
        function supports_html5_storage()
        {
            try
            {
                return 'localStorage' in window && window['localStorage'] !== null;
            }
            catch (e)
            {
                return false;
            }
        }
 
        // Prueba de lectura y escritura
        function numCargas()
        {
            var obj = document.getElementById('veces');
 
            if(supports_html5_storage())
            {
                // Leemos el contador actual
                var num = localStorage.getItem("numCargas");
 
                if(num == null) num = 0;
                else
                {
                    num = parseInt(num);
                    if(num == 'NaN') num = 0;
                }
 
                // Incrementamos y guardamos de nuevo
                localStorage.setItem("numCargas", num+1);
 
                // Establecemos el número
                obj.innerHTML = num;
            }
            else obj.innerHTML = '<span style="color: red;">ERROR</span>';
        }
 
        // Prueba de lectura y escritura
        function resetearNumCargas()
        {      
            var obj = document.getElementById('veces');
 
            if(supports_html5_storage())
            {
                // Reseteamos
                localStorage.setItem("numCargas", 0);
                obj.innerHTML = 0;
            }
            else obj.innerHTML = '<span style="color: red;">ERROR</span>';
        }
 
// ]]></script></pre>
<h1 style="margin: 0px; padding: 0px;">Testeos</h1>
<pre></pre>
 
<hr />
 
<pre></pre>
<h2 style="margin: 0px; padding: 0px;">Almacenamiento</h2>
<pre>
 La página se ha cargado <span id="veces"><script type="text/javascript">// <![CDATA[
numCargas();
// ]]></script></span> veces.
 
 
 <a href="javascript: location.reload();">Actualiza</a> o
 <a href="javascript: resetearNumCargas();">resetea</a> la cuenta.
 
 
 <a href="http://diveintohtml5.info/storage.html" target="new">HTML5 Local Storage</a>
 
</pre>
 
<hr />
 
<pre>
 
 <a href="http://androide.hijodeblog.com" target="new">Diario de un Androide</a>
Podremos probar el almacenamiento persistente en nuestra aplicación Phonegap añadiendo un nuevo archivo HTML a nuestro directorio assets/www o modificando el archivo index.html que hemos creado en las lecciones anteriores.