adb server is out of date. killing完美解決
今天,久未出現的著名的“adb server is out of date. killing”又發生了,在此,將解決方法記下,以便日后查看。
連接usb后重啟adb-server:
adb kill-server
adb start-server
adb devices
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端口,可以參考本博客另外 一篇文章:
http://blog.csdn.net/liranke/article/details/4999210
在這個文章里,詳細說明了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
運行adb shell命令出錯怎么辦
運行adb shell提示“adb server is out of date”怎么辦呢?通常導致此類情況產生的重要原因是由於端口被占用所造成的。對應的解決方法如下。
方法/步驟
-
1
在使用ADB命令前,首先必須確保電腦安裝了手機或平板電腦的驅動程序,可以從對應官方網站下載與手機類型相匹配的驅動,也可以通過刷機精靈來安裝手機驅動 。
-
2
當運行“adb shell“命令出現“adb server is out of date,killing...”提示時,可以先執行“adb nodaemon server”來查看“adb server”端口的信息。如圖所示:
-
3
待得到“ADB Server”端口信息后,執行“netstat -ano | findstr "5037"命令,其中“5037”為“ADB Server”端口號。
-
4
從返回的結果列表中找到“TCP”項右側的數字,如圖所示為“5240”。此序號即為當前占用“ADB Server”端口的進程號,我們需要中止此進程。
-
5
執行命令“tskill 5240"即可中止占用“ADB Server”端口的進程號。如圖所示:
-
6
最后再次執行“ADB Shell”命令,就可以正常進入Shell管理操作模式啦。
在cmd里面運行adb命令的時候提示:adb server is out of date. killing...
出現這個原因從下面兩個步驟進行:
1. 在任務管理器里面kill掉adb.ext進程。
2. 干掉豌豆夾進程(名字里面有wandoujia的)、干掉迅雷手機的進程(ThunderMobile.exe)、干掉360手機助手進程。總之,干掉一 切會連接手機的各種助手。我是在任務管理器里面找了好久才找到ThunderMobile.exe這個進程,干掉之后,再干掉adb.exe,就可以正常 運行adb命令了。
很多**手機助手都會劫持adb.exe進程,達到跟手機通訊的目的,對於Android開發者會造成很大的不便。而且你永遠不知道哪個應用程序會偷偷的增加跟手機通訊的功能(比如蛋疼的ThunderMobile)。
2014.03.14(add)。發現一個更好的解決方案,見下文。
轉載請注明出處:http://blog.csdn.net/xiaanming/article/details/9401981
ADB server didn't ACK 這個問題會困惱很多的新手朋友,我以前剛開始做Android的時候也遇到過這個問題,不過自己百度,google啥的,也不知道怎么就給解決了,看到群 里很多新手朋友都會問這個問題,說實話我也沒有一個解決這個問題的終極方法(百試百靈的那種,哈哈),自己沒遇到也沒有認真的去對待他,今天,就是在今 天,我打開Eclipse連上手機,准備調試程序,出現如下的信息
[plain] view plaincopy
-
The connection to adb is down, and a severe error has occured.
-
You must restart adb and Eclipse.
-
Please ensure that adb is correctly located at 'D:\android-2.2-windows\platform-tools\adb.exe' and can be executed.
然后我就按照 他的要求來做,重啟Eclipse和adb,然后確認adb的路徑是否正確,然后當我再次運行程序的時候,依舊不行,之后我就開始百度了,有朋友說先在 DOS下運行adb kill-server(你必須在環境變量中配好你adb的路徑或者進入到adb.exe的目錄下),然后在adb start-server,當我運行adb start-server的時候,DOS出現如下信息
[plain] view plaincopy
-
* daemon not running. starting it now *
-
ADB server didn't ACK
-
* failed to start daemon *
然后在運行程 序還是不行,重復搞了很多次老不行,還有朋友說在任務管理器找到adb.exe,然后關閉,重啟Eclipse,我打開任務管理器,發現根本沒有找到 adb.exe,這時候我流淚滿面了,然后我冷靜下來,知道有些朋友遇到這個錯誤是因為豌豆莢啥的軟件占用了adb.exe的端口,我的電腦里面根本沒有 安裝豌豆莢,然后我想看看是誰占用adb的端口,我從網上查到adb.exe使用的端口是5037,接下來我給大家介紹解決方法
-
查看5037端口被誰占用了,開始--運行--CMD 到命令提示符,輸入 netstat -aon|findstr "5037",如下圖
-
我們從上面根本就看不出5037端口被誰占用,我們需要根據后面的PID(2748)來查找占用該端口的應用程序,輸入 tasklist|findstr "2748" ,如下圖
注: 我這里5037端口是正確的被adb.exe占用,如果是你,就是其他的應用程序啦
-
結束該進程,輸入taskkill /f /t /im 你的進程名,例如adb.exe,如下圖,在重新連接手機,這時候你會發現程序運行起來了
這個問題雖然不是什么很大的問題,但是對於新手來說也是屬於比較棘手的問題,所以我將自己解決此問題的方法在這里記錄下,希望能給遇到此問題的人一點點幫助,如果我寫得文章對你一點幫助請幫我頂一下文章,謝謝!