使用adb时,经常遇到adb不能使用的情况,大多情况是因为电脑本身安装了手机助手之类的(例如,应用宝,豌豆荚,百度手机助手等)
那些手机助手通常也会包含AdbWinApi.dll文件,这就造成了启用adb时端口会被占用。
首先我们可以使用
adb nodaemon server
查看当前adb端口号
C:\Users\di.qian>adb nodaemon server
netstat -ano | findstr "5037"
tasklist | findstr "8516"
tasklist
taskkill /f /pid 963
错误信息:
C:\Users\di.qian>adb devices
adb devicesadb server is out of date. killing...
ADB server didn't ACK* failed to start daemon *error: unknown host service
C:\Users\di.qian>adb start-server
* daemon not running. starting it now on port 5037 *
CreateProcess failure, error 2
* failed to start daemon *
adb的端口(5037)被占用了。
在这个文章里,详细说明了adb的原理及其源码分析。
C:\Users\di.qian>adb nodaemon server
cannot bind 'tcp:5037'
然后用下面的命令查看5037端口
C:\Users\di.qian>netstat -ano | findstr "5037"
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 8516
TCP 127.0.0.1:5037 127.0.0.1:59163 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:59164 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:59167 TIME_WAIT 0
......
C:\Users\di.qian>tasklist | findstr "8516"
sjk_daemon 8516 Console 1 3,071 K
这里可以看出是 sjk_daemon进程占用了adb的端口
查看任务列表
C:\Users\di.qian>tasklist
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 24 K
System 4 Services 0 1,128 K
sjk_daemon 963 Console 1 3,071 K
tasklist.exe 1260 Console 1 5,856 K
再kill掉这个进程:
C:\Users\di.qian>taskkill /f /pid 963
如果这个命令提示无权限,那么,可以去windows的“任务管理器”中“进程”那个窗口,找到这个进程,将它杀掉。
再运行adb devices,就没有问题了。
C:\Users\di.qian>adb devices
4df7f482396a301d device
附:
关于5037端口,可以参考其他博客的 一篇文章: