Android - ошибка adb tcpip
Я хочу подключиться к устройству Android с помощью adb
по сети. Я знаком с Как подключиться к Android с ADB через TCP? и https://developer.android.com/guide/topics/usb/index.html и следуйте рекомендациям. В частности, я сделал следующее:
# adb kill-server
# adb tcpip 5555
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting in TCP mode port: 5555
# adb connect 192.168.1.101:5555
unable to connect to 192.168.1.101:5555:5555
Из-за последней ошибки я также попробовал
# adb connect 192.168.1.101
unable to connect to 192.168.1.101:5555
Я также попытался перезапустить само устройство, но это не помогло.
Любая причина, по которой это не работает?
Обновление: Чтобы устранить все сомнения, я уверен, что это внутренний IP-адрес моего устройства.
Ответы
Ответ 1
У меня была такая же проблема с моим неуправляемым устройством. И вопреки распространенному мнению кажется, что adb tcpip <port>
требует либо эмулятора, либо отладочной сборки, либо привилегий root; по крайней мере, в соответствии с исходным кодом.
master branch: https://github.com/android/platform_system_core/blob/master/adb/adb.c#L898 посмотреть should_drop_privileges
, который предотвращает https://github.com/android/platform_system_core/blob/master/adb/adb.c#L966 adb_main
, чтобы открыть соединение сокетов TCP/IP.
В старых ветвях логика для идентификации привилегий adbd
находилась в adb_main
. См.: https://github.com/android/platform_system_core/blob/froyo-release/adb/adb.c#L860
Итак, чтобы еще раз доказать, что adbd
не войдет в режим TCP/IP (даже если adb tcpip
не выдаст никаких ошибок), посмотрите на следующее:
adb shell getprop | grep 'ro.secure\|debuggable\|qemu'
, вывод для моего устройства:
[ro.secure]: [1]
[ro.debuggable]: [0]
Это не соответствует условиям получения значения secure
0 в adbd
, так как я не запускаю эмулятор (который по умолчанию требует TCP/IP), я не запускаю отлаживаемой сборки Android, и я не root.
Кроме того, если вы выполните команду adb shell netstat
, вы увидите, что никто не прослушивает порт 5037 или 5555 или что-то еще, что вы предоставили команде tcpip
, как ожидалось, из adbd
, работающего в режиме TCP/IP.
Надеюсь, это поможет, удачи!
Ответ 2
Возможность перезапуска adbd с использованием транспорта tcpip может варьироваться от устройства к устройству. Не зная точно, какое устройство вы используете, очень сложно узнать точную причину.
Я протестировал "adb tcpip 5555" на Galaxy Nexus (takju), работающем 4.2.1, и нашел, что он работает. Я также тестировал пару других устройств, и они не работали.
Мне удалось заставить его работать с использованием корневого доступа на Motorola Droid 3. Обратите внимание, что ro.secure = 1 и ro.debuggable = 0 все еще. Я просто вручную установил service.adb.tcp.port "на" 5555 "как таковой:
devbox:~/droid3$ adb shell
[email protected]_solana:/$ getprop | grep 'ro.secure\|debuggable\|qemu'
[ro.secure]: [1]
[ro.debuggable]: [0]
[email protected]_solana:/$ su -c 'setprop service.adb.tcp.port 5555'
[email protected]_solana:/$ exit
devbox:~/droid3$ adb tcpip 5555
restarting in TCP mode port: 5555
devbox:~/droid3$ adb connect 172.16.0.14
connected to 172.16.0.14:5555
devbox:~/droid3$ adb -s 172.16.0.14:5555 shell
[email protected]_solana:/$
Хотя я указал 5555 при запуске "adb tcpip", он игнорируется устройством. Кажется, что это конкретное устройство не имеет необходимого доступа для установки свойства "service.adb.tcp.port" без root.
Аналогично, вы можете вернуться к USB как таковой:
[email protected]_solana:/$ getprop | grep adb
[persist.service.adb.enable]: [1]
[ro.sys.atvc_allow_all_adb]: [0]
[persist.adb.tcp.port]: []
[init.svc.adbd]: [running]
[service.adb.tcp.port]: [5555]
[email protected]_solana:/$ su -c 'setprop service.adb.tcp.port ""'
[email protected]_solana:/$ exit
devbox:~/droid3$ adb -s 172.16.0.14:5555 usb
restarting in USB mode
devbox:~/droid3$ adb shell
[email protected]_solana:/$
Причины, по которым это может не работать на других устройствах, различаются.
В тестируемом Galaxy Nexus, пользователь оболочки может установить свойство "service.adb.tcp.port". Неясно, почему это отличается в это время.
Интересно, что droid3 не будет продолжать прослушивать USB, если вы включите TCPIP. Однако Galaxy Nexus будет.
Надеюсь, что это поможет.
PS. См. Также: Как подключиться к Android с ADB через TCP?
Ответ 3
Я также встречал тот же сценарий, что и ваша, настройка TCPIP, но adb connet не удалось. Я, наконец, нашел это своей сетевой проблемой, пинг также потерпел неудачу под этим сценарием.
После того, как я сделал ping-работы, работает adb-соединение. Итак, мое предложение - проверить сетевую среду.
Ответ 4
Привет, я знаю, что это старый вопрос, но у меня была такая же проблема. Я не уверен, что это тот же случай для вас, но проблема для меня заключалась в том, что я подключил свое устройство Android через USB-расширение, как только я подключил устройство Android непосредственно к USB-порту в своем MAC-интерфейсе.
Просто проясните попытку подключения Android-устройства непосредственно к компьютеру или попробуйте переключить USB-порт.