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