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-порт.