Я пытаюсь использовать adb через «wifi» для своего эмулируемого устройства. Я эмулирую устройство на своем компьютере и хотел использовать Android Studio для отправки на него APK, но через сетевые сокеты, а не через эмулированный USB. Я знаю, что в Android Studio все работает из коробки, но мне нужно, чтобы это было так
Я следую этому руководству: https://developer.android.com/studio/command-line/adb.html#wireless
я начинаю с
~/Android/Sdk/emulator$ ./emulator -avd Pixel_XL_API_27
Потом вижу, что отладка по USB включена. тогда я делаю
./adb tcpip 5555
restarting in TCP mode port: 5555
Обратите внимание, что . /adb tcpip 5555
является произвольным. Я даже не указал, какое устройство должно перезагружаться и подключаться на 5555. Что, если бы у меня было запущено 2 эмулятора?
Сейчас я должен отключить обычное USB-устройство, но затем я перехожу к параметрам разработчика в своем эмулируемом телефоне и отключаю отладку по USB.
Я также вижу, что IP-адрес в настройках системы эмулируемого телефона192.168.232.2
то я получаю:
./adb connect 192.168.232.2
unable to connect to 192.168.232.2:5555: Connection timed out
Я также сделал это:
./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
ОБНОВИТЬ:
Согласно Android Tutorial on ADB , мой компьютер поддерживает работу сервера на порту 5037. Устройство Android (в данном случае мой эмулятор) запускает демон, а мой сценарий adb в Sdk/platform-tools является клиентом. Если я хочу запустить клиент внутри своей виртуальной машины, на ней должен быть запущен сервер. Но вместо этого я могу просто перенаправить TCP-порт 5037 с виртуальной машины на TCP-порт 5037 хост-машины. Я сделал это с помощью tcptunnel , выполнив следующие действия:
./tcptunnel --local-port=5037 --remote-host=192.168.122.1 --remote-port=5037 --stay-alive
затем, если я запущу adb на своей виртуальной машине, он подключится к демону adb на моем хост-компьютере, который будет взаимодействовать с сервером adb моего эмулятора. Когда я запускаю adb devices
виртуальную машину без пересылки tcp, она пытается запустить новый сервер. Если я убью этот сервер, открою tcpforwarded и сделаю это снова, он не будет пытаться создать новый сервер. Это хороший сигнал. Однако tcptunnel дает мне это:
build_tunnel: connect(): Connection refused
Что-то блокирует соединение
ОБНОВЛЕНИЕ 2:
Оказывается, tcptunnel не нужен, потому что adb
у него есть H
опция, которая позволяет мне указать IP-адрес, на котором работает сервер. Однако я не знаю, возможно ли это указать в Android Studio. В любом случае:
./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
Я забыл, что демон adb привязан к localhost
, и я пытался получить доступ из 192.168.122.x
.
Благодаря socat
этому я смог перенаправить клиента ADB с моей виртуальной машины на демон ADB на моем хост-компьютере, который установил соединение с сервером ADB (мой эмулируемый телефон).
Мой хост-компьютер был доступен 192.168.122.1
с виртуальной машины, но adb daemon
был привязан к 127.0.0.1
или localhost
. Я только что сделал:
#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
Убедитесь, что вы убили сервер adb на виртуальной машине, выполняющей /path/to/android/sdk/platform-tools/adb kill-server
. Сервер ADB всегда пытается подключиться, 5037
если там ничего нет, поэтому, если socat уже работает с обеих сторон, а adb server
на host
машине работает, когда вы запускаете студию Android на виртуальной машине, она автоматически подключается к внешнему серверу adb, который подключится к вашему эмулируемому телефону.
Вам не нужна Android Studio на виртуальной машине для тестирования. Вы можете просто сделать это /path/to/android/sdk/platform-tools/adb devices
на виртуальной машине, чтобы увидеть, перенаправит ли socat его демону adb на хосте, который отобразит список эмулируемых телефонов.
Массачусетс
Герландо ОС
Массачусетс
Герландо ОС
Массачусетс
Герландо ОС