Home » Android » android – ADB: missing port in specification

android – ADB: missing port in specification

Posted by: admin April 23, 2020 Leave a comment

Questions:

I’ve recently upgraded to Android SDK Platform-Tools version 28.0.2. Version information:

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

When using the adb connect command I now get the following error:

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

ADB previously connected to devices using TCP port 5555 by default. I am still able to connect to my device by specifying this port number:

$ adb connect 192.168.1.20:5555
connected to 192.168.1.20:5555

However, this is a minor inconvenience to me as I’m used to typing in just the IP address. Is there any way of telling this version of ADB to use TCP port 5555 by default?

How to&Answers:

Update

This bug has now been fixed as of ADB version 1.0.41, which is part of Platform Tools version 29.0.4. The fix for the bug was committed on 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.

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

Inputting adb connect 192.168.1.20 without the trailing port number now results in ADB connecting to the target device, restoring previous behaviour.

Old answer

This would appear to be a bug within ADB, introduced in December 2018 or January 2019. I believe this relates to recent changes to this else statement in socket_spec.cpp.

} 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;
    }
}

If a port value is not specified, the variable port_value is initialised at -1 and does not change. This value is not altered by android::base::ParseNetAddress either. If the ParseNetAddress check passes then we will always fall into the error-catching statement immediately afterwards.

Answer:

I can able to connect my android phone by adding a port number in the postfix place.

For example,

$ adb kill-server

$ adb connect 192.168.1.20:5555

Directly it could not able to connect, it was giving me the above error.

NOTE: Port number is compulsory to apply, maybe your port number is currently different so please find that and then try to connect again.

Answer:

$ adb kill-server
$ adb connect 192.168.1.20

Just kill the adb server and connect normally. Default port (5555) is restored when server is restarted.

Answer:

I stumbled upon this thread when I searched for a similar problem I had with the Visual Studio emulator for Android. When you try to drag & drop an *.apk file for installing, it gives you the same error

I fixed it by downloading the latest -working- platform-tools v27.0.1 from google and replacing the content in the android SDK folder (in my case %LOCALAPPDATA%\Android\Sdk).

I know, it’s not the best solution, but as long as google didn’t release a fixed adb version (still not in v29.02), I can live with it.

Answer:

Just flagged this on an AndroidThings device,

had to swap

 adb connect Android.local

with

 adb connect Android.local:5555

Answer:

There’s another workaround, with credit to this unknown person in the Google issue thread. Create a custom alias that automatically adds the default port number to the IP address.

For Linux & MacOS, in ~/.bashrc or ~/.bash_aliases:

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

Then connect using command

$ adbc 192.168.1.20

For Windows users:

Put this in adbc.bat anywhere in your PATH

@echo off
adb connect %1:5555

Then connect using command

> adbc 192.168.1.20

Answer:

Setting the port for the Android device will solve the problem.

Here is how:

  1. Connect the Android device with USB to your computer (Linux, MacOs or whatever) with adb installed.
  2. Execute adb tcpip <port_number>. This will set the device in TCP mode with port , although the device may not be currently using the Ethernet or WiFi. This will make the port_value not equals -1 or undefined.
  3. disconnect the Android device from your computer through USB.
  4. adb connect <IP address>:<port number>
    This should connect the device. The device should show up in the result of adb devices.

It worked for me when I “adb over Ethernet” and “adb over wifi” with my Pixel 3 XL.