5 votos

Cómo hacer ADB sobre 'wifi' (en realidad en el mismo PC) para el dispositivo emulado

Estoy tratando de usar adb sobre 'wifi' para mi dispositivo emulado. Estoy emulando un dispositivo en mi ordenador y quería usar Android Studio para enviarle un APK pero a través de las tomas de red, no a través del USB emulado. Sé que en Android Studio todo funciona de forma inmediata pero necesito hacerlo de esta forma

Estoy siguiendo este tutorial: https://developer.Android.com/studio/command-line/adb.html#wireless

Lo empiezo con

~/Android/Sdk/emulator$ ./emulator -avd Pixel_XL_API_27

Entonces veo que la depuración USB está activada. Entonces hago

./adb tcpip 5555
restarting in TCP mode port: 5555

Tenga en cuenta que . /adb tcpip 5555 es arbitraria. Ni siquiera he especificado qué dispositivo debe reiniciarse y conectarse al 5555. ¿Qué pasa si tengo 2 emuladores funcionando?

Debería desconectar ahora para un dispositivo USB normal, pero entonces voy a las opciones de desarrollador en mi teléfono emulado y desactivo la depuración USB.

También veo que la dirección IP en la configuración del sistema telefónico emulado es 192.168.232.2

entonces termino con:

./adb connect 192.168.232.2
unable to connect to 192.168.232.2:5555: Connection timed out

También he hecho esto:

./adb devices 
List of devices attached
emulator-5554   device

./adb connect 192.168.232.2:5554
unable to connect to 192.168.232.2:5554: Connection timed out

ACTUALIZACIÓN:

Según Tutorial de Android sobre ADB Mi ordenador mantiene un servidor funcionando en el puerto 5037. El dispositivo Android (mi emulador en este caso) ejecuta un demonio y mi adb script en Sdk/platform-tools es un cliente. Si quiero ejecutar un cliente dentro de mi máquina virtual debo tener un servidor corriendo en ella. Pero en cambio puedo simplemente reenviar el puerto TCP 5037 de la VM al puerto TCP 5037 de la máquina anfitriona. Lo hice con tcptunnel haciendo lo siguiente:

./tcptunnel --local-port=5037 --remote-host=192.168.122.1 --remote-port=5037 --stay-alive

entonces si ejecuto adb en mi VM, se va a conectar con el demonio adb en mi máquina anfitriona que va a hablar con el servidor adb de mi emulador. Cuando ejecute adb devices en la VM sin el forward tcp intenta iniciar un nuevo servidor. Si mato este servidor y abro el tcpforwarded y lo vuelvo a hacer, no intenta crear un nuevo servidor. Esta es una buena señal. Sin embargo, el tcptunnel me da esto:

build_tunnel: connect(): Connection refused

Algo está bloqueando la conexión

ACTUALIZACIÓN 2:

Resulta que tcptunnel no es necesario, porque adb tiene el H que me permite especificar la IP donde se ejecuta el servidor. Sin embargo no sé si es posible en Android Studio especificarla. De todos modos:

./adb -H 192.168.122.1 devices
List of devices attached
* cannot start server on remote host
error: cannot connect to daemon at tcp:192.168.122.1:5037: Connection refused

3voto

Guerlando OCs Puntos 6

Olvidé que el demonio adb se vincula a localhost y estaba intentando acceder desde 192.168.122.x .

Con socat Pude redirigir el cliente ADB de mi VM al demonio ADB en mi máquina anfitriona que hizo la conexión con el servidor ADB (mi teléfono emulado).

Mi máquina anfitriona era accesible en 192.168.122.1 de la máquina virtual, pero el adb daemon era vinculante para 127.0.0.1 o localhost . Acabo de hacerlo:

#on host machine:
socat tcp-listen:5037,bind=192.168.122.1,reuseaddr,fork tcp:localhost:5037

#on virtual machine:
socat tcp-listen:5037,bind=localhost,reuseaddr,fork tcp:192.168.122.1:5037

Asegúrate de matar el servidor adb en la máquina virtual haciendo /path/to/android/sdk/platform-tools/adb kill-server . El servidor ADB siempre intenta enlazar en 5037 si no hay nada allí, así que si socat ya está funcionando en ambos lados y el adb server se está ejecutando en el host machie, cuando inicies Android studio en la VM, se conectará automáticamente al servidor adb externo, que se conectará a tu teléfono emulado.

No es necesario tener Android Studio en la máquina virtual para hacer pruebas. Puedes simplemente hacer /path/to/android/sdk/platform-tools/adb devices en la máquina virtual para ver si socat lo redirige al demonio adb en el host, que listará el teléfono emulado.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X