Translate

lunes, 30 de abril de 2012

Chat entre emuladores Android

Hola Androides,

Segundas partes nunca fueron buenas, pero aquí solo hacemos primeras partes. En las soluciones presentadas en la sección de aplicaciones hay presentado un Chat para móbiles Android que utiliza una conexión Wifi establecida. El problema viene cuando intentamos probar esta aplicación con un solo dispositivo. En este caso necesitaremos emuladores que intervengan como dialogantes del chat de pruebas. Cada emulador o dispositivo virtual se encuentra aislado de la computadora mediante un router virtual que se encuentra en una red privada 10.0.2/24 de la máquina virutal. De este modo nuestros emuladores no pueden de forma directa hablarse entre sí. En el caso de nuestro Broadcast Chat en la sección de ejercicios el dispositivo real envía un broadcast (paquete con IP de destino e.g. 192.168.1.255) a nuestra WIFI, para que esta repita a todos los dispositivos. El problema es que nuestro emulador no tiene WIFI y la redirección de puertos está limitada ya que cada emulador debe hablar a un puerto distinto de nuestro Localhost. Como solucionamos esto? Veamos algunas cosas.

  •  La red del emulador tiene la siguiente arquitectura:
The virtual router for each instance manages the 10.0.2/24 network address space — all addresses managed by the router are in the form of 10.0.2., where is a number. Addresses within this space are pre-allocated by the emulator/router as follows:

Network AddressDescription
10.0.2.1Router/gateway address
10.0.2.2Special alias to your host loopback interface (i.e., 127.0.0.1 on your development machine)
10.0.2.3First DNS server
10.0.2.4 / 10.0.2.5 / 10.0.2.6Optional second, third and fourth DNS server (if any)
10.0.2.15The emulated device's own network/ethernet interface
127.0.0.1The emulated device's own loopback interface

  • JAVA nos da las máximas fácilidades para crear un servidor escuchando en un solo puerto a varios clientes(Emuladores) con Sockets conectados a nuestra máquina de desarrollo (10.0.2.2) 
La solución es un servidor que emulará la función que hace nuestra WIFI cuando hacemos un BroadCast. Les presento a Android Emulator Server que se compone de dos ficheros: Main.Java y ServerService.Java. Recordad que este Servidor debe correr en vuestra máquina de desarrollo como aplicación JAVA y no como Android Application. Bora entao:


Emuladores Android

Hola Androides,

El entorno de desarrollo AndroidSDK nos da herramientas para arrancar un emulador de un dispositvo móbil con Android. Esta utilidad nos salva a la hora de probar nuestras aplicaciones, ya que sin ella deberíamos tener un número elevado de dispositivos reales. Podemos configurar estos dispositivos virtuales ya sea desde cónsola (Linux/MAC) o desde el AVD Virtual Manager que nos aparece en Eclipse después de instalar el plugin ADT (Descargar en http://developer.android.com/index.html).

Una vez nuestra .apk esta lista la podemos instalar y probar en nuestros dispositivos reales conectados por USB o bien usando un emulador. Evidentemente, el emulador tiene una serie de limitaciones ya que no es un dispositivo real y no dispone de acelerómetros, GPS, Wifi. De todas máneras si dispone de Internet a través de un puenteado con nuestro Localhost. Algunas de las limitaciones pueden ser superadas gracias a los eventos que la perspectiva DDMS que nos permite lanzar al emulador: Llamadas, Mensajes, Eventos de Sensores, Eventos de teclado. Otras limitaciones no son tan obvias y en esta sección crearemos algunas herramientas JAVA para poder probar nuestras aplicaciones en dispositivos virtuales sin tener que comprar un nuevo Samsung Galaxy cada vez que queremos añadir un dispositivo en nuestro entorno de Test. Además aprenderemos mucho metiendónos en las tripas de Android y su SDK. Discutiré todo esto con ustedes y también postearé entradas de configuración de nuestro Linux, MAC o Windows para que el emulador soporte nuestra cámara o nuestro micrófono para testear aplicaciones tan complejas como queramos.






Saludos Androides, Espero que disfruten de este blog.