ADB:规范中缺少端口
ADB: missing port in specification
我最近升级到 Android SDK 平台工具版本 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?
更新
从 ADB 版本 1.0.41 开始,该错误现已修复,它是平台工具版本 29.0.4 的一部分。该错误的修复已在 31st July 2019:
上提交
Restore default port for adb connect
.
The default port of 5555 was removed a while back, but the help text was
never updated, and other contexts still allow a default port.
输入 adb connect 192.168.1.20
不带尾随端口号现在会导致 ADB 连接到目标设备,恢复以前的行为。
旧答案
这似乎是 ADB 内部的一个错误,于 2018 年 12 月或 2019 年 1 月引入。我认为这与 socket_spec.cpp 中此 else
声明的最近更改有关。
} else {
std::string addr(spec.substr(4));
port_value = -1;
// FIXME: ParseNetAddress rejects port 0. This currently doesn't 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
检查通过,那么我们总是会立即陷入错误捕获语句。
$ adb kill-server
$ adb connect 192.168.1.20
杀掉adb服务器,正常连接。默认端口 (5555) 在服务器重新启动时恢复。
我可以通过在后缀位置添加端口号来连接我的 android phone。
例如,
$ adb kill-server
$ 亚行连接 192.168.1.20:5555
直接连接不上,报上面的错误
注意:端口号是必须要申请的,可能你当前的端口号不一样,请查到后再尝试连接。
刚刚在 AndroidThings 设备上标记了这个,
不得不交换
adb connect Android.local
和
adb connect Android.local:5555
还有另一种解决方法,归功于 Google 问题线程中的 this unknown person。创建自动将默认端口号添加到 IP 地址的自定义别名。
对于 Linux 和 MacOS,在 ~/.bashrc
或 ~/.bash_aliases
中:
function adbc() {
adb connect :5555
}
然后使用命令连接
$ adbc 192.168.1.20
Windows 用户:
Put this in adbc.bat
anywhere in your PATH
@echo off
adb connect %1:5555
然后使用命令连接
> adbc 192.168.1.20
为 Android 设备设置端口将解决问题。
方法如下:
- 通过 USB 将 Android 设备连接到安装了 adb 的计算机(Linux、MacOs 或其他)。
- 执行
adb tcpip <port_number>
。这会将设备设置为端口为 TCP 模式,尽管设备当前可能未使用以太网或 WiFi。这将使 port_value 不等于 -1 或未定义。
- 通过 USB 断开 Android 设备与计算机的连接。
adb connect <IP address>:<port number>
这应该连接设备。该设备应显示在 adb devices
. 的结果中
当我 "adb over Ethernet" 和 "adb over wifi" 使用我的 Pixel 3 XL 时它对我有用。
我在搜索与 Android 的 Visual Studio 模拟器类似的问题时偶然发现了这个线程。当您尝试拖放 *.apk 文件进行安装时,它给您同样的错误
我通过下载 latest -working- platform-tools v27.0.1 from google 并替换 android SDK 文件夹中的内容来修复它(在我的例子中是 %LOCALAPPDATA%\Android\Sdk
)。
我知道,这不是最好的解决方案,但只要 google 没有发布固定的 adb 版本(仍然不是 v29.02),我就可以接受它。
我最近升级到 Android SDK 平台工具版本 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?
更新
从 ADB 版本 1.0.41 开始,该错误现已修复,它是平台工具版本 29.0.4 的一部分。该错误的修复已在 31st July 2019:
上提交Restore default port for
adb connect
.The default port of 5555 was removed a while back, but the help text was never updated, and other contexts still allow a default port.
输入 adb connect 192.168.1.20
不带尾随端口号现在会导致 ADB 连接到目标设备,恢复以前的行为。
旧答案
这似乎是 ADB 内部的一个错误,于 2018 年 12 月或 2019 年 1 月引入。我认为这与 socket_spec.cpp 中此 else
声明的最近更改有关。
} else {
std::string addr(spec.substr(4));
port_value = -1;
// FIXME: ParseNetAddress rejects port 0. This currently doesn't 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
检查通过,那么我们总是会立即陷入错误捕获语句。
$ adb kill-server
$ adb connect 192.168.1.20
杀掉adb服务器,正常连接。默认端口 (5555) 在服务器重新启动时恢复。
我可以通过在后缀位置添加端口号来连接我的 android phone。
例如,
$ adb kill-server
$ 亚行连接 192.168.1.20:5555
直接连接不上,报上面的错误
注意:端口号是必须要申请的,可能你当前的端口号不一样,请查到后再尝试连接。
刚刚在 AndroidThings 设备上标记了这个,
不得不交换
adb connect Android.local
和
adb connect Android.local:5555
还有另一种解决方法,归功于 Google 问题线程中的 this unknown person。创建自动将默认端口号添加到 IP 地址的自定义别名。
对于 Linux 和 MacOS,在 ~/.bashrc
或 ~/.bash_aliases
中:
function adbc() { adb connect :5555 }
然后使用命令连接
$ adbc 192.168.1.20
Windows 用户:
Put this in
adbc.bat
anywhere in yourPATH
@echo off adb connect %1:5555
然后使用命令连接
> adbc 192.168.1.20
为 Android 设备设置端口将解决问题。
方法如下:
- 通过 USB 将 Android 设备连接到安装了 adb 的计算机(Linux、MacOs 或其他)。
- 执行
adb tcpip <port_number>
。这会将设备设置为端口为 TCP 模式,尽管设备当前可能未使用以太网或 WiFi。这将使 port_value 不等于 -1 或未定义。 - 通过 USB 断开 Android 设备与计算机的连接。
adb connect <IP address>:<port number>
这应该连接设备。该设备应显示在adb devices
. 的结果中
当我 "adb over Ethernet" 和 "adb over wifi" 使用我的 Pixel 3 XL 时它对我有用。
我在搜索与 Android 的 Visual Studio 模拟器类似的问题时偶然发现了这个线程。当您尝试拖放 *.apk 文件进行安装时,它给您同样的错误
我通过下载 latest -working- platform-tools v27.0.1 from google 并替换 android SDK 文件夹中的内容来修复它(在我的例子中是 %LOCALAPPDATA%\Android\Sdk
)。
我知道,这不是最好的解决方案,但只要 google 没有发布固定的 adb 版本(仍然不是 v29.02),我就可以接受它。