Para probar aplicaciones que implican interacciones entre varios dispositivos, puedes conectar varias instancias de Android Emulator para que se comuniquen entre sí. El método para establecer una conexión depende de la versión del emulador que uses.
Versión 36.5 y posteriores de Android Emulator
La versión 36.5 y las versiones posteriores de Android Emulator ofrecen un modelo de redes simplificado que conecta instancias a través de una red Wi-Fi compartida.
Con esta pila de redes, varios emuladores aparecen como dispositivos distintos en la misma red Wi-Fi virtual. Esto les permite descubrirse y comunicarse entre sí automáticamente con protocolos estándar basados en Wi-Fi.
Los emuladores pueden encontrarse en la red virtual con tecnologías como Network Service Discovery (NSD) y Wi-Fi Direct.
Como los emuladores están en la misma red Wi-Fi, también puedes encontrar la dirección IP específica de un emulador y conectarte a él directamente desde otra instancia del emulador. Para obtener la dirección IP de la interfaz de Wi-Fi virtual (wlan0), ejecuta el siguiente comando desde tu máquina host:
adb shell ip addr show wlan0
Android Emulator anterior a la versión 36.5
Si usas una versión anterior del emulador de Android, la comunicación directa entre instancias no es posible de forma predeterminada. Cada instancia del emulador opera detrás de su propio router virtual, lo que la aísla de la red local y de otros emuladores.
Para habilitar la comunicación, debes configurar el redireccionamiento de red de forma manual. Este proceso implica crear una asignación que reenvíe el tráfico desde un puerto específico de tu máquina host a un puerto del dispositivo emulado, lo que omite el router virtual.
Puedes configurar el redireccionamiento de red de dos maneras:
- Comandos de la consola del emulador: Usa la consola integrada para configurar la asignación de puertos para la instancia del emulador en ejecución.
- Android Debug Bridge (adb): Usa comandos de adb para configurar las reglas de reenvío de puertos necesarias.
Cómo configurar el redireccionamiento con la consola del emulador
Cada instancia del emulador proporciona una consola de control a la que puedes conectarte para emitir comandos específicos a esa instancia. Usa el comando redir de la consola para configurar el redireccionamiento según sea necesario para una instancia del emulador.
Primero, determina el número de puerto de la consola para la instancia del emulador de destino. Por ejemplo, el número de puerto de la consola para la primera instancia del emulador que se inició es 5554. Luego, conéctate a la consola de la instancia del emulador de destino y especifica el número de puerto de la siguiente manera:
telnet localhost 5554
Una vez conectado, debes autenticarte antes de poder configurar el redireccionamiento. Consulta Cómo iniciar y detener una sesión de la consola para obtener detalles sobre cómo hacerlo. Una vez que hayas completado la autenticación, usa el comando redir para trabajar con el redireccionamiento.
Para agregar un redireccionamiento, usa el siguiente comando:
redir add <protocol>:<host-port>:<guest-port>
Donde <protocol> puede ser tcp o udp, y <host-port> y <guest-
port> establecen la asignación entre tu máquina y el sistema emulado.
Por ejemplo, el siguiente comando configura un redireccionamiento que controla todas las conexiones TCP entrantes a tu máquina host (de desarrollo) en 127.0.0.1:5000 y las pasa al sistema emulado en 10.0.2.15:6000:
redir add tcp:5000:6000
Para borrar un redireccionamiento, usa el comando redir del. Para enumerar todos los redireccionamientos de una instancia específica, usa redir list. Para obtener más información sobre estos y otros comandos de la consola, consulta Cómo enviar comandos de la consola del emulador.
Los números de puerto están restringidos por tu entorno local. En general, esto significa que no puedes usar números de puerto de host inferiores a 1024 sin privilegios especiales de administrador. Además, no podrás configurar un redireccionamiento para un puerto de host que ya esté usando otro proceso de tu máquina. En ese caso, redir genera un mensaje de error a tal efecto.
Cómo configurar el redireccionamiento con adb
La herramienta Android Debug Bridge (adb) proporciona redirección de puertos, una forma alternativa para configurar el redireccionamiento de red. Para obtener más información, consulta Cómo configurar la redirección de puertos en la documentación de adb.
Por el momento, adb no ofrece una manera de quitar un redireccionamiento, excepto si detienes el servidor de adb.
Cómo interconectar instancias del emulador
Para permitir que una instancia del emulador se comunique con otra, configura el redireccionamiento de red como se describe en los siguientes pasos.
Supongamos que tu entorno es el siguiente:
- A es tu máquina de desarrollo.
- B es tu primera instancia de emulador que se ejecuta en A.
- C es tu segunda instancia de emulador que también se ejecuta en A.
Si deseas ejecutar un servidor en B al que se conectará C, configúralo de la siguiente manera:
- Configura el servidor en B y que reciba
10.0.2.15:<serverPort>. - En la consola B, configura un redireccionamiento de A:
localhost:<localPort>a B:10.0.2.15:<serverPort>. - En C, conecta el cliente a
10.0.2.2:<localPort>.
Por ejemplo, si deseas ejecutar un servidor HTTP, selecciona <serverPort> como 80 y <localPort> como 8080:
- B escucha en
10.0.2.15:80. - En la consola B, emite
redir add tcp:8080:80. - C se conecta a
10.0.2.2:8080.