【问题标题】:ADB: missing port in specificationADB:规范中缺少端口
【发布时间】:2019-03-14 08:48:25
【问题描述】:

我最近升级到了 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端口?

【问题讨论】:

  • 试试这种方式adb tcpip 5555 然后adb connect 192.168.0.242
  • @NileshRathod 不,该命令会在设备上打开 ADB Over Network,该设备之前已被禁用。在未连接设备的情况下使用 adb tcpip 5555 会返回 error: no devices/emulators found。就我而言,我设备的开发版本已经在该端口上监听 ADB。

标签: android adb android-sdk-tools


【解决方案1】:

我可以通过在后缀位置添加端口号来连接我的安卓手机。

例如,

$ adb kill-server

$ adb connect 192.168.1.20:5555

直接连不上,出现上述错误。

注意:端口号是必须申请的,可能您的端口号当前不同,所以请找到该端口号,然后重新尝试连接。

【讨论】:

  • 但是问题本身已经提到了这个解决方法? Quote: “我仍然可以通过指定此端口号连接到我的设备”
  • 指定 5555 端口,我可以连接。谢谢
【解决方案2】:

更新

此错误现已在 ADB 1.0.41 版中得到修复,它是 Platform Tools 29.0.4 版的一部分。该错误的修复已在31st July 2019 上提交:

恢复adb connect的默认端口。

默认端口 5555 不久前已删除,但帮助文本已删除 从未更新,并且其他上下文仍然允许默认端口。

错误:https://issuetracker.google.com/128561172

现在输入 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 检查通过,那么我们总是会立即陷入错误捕获语句。

【讨论】:

  • 又该如何处理?
  • @PonomarenkoOleh 目前的解决方法是包含端口号,例如192.168.1.20:5555。但是,这是一个由 Google 负责的错误,因此我们需要等待他们修复它。
  • @PonomarenkoOleh 但是,您也可以为错误报告加注星标,以便更快地引起开发人员的注意。
【解决方案3】:

还有另一种解决方法,在 Google 问题线程中注明 this unknown person。创建一个自定义别名,自动将默认端口号添加到 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

【讨论】:

    【解决方案4】:
    $ adb kill-server
    $ adb connect 192.168.1.20
    

    杀掉adb服务器,正常连接。重新启动服务器时会恢复默认端口 (5555)。

    【讨论】:

    • 也许对有时会出现此错误的人有用,但并非总是如此。在 macOS 上为我工作
    • MacOS 10.14 Mojave 在这里。当您使用adb version 时,您的 ADB 版本是否匹配?
    • 是的,adb 版本是一样的。 MacOS 版本为 10.14.4
    【解决方案5】:

    当我搜索适用于 Android 的 Visual Studio 模拟器时遇到的类似问题时,我偶然发现了这个线程。当您尝试拖放 *.apk 文件进行安装时,它会给您同样的错误

    我通过下载 latest -working- platform-tools v27.0.1 from google 并替换 android SDK 文件夹中的内容(在我的情况下为 %LOCALAPPDATA%\Android\Sdk)来修复它。

    我知道,这不是最好的解决方案,但只要 google 没有发布固定的 adb 版本(仍然没有在 v29.02 中),我就可以忍受它。

    【讨论】:

    • 哇,感谢您也添加了您的答案(我从同一个问题中偶然发现了这里)。我不知道你是如何解决这个问题的,但它也对我有用。
    【解决方案6】:

    为 Android 设备设置端口将解决问题。

    方法如下:

    1. 通过 USB 将 Android 设备连接到安装了 adb 的计算机(Linux、MacO 或其他)。
    2. 执行adb tcpip <port_number>。这会将设备设置为带有端口的 TCP 模式,尽管设备当前可能未使用以太网或 WiFi。这将使 port_value 不等于 -1 或未定义。
    3. 通过 USB 断开 Android 设备与计算机的连接。
    4. adb connect <IP address>:<port number> 这应该连接设备。该设备应显示在adb devices 的结果中。

    当我使用 Pixel 3 XL 进行“adb over Ethernet”和“adb over wifi”时,它对我有用。

    【讨论】:

      【解决方案7】:

      刚刚在 AndroidThings 设备上标记了这个,

      不得不换

       adb connect Android.local
      

      与

       adb connect Android.local:5555
      

      【讨论】:

      • 这很有趣,Android 自己的内部 ADB 也是如此,尽管如果它共享相同的代码库会很有意义。
      猜你喜欢
      • 2014-07-22
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多