ADB: отсутствующий порт в спецификации - программирование

ADB: отсутствующий порт в спецификации

Я недавно обновился до Android SDK Platform-Tools версии 28.0.2. Информация о версии:

$ adb version
Android Debug Bridge version 1.0.40
Version 28.0.2-5303910

При использовании команды adb connect теперь я получаю следующую ошибку:

$ adb connect 192.168.1.20
missing port in specification: tcp:192.168.1.20

ADB ранее подключался к устройствам через TCP-порт 5555 по умолчанию. Я все еще могу подключиться к своему устройству, указав этот номер порта:

$ adb connect 192.168.1.20:5555
connected to 192.168.1.20:5555

Однако для меня это незначительное неудобство, так как я привык вводить только IP-адрес. Есть ли способ сказать этой версии ADB использовать TCP-порт 5555 по умолчанию?

4b9b3361

Ответ 1

Обновление

Эта ошибка была исправлена с версии ADB 1.0.41, которая является частью Platform Tools версии 29.0.4. Исправление ошибки было совершено 31 июля 2019 года:

Восстановите порт по умолчанию для adb connect.

Порт по умолчанию 5555 был удален некоторое время назад, но текст справки был никогда не обновляется, а в других контекстах разрешается использование порта по умолчанию.

Bug: https://issuetracker.google.com/128561172

Ввод adb connect 192.168.1.20 без конечного номера порта теперь приводит к подключению ADB к целевому устройству и восстановлению предыдущего поведения.

Старый ответ

Это может быть ошибкой в АБР, появившейся в декабре 2018 или январе 2019 года. Я считаю, что это связано с недавними изменениями в этом утверждении else в socket_spec.cpp.

} else {
    std::string addr(spec.substr(4));
    port_value = -1;

    // FIXME: ParseNetAddress rejects port 0. This currently does not hurt, because listening
    //        on an address that isn't 'localhost' is unsupported.
    if (!android::base::ParseNetAddress(addr, &hostname_value, &port_value, serial, error)) {
        return false;
    }

    if (port_value == -1) {
        *error = "missing port in specification: ";
        *error += spec;
        return false;
    }
}

Если значение порта не указано, переменная port_value инициализируется в -1 и не изменяется. Это значение также не изменяется android::base::ParseNetAddress. Если проверка ParseNetAddress пройдёт, мы сразу же попадем в оператор для отлова ошибок.

Ответ 2

Я могу подключить свой телефон Android, добавив номер порта в месте постфикса.

Например,

$ adb kill-server

$ adb connect 192.168.1.20: 5555

Непосредственно это не могло соединиться, это дало мне вышеупомянутую ошибку.

ПРИМЕЧАНИЕ. Номер порта является обязательным для применения, возможно, номер вашего порта в настоящее время другой, поэтому, пожалуйста, найдите его, а затем повторите попытку подключения.

Ответ 3

$ adb kill-server
$ adb connect 192.168.1.20

Просто убей сервер adb и подключись нормально. Порт по умолчанию (5555) восстанавливается при перезапуске сервера.

Ответ 4

Я наткнулся на эту тему, когда искал похожую проблему, которая была у меня с эмулятором Visual Studio для Android. Когда вы пытаетесь перетащить & перетащите файл *.apk для установки, он выдает ту же ошибку

Я исправил это, загрузив последнюю версию -working-tools-tools v27.0.1 из google и заменив содержимое в папке Android SDK (в моем случае %LOCALAPPDATA%\Android\Sdk).

Я знаю, что это не лучшее решение, но пока Google не выпустил фиксированную версию ADB (все еще не в 29.02), я могу жить с этим.

Ответ 5

Просто отметили это на устройстве AndroidThings,

пришлось поменяться

 adb connect Android.local

с

 adb connect Android.local:5555

Ответ 6

Есть другой обходной путь, с кредитом для этого неизвестного человека в теме выпуска Google. Создайте пользовательский псевдоним, который автоматически добавляет номер порта по умолчанию к IP-адресу.

Для Linux и MacOS в ~/.bashrc или ~/.bash_aliases:

function adbc() {
   adb connect $1:5555
}

Затем подключитесь с помощью команды

$ adbc 192.168.1.20

Для пользователей Windows:

Поместите это в adbc.bat любом месте вашего PATH

@echo off
adb connect %1:5555

Затем подключитесь с помощью команды

> adbc 192.168.1.20

Ответ 7

Установка порта для устройства Android решит проблему.

Вот как:

  1. Подключите устройство Android с USB к вашему компьютеру (Linux, MacO или любой другой) с установленным adb.
  2. Выполните adb tcpip <port_number>. Это переведет устройство в режим TCP с портом, хотя в данный момент устройство может не использовать Ethernet или WiFi. Это сделает port_value не равным -1 или неопределенным.
  3. отключите устройство Android от компьютера через USB.
  4. adb connect <IP address>:<port number> Это должно подключить устройство. Устройство должно отображаться в результате работы adb devices.

Это сработало для меня, когда я "adb over Ethernet" и "adb over wifi" с моим Pixel 3 XL.