Android 開發之深入理解安卓調試橋各種錯誤解決辦法

amya0159 7年前發布 | 8K 次閱讀 安卓開發 Android開發 移動開發

摘要:

Android 開發調試項目使用到安卓 調試橋 工具,Android Debug Bridge( ADB )位于sdk路徑platform-tools文件夾,使用Android Studio或Eclipse工具忽略了adb工具的一些細節,深入理解安卓調試橋指令操作的過程,有助于解決出現的各種錯誤,運行adb遇到的錯誤包括:

1、命令行輸入adb devices或其他命令

  1. adb server is out of date.  killing…
  2. ADB server didn’t ACK
  3. * failed to start daemon *
  4. error:

2、命令行輸入adb start-server或其他命令

  1. adb server version (29) doesn’t match this client (36); killing…

3、命令行輸入adb start-server

  1. adb server is out of date. killing… ADB server didn’t ACK  failed to start

4、命令行輸入adb start-server

  1. adb server version (31) doesn’t match this client (36); killing…error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:通常每個套接字地址(協議/網絡地址/端口)只允許使用一

5、命令行輸入adb nodaemon server

  1. cannot bind ’tcp:5037′

6、命令行輸入adb nodaemon server

  1. error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:通常每個套接字地址(協議/網絡地址/端口)只允許使用一次。 (10048)

7、命令行輸入adb devices

  1. Android Studio控制臺或Eclipse控制臺打印:Adb connection Error:遠程主機強迫關閉了一個現有的連接。

一、初步了解adb命令

adb.exe,運行在當前開發者電腦的一個后臺進程是一個服務端,管理著client和daemon之間的通信。檢查當前電腦是否配置adb.exe環境變量,打開任務管理器,檢查是否有adb.exe進程在執行,如果沒有配置adb.exe環境變量,手動配置系統環境變量,步驟:

1.配置sdk根路徑:D:\Android\EclipseADT\adt-bundle-windows-x86_64-20140702\sdk

2.配置plateform-tools路徑:%sdk_home%\platform-tools;

3.配置tools路徑:%sdk_home%\tools;

4.配置系統變量Path路徑:%sdk_home%\platform-tools;%android_home%\tools;

打開命令行窗口,輸入adb version查看版本信息,輸入adb help查看幫助文檔,以后TeachCourse就可以通過cmd窗口完成Android Studio或Eclipse開發工具管理項目的任務。

TASKLIST幫助文檔
指令描述: 例子演示:
啟動adb后臺進程 adb start-server
查看當前連接設備 adb devices
卸載指定包名的APP adb uninstall com.sinolv.recycle
安裝本地apk文件到設備 adb install e:\temp\apk\92回收.apk
打印log信息,logcat后指定哪個包名的log信息 adb logcat com.sinolv.recycle
復制本地文件到設備指定路徑,第一個本地文件路徑,第二個設備存放路徑 adb push e:\temp\apk\92回收.apk /sdcard/92回收.apk
復制設備文件到本地指定路徑,第一個設備文件路徑,第二個本地存放路徑 adb pull /sdcard/92回收.apk e:\temp\apk\92回收.apk

二、運行adb命令提示錯誤分析和解決

使用Android Studio或Eclipse工具時,開發工具相當于client,sdk路徑platform-tools文件夾下的adb.exe相當于server,默認器或測試手機相當于daemon,當前TeachCourse在cmd輸入devices時,提示adb server is out of date. killing…或者其他錯誤

針對文章開頭提到的運行安卓調試橋時,出現的各種錯誤原因分析和解決辦法如下:

1、adb server is out of date. killing… ADB server didn’t ACK * failed to start daemon * error:

原因分析:這種情況,很可能當前電腦已經運行了一個adb.exe進程或進程依賴的唯一端口5037被占用。

解決辦法:打開任務管理器,查看adb.exe是否已運行,或者cmd窗口輸入netstat -ano|findstr 5037命令查看包含5037字符的TCP網絡連接。因為本地電腦可能有多個adb.exe可以執行文件,選中運行的進程鼠標右鍵“打開文件位置”,打開進程本地路徑。比如:安裝Genymotion模擬器存在一個默認的sdk路徑,Android Studio或Eclipse開發工具使用另一個sdk路徑,兩者不共用同一個adb.exe調試橋工具。(關于netstat命令行指令在后面詳細介紹)

2、adb server version (29) doesn’t match this client (36); killing…

原因分析:任務管理運行的是Android Studio或Eclipse配置sdk路徑下的adb.exe進程,在cmd窗口使用的另一個adb.exe進程執行命令操作。

解決辦法:cmd窗口進入Android Studio或Eclipse工具依賴的sdk路徑的plateform-tools文件夾,在執行adb命令

3、adb server is out of date. killing… ADB server didn’t ACK failed to start

原因分析:adb無法對接收到的指令正確應答,可能的原因adb后臺進程監聽不到Client發送的指令,adb.exe進程啟動失敗。

解決辦法:cmd窗口輸入tasklist|findstr adb,檢查當前運行adb.exe進程情況,發現存在多個adb.exe,cmd窗口輸入taskkill /f /im adb.exe結束對應的進程,最后重新啟動調試橋進程。(關于cmd窗口指令tasklist詳細說明,后面會介紹)

