我在连接bluestacks的android模拟器的时候,有两个报错是关于5037端口的。
* daemon not running. starting it now onport 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复制到系统目录下就可以了
C:\Users\Administrator>adbdevices
List of devices attached
emulator-5554 device
127.0.0.1:5555 device
我通过分别连接这两个实例,进行了打开同一个软件,期间没有关闭模拟器,发现他们两个打开的是同一个软件,也就是说,这两个实例指向的都是同一个android模拟器,但是为什么会存在两个vmname呢?
以下内容转自http://blog.csdn.net/span76/article/details/9293937,解释的很清楚。
在本机启动 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
总结:
以前以为 emulator 是构造虚拟的 usb设备, 看来不是
adb 连接 emulator 也是通过 tcp 连接的
如果你有程序监听 5555 端口, 会被 adb 认为是 emulator