Использование локального устройства ADB на устройстве (loopback) показывает отсутствие устройств

Я пытаюсь использовать ADB на самом устройстве Android, поэтому без какого-либо хост-компьютера. Это работало отлично пару дней назад, но оно внезапно прекратило работать. Насколько я знаю, с тех пор ничего не изменилось (например, никаких приложений (un) не установлено). Я мог бы использовать adb backup -f /sdcard/backup.ab <package-name> в эмуляторе терминала, и он начнет резервное копирование этого пакета. Когда я попробую это сейчас, он возвращает adb: unable to connect for backup. Расследование с помощью adb devices возвращает пустой список. Я никогда не потрудился проверять устройства ранее, я просто пошел прямо к команде adb, потому что все работало.

Это было на HTC Desire под управлением Android 4.4.2, ADB версии 1.0.31. Использование ADB с моего ПК с этим телефоном работает отлично, но это не то, что я хочу.

Что я пробовал

  • Я попытался выполнить те же действия на разных устройствах (Asus PadFone 2 на 4.4.2, Samsung Galaxy Note GT-N7000 на 4.4.2, Sony Xperia S на 4.1.2.), но adb devices возвращает пустой список на всех из них. Я начинаю удивляться, почему это сработало на моем HTC Desire в первую очередь.
  • Поиск Google и переполнение стека, но большинство (если не все) результатов относятся к проблеме с драйвером или к любой другой проблеме, связанной с главным компьютером.
  • adb kill-server + adb start-server примерно в сто раз, а также stop adbd + start adbd.
  • Включение и отключение "Отладки USB" в настройках, а также отмена доступа к ранее авторизованным компьютерам. (Однако в рабочей ситуации я никогда не получал приглашения на проверку ключей RSA.)
  • adb -a devices → пустой список.
  • adb usberror: device not found.
  • Попытка перезапустить adb (d) в режиме TCP не увенчалась успехом (хотя это не было необходимо в рабочей ситуации). adb tcpip 5555 возвращает error: device not found.
  • getprop не возвращает ни одной записи с именем service.adb.tcp.port и setprop service.adb.tcp.port 5555 не работает. (Проверка после использования getprop service.adb.tcp.port ничего не возвращает. Не нужно ли этому root?)
  • adb connect localhost возвращает unable to connect to localhost:5555.
  • Когда демон запускается, он начинается с порта 5038 (при использовании ADB с моего ПК он начинается с 5037). adb connect localhost:5038 возвращает connected to localhost:5038. Однако adb devices по-прежнему возвращает пустой список, а adb backup возвращает adb: unable to connect for backup. Кроме того, adb shell возвращает error: device not found и adb get-state возвращает unknown. Таким образом, никакого успеха здесь тоже нет.
  • Поиск моего локального ip с помощью getprop dhcp.wlan0.ipaddress (возвращает 192.168.1.xx), а затем adb connect 192.168.1.xx возвращает unable to connect to :5555. adb connect 192.168.1.xx:5038unable to connect to :5038. Использование ADBHOST=192.168.1.xx adb start-server не влияет на эти результаты.
  • Один из немногих результатов поиска, который был фактически уместен, - это этот поток в AOSP Issue Tracker. Тем не менее, он описывает проблему, когда после использования setprop service.adb.tcp.port 5555, adb devices по крайней мере показывает устройство, однако автономное (а именно localhost:5555 offline). Несколько ближе к концу потока достигается решение, которое включает в себя изменение каталога $HOME, чтобы изменить, где сохраняются ключи RSA, например. HOME=/sdcard. Затем необходимо добавить открытый ключ к /data/misc/adb/adb _keys, используя cat /sdcard/.android/adbkey.pub >> /data/misc/adb/adb_keys. Однако, я полагаю, это требует корней? Кроме того, все это не было необходимо в рабочей ситуации, поэтому я сомневаюсь, что решение моей проблемы должно быть найдено в этом направлении. В этой статье, полученной из потока в AOSP Issue Tracker, не говорится о добавлении открытого ключа. Однако упомянутый подход не увенчался успехом.
  • netstat возвращает (среди прочих):

    • Proto: tcp
    • Recv-Q: 0
    • Send-Q: 0
    • Local Address: 127.0.0.1:5038
    • Foreign Address: 0.0.0.0:*
    • State: LISTEN
  • ps показывает процесс /sbin/adbd, а также процесс adb:

    • USER: shell PID: 92 PPID: 1 VSIZE: 3624 RSS: 264 WCHAN: ffffffff ПК: 00000000 S ИМЯ:/sbin/adbd
    • USER: u0_a57 PID: 9754 PPID: 1 VSIZE: 3016 RSS: 988 WCHAN: ffffffff ПК: 4014f768 S ИМЯ: adb
    • (Команды, выполняемые с терминала, выполняются как USER: u0_a57.)

Я думаю, что в значительной степени это.

Я ищу решение, в котором не нужен корень, поскольку он не нужен, когда я работал раньше. Надеюсь, моя ситуация и вопрос ясны. Пожалуйста, дайте мне знать, если мой вопрос нуждается в улучшении, так как это моя первая публикация на Stack Overflow. Надеюсь, кто-то может мне помочь. Заранее спасибо!

Ответ 1

Я считаю, что ваше устройство, возможно, перезагрузилось. Чтобы изначально получить ваш телефон в tcp, вы должны были запустить adb tcpip 5555 с компьютера. Но это не длится вечно. Если ваш телефон перезагрузится, вам придется снова запустить adb tcpip 5555 с компьютера.

Я не уверен, что вы имели в виду, когда говорили:

Попытка перезапустить adb (d) в режиме TCP не увенчалась успехом (хотя это не было необходимо в рабочей ситуации). adb tcpip 5555 возвращает ошибку: устройство не найдено.

Вы запустили это с компьютера? Если это было с компьютера, то я не уверен, в чем проблема. Но если это было с телефона, то он не может найти устройство для перехода на tcp.

Чтобы исправить это, adb tcpip 5555 с компьютера должен работать.