4、adb server version (31) doesn’t match this client (36); killing…error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037

原因分析:有兩個版本的adb.exe應用程序,任務管理器運行C盤的adb.exe,同時切換到E盤的adb.exe路徑,執行adb start操作,提示版本不一致

解決辦法:cmd窗口輸入taskkill /f /im adb.exe強行結束C盤運行的adb進程,然后切換到E盤adb.exe路徑,重新啟動。(adb.exe進程需要綁定本地電腦的唯一端口5037,5037端口被占用,綁定失敗)

5、cannot bind ‘tcp:5037′

原因分析:唯一的端口5037被占用,綁定失敗

解決辦法:cmd窗口輸入netstat -ano|findstr 5037,刷選當前TCP網絡連接包含5037的進程,獲取對pid,然后通過pid查詢應用程序名稱,cmd窗口輸入tasklist|findstr pid,發現360MobileLoader.exe占用唯一端口,測試發現taskkill /f /im 360MobileLoader.exe無法強行結束上述進程,解決辦法插拔一下手機數據線,自動結束360MobileLoader.exe進程。如果手機安裝了QQ,同時數據線連接電腦前在PC端登錄QQ軟件,電腦版的QQ軟件的tadb.exe進程同樣會占用5037端口,tadb.exe看得出來屬于adb.exe的一個復制品。(關于netstat和findstr命令行指令在后面詳細介紹)

6、error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:通常每個套接字地址(協議/網絡地址/端口)只允許使用一次。 (10048)

原因分析:adb.exe進程已經正常運行,重新執行上述指令,提示綁定失敗,套接字地址只允許使用一次

解決辦法:解除被使用的套接字地址即結束運行的adb.exe進程,然后cmd窗口進入想要啟動的adb.exe目錄,,最后輸入adb nodaemon server指令重新綁定。

7、Android Studio控制臺或Eclipse控制臺打印:Adb connection Error:遠程主機強迫關閉了一個現有的連接

原因分析:運行的adb.exe進程被意外結束,已經建立連接的模擬器或測試手機強行關閉

解決辦法:在前面運行adb指令的1/2/3/4點中,錯誤打印killing這個詞,可能因為運行C盤的adb.exe進程需要結束已運行的E盤的adb.exe進程,本地電腦即使有多個adb.exe,都會在運行另一個進程前結束另一個,造成Android Studio或Eclipse現有的連接被異常關閉。

總結:運行另一個adb進程會先結束已運行的進程,出現killing錯誤提示,一個adb進程依賴唯一的5037端口號,已運行的adb占用127.0.0.1:5037,提示套接字只允許使用一次錯誤。測試手機通過數據線連接當前電腦,一些第三方的手機軟件自動運行,優先占用5037端口號,造成adb.exe無法正常使用。以往的做法,重新插拔數據線或者重啟電腦恢復正常,讀完TeachCourse的這篇文章,只需要幾個指令即可正常啟動adb進程。

三、詳細說明幾個常用的cmd指令

第一個TASKLIST:,指令:TASKLIST /? 顯示幫助文檔,文檔描述該工具顯示在本地或遠程機器上當前運行的進程列表,通俗地說列出任務管理器運行的進程,斜杠后添加不同的字符,表示特定的含義,如下圖:

TASKLIST幫助文檔
參數列表: 作用:
/S system 指定連接到的遠程系統。
/U [domain\]user 指定應該在哪個用戶上下文執行這個命令。
/P [password] 為提供的用戶上下文指定密碼。如果省略,則提示輸入。
/M [module] 列出當前使用所給 exe/dll 名稱的所有任務。如果沒有指定模塊名稱,顯示所有加載的模塊。
/SVC 顯示每個進程中主持的服務。
/V 顯示詳述任務信息。
/FI filter 顯示一系列符合篩選器指定的標準的任務。
/FO format 指定輸出格式。有效值: “TABLE”、”LIST”、”CSV”。
/NH 指定列標題不應該在輸出中顯示。只對 “TABLE” 和 “CSV” 格式有效。

根據幫助文檔提供的example了解指令的用法,TeachCourse只總結cmd窗口輸入指令幾種格式的含義,比如:

TASKLIST幫助文檔
1.1 省略號… 在命令行中可多次重復的參數
1.2 中括號[] 可選項,可以選擇或不選擇
1.3 大括號{},選項用豎線|分隔。例如:{even|odd} 用戶>必須從選項集合中選擇一個
1.4 大寫字母,比如APPLICATION_PACKAGE 用戶輸入的參數值
1.5 尖括號<>,比如 adb uninstall [-k] 用戶>必須指定的參數;如果未指定參數,存在默認值,使用默認值代替,不存在默認值執行指令報錯

findstr、netstat和tasklist指令一樣,輸入findstr /?或netstat /?查看對應幫助文檔,結合常見命令行格式不難讀懂。netstat顯示協議統計和當前 TCP/IP 網絡連接,-ano是指令-a、-n和-o結合;findstr在文件中尋找字符串。

 

 

來自:http://www.androidchina.net/6451.html

 

 本文由用戶 amya0159 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!