adb连接不上android 报错5037端口

我在连接bluestacks的android模拟器的时候,有两个报错是关于5037端口的。

第一个错误

5037

  ADB server didn't ACK 

 * failed to start daemon * 

error: cannot connect to daemon

原因:

这是因为电脑本机上的5037端口被占用了,adb不能使用这个端口了,只要找到占用端口的进程,然后关闭它就可以了。

解决办法:

查看占用5037端口的进程

1)     netstat-ano | findstr "5037"

TCP    127.0.0.1:5037        0.0.0.0:0             LISTENING       3676

2)     taskkill /pid 3676 /f

第二种错误

报了一个创建进程失败,error 2的错误

原因

我的电脑上存在不止一个adb.exe,而且在cmd下直接输入adb开始命令语句的,也不知道到底调用是两个版本的adb,只要在C:\windows\system32下的那个是我们正常好用的adb.exe就可以了。

解决办法

把那个最大的986KB的adb.exe复制到系统目录下就可以了

 

 

一个bluestacks模拟器启动一次,有两个实例

C:\Users\Administrator>adbdevices

List of devices attached

emulator-5554  device

127.0.0.1:5555 device

 

我通过分别连接这两个实例,进行了打开同一个软件,期间没有关闭模拟器,发现他们两个打开的是同一个软件,也就是说,这两个实例指向的都是同一个android模拟器,但是为什么会存在两个vmname呢?

 

以下内容转自,解释的很清楚。

 

在本机启动 Android, 再用本机的的 adb 去连接

adb connect 127.0.0.1:5555

 

而后 adb devices 查看

user@ubuntu:~$ adb devices             
List of devices attached 
emulator-5554   device
127.0.0.1:5555  device

为何会出现两个设备? 我并没有运行 emulator?

 

如果你修改 system/build.prop 加入下面,修改adbd 的监听端口

service.adb.tcp.port=5566

就只出现一个设备

127.0.0.1:5566  device

 

这又是为何? 经过调查分析有了答案:

 

1) adb 启动就连接5555端口

启动 adb 的时候, adb 通过 "adb fork-serverserver" 启动 adb deamon

而后deamon 就会去找本地的 5555 端口, 直到 5555+32

ref:jellybean/system/core/adb/transport_local.c#140

为何连接上就叫 emulator, 这是因为 adb 期望自动为用户连接本机的emulator ( 每个emu两个端口, 可以多达16个)

如果你不用service.adb.tcp.port=5566 而用 5565 就是出现  emulator-5564, 因为连接只测试奇数端口

 

2) 为何连接叫 emulator-5554  而不是  emulator-5555

这是因为缺省emulator的 console 端口是 5554 ( 应该可以用 telnet 连接与 emulator 交互(还没有试验)) , 而adb 的端口是console端口 +1 就是 5555

当使用  adb emu<command>  可能就是把 <command>发到5554端口 

 

总结: 

以前以为 emulator 是构造虚拟的 usb设备, 看来不是

adb  连接 emulator 也是通过 tcp 连接的

如果你有程序监听 5555 端口, 会被 adb 认为是 emulator