android adb啓動不了

正常應該是這樣的 android

咱們看下源碼 socket

這裏咱們看到兩個分支, if(fd==-2){ 函數

            //根據註釋  之前還沒啓動過服務 就走這個分支 oop

            }else{ 日誌

             當前進程已經有這個服務在運行就走這個分支 server

            } 進程

根據上面的打印的日誌 很明顯羣裏的這位朋友已經執行了這個服務,由於它走進了第二個分支。 源碼

可是他在任務管理器中又找不到adb服務。 cli

咱們來看下android是怎麼判斷服務已經在進程中的。即什麼狀況下int _adb_connect(const char *service)返回-2. service

只有當fd<0時纔會返回-2.  即fd = socket_loopback_client(__adb_server_port, SOCK_STREAM);建立失敗

傳入兩個參數分別爲端口號和TCP類型的一個常量。adb是面向鏈接的,因此SOCK_STREAM是不變的常量,能致使函數調用失敗的

必然是由於咱們傳入了一個不適合的值,這個值只能是端口號。由程序知  __adb_server_port=5037.

 

得出結論 5037端口號被其它程序佔用了(只能是佔用,我想不出還有其它可能)。

而後就簡單了

dos窗口運行

找到佔用5037端口號的進程

獲取調用進程的程序,我這裏就是adb程序。而後在任務管理器中殺死該進程就不會出現adb沒法啓動了。

相關文章
相關標籤/搜索