Estoy tratando de usar adb sobre 'wifi' para mi dispositivo emulado. Estoy emulando un dispositivo en mi computadora y quería usar Android Studio para enviarle un APK pero a través de los enchufes de red, no a través de USB emulado. Sé que en Android Studio todo funciona de manera inmediata, pero lo necesito de esta manera
Estoy siguiendo este tutorial: https://developer.android.com/studio/command-line/adb.html#wireless
empiezo con
~/Android/Sdk/emulator$ ./emulator -avd Pixel_XL_API_27
Luego 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 arbitrario Ni siquiera especifiqué qué dispositivo debería reiniciarse y conectarse en 5555. ¿Qué sucede si tengo 2 emuladores ejecutándose?
Debería desconectarme ahora para un dispositivo USB normal, pero luego voy a las opciones de desarrollador en mi teléfono emulado y deshabilito la depuración de USB.
También veo que la dirección IP en la configuración del sistema telefónico emulado es192.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 hice 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
ACTUALIZAR:
De acuerdo con el Tutorial de Android en ADB , mi computadora mantiene un servidor ejecutándose en el puerto 5037. El dispositivo Android (mi emulador en este caso) ejecuta un demonio y mi secuencia de comandos adb en Sdk/platform-tools es un cliente. Si quiero ejecutar un cliente dentro de mi máquina virtual, debo tener un servidor ejecutándose en él. Pero, en cambio, puedo reenviar el puerto TCP 5037 de la máquina virtual al puerto TCP 5037 de la máquina host. Lo hice con tcptunnel haciendo lo siguiente:
./tcptunnel --local-port=5037 --remote-host=192.168.122.1 --remote-port=5037 --stay-alive
luego, si ejecuto adb en mi VM, se conectará al demonio adb en mi máquina host que se comunicará con el servidor adb de mi emulador. Cuando ejecuto adb devices
la máquina virtual sin el reenvío de tcp, intenta iniciar un nuevo servidor. Si elimino 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, 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 la H
opción que me permite especificar la IP donde se ejecuta el servidor. Sin embargo, no sé si es posible especificarlo en Android Studio. 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
Olvidé que adb daemon se une a localhost
, y estaba tratando de acceder desde 192.168.122.x
.
Pude socat
redirigir el cliente ADB desde mi VM al demonio ADB en mi máquina host que se conectó con el servidor ADB (mi teléfono emulado).
Se podía acceder a mi máquina host 192.168.122.1
desde la máquina virtual, pero adb daemon
estaba vinculado a 127.0.0.1
o localhost
. Lo acabo de hacer:
#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úrese de eliminar el servidor adb en la máquina virtual haciendo /path/to/android/sdk/platform-tools/adb kill-server
. El servidor ADB siempre intenta vincularse 5037
si no hay nada allí, por lo que si socat ya se está ejecutando en ambos lados y adb server
se está ejecutando en la host
machie, cuando inicie Android Studio en la máquina virtual, se conectará automáticamente al servidor adb externo, que se conectará a su teléfono emulado.
No necesita Android Studio en la máquina virtual para probar. Simplemente puede hacerlo /path/to/android/sdk/platform-tools/adb devices
en la máquina virtual para ver si socat lo redirigirá al demonio adb en el host, que enumerará el teléfono emulado.
MAMÁ
Guerlando OC
MAMÁ
Guerlando OC
MAMÁ
Guerlando OC