欢迎关注公众号,每天推送​​Android​​技术文章,二维码如下:(可扫描)

Android:ADB server didn

出现这个原因我个人感觉有两个。一、5037端口被别的程序或者进程占用;二、adb占用的不是5037端口。很多人仅仅知道第一种二忽视了第二种。

不管哪个原因,解决问题的办法都一样。这里做一个整理如下:

1. 错误信息:

C:\Users\lizy>adb devices

adb devicesadb server is out of date. killing...

ADB server didn't ACK* failed to start daemon *error: unknown host service


2. 原因:

adb的端口(5037)被占用了。至于这个5037端口,可以参考本博客另外 一篇文章:

在这个文章里,详细说明了adb的原理及其源码分析


3. 解决方法:

在cmd窗口:

C:\Users\lizy>adb nodaemon server

cannot bind 'tcp:5037'



C:\Users\lizy>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\lizy>tasklist | findstr "8516"
sjk_daemon
8516 Console 1 3,071 K


哦,原来是sjk_daemon进程占了adb的端口。


C:\Users\lizy>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\lizy>taskkill /f /pid 963


如果这个命令提示无权限,那么,可以去windows的“任务管理器”中“进程”那个窗口,找到这个进程,将它杀掉。



再运行adb devices,就没有问题了。

C:\Users\lizy>adb devices

4df7f482396a301d device


最后别忘了重启eclipse和模拟器。