Android 開發(fā)中, adb 是開發(fā)者經(jīng)常使用的工具,是 Android 開發(fā)者必須掌握的。 Android Debug Bridge,Android 調(diào)試橋接器,簡稱 adb ,該工具位于
adb 工具模型示意圖如下: adb 的工作原理當(dāng)啟動 adb 客戶端時,客戶端首先檢查 adb 服務(wù)端進(jìn)程是否運(yùn)行,如果沒有運(yùn)行,則啟動服務(wù)端。當(dāng)服務(wù)端啟動時,它會綁定到本地的 TCP5037 端口,并且監(jiān)聽從 adb 客戶端發(fā)來的命令——所有 adb 客戶端都使用 5037 端口與 adb 服務(wù)端通信。 接下來服務(wù)端與所有正在運(yùn)行的模擬器或手機(jī)連接。它通過掃描 5555-5585 之間的奇數(shù)號端口來搜索模擬器或手機(jī),一旦發(fā)現(xiàn) adb 守護(hù)進(jìn)程,就通過此端口進(jìn)行連接。需要說明的是,每一個模擬器或手機(jī)使用一對有序的端口,偶數(shù)號端口用于控制臺連接,奇數(shù)號端口用于 adb 連接,例如: Emulator 1, console: 5554Emulator 1, adb: 5555Emulator 2, console: 5556Emulator 2, adb: 5557 ... 即如果模擬器與 adb 在 5555 端口連接,則其與控制臺的連接就是 5554 端口。 當(dāng)服務(wù)端與所有的模擬器建立連接之后,就可以使用 adb 命令來控制或者訪問了。因?yàn)榉?wù)端管理著連接并且可以接收到從多個 adb 客戶端的命令,所以可以從任何一個客戶端或腳本來控制任何模擬器或手機(jī)設(shè)備。 補(bǔ)充:
大意就是,你想使用 USB調(diào)試 就得啟用 USB調(diào)試 模式下的 RSA密鑰指紋。不然我就不給你用。
了解 adb 服務(wù)端連接的模擬器或手機(jī)可以幫助更好的使用 adb 命令,這可以通過 devices 命令來列舉當(dāng)前連接的設(shè)備: adb devices 執(zhí)行結(jié)果是 adb 為每一個設(shè)備輸出以下狀態(tài)信息: 序列號(serialNumber):由 adb 創(chuàng)建用于唯一標(biāo)識設(shè)備的字符串,格式是 <設(shè)備類型>-<端口號>,例如: emulator-5554連接狀態(tài)(state),其值是可能是下面的任意一種:offline — 未連接或未響應(yīng)device — 表示設(shè)備已經(jīng)連接到服務(wù)端。但需要注意的是,這個狀態(tài)并不表示 Android 系統(tǒng)已經(jīng)完全啟動起來并且可操作,因?yàn)橄到y(tǒng)在啟動的過程中就已經(jīng)連接 adb ,但這個狀態(tài)是正常的可操作狀態(tài)。no device - 表示沒有任何設(shè)備連接(樓主測試過程中沒有碰到過 no device 的情況,沒連接設(shè)備就沒任何輸出)端口號>設(shè)備類型> 每一個設(shè)備的輸出形如: [serialNumber] [state] 下面是 adb devices 命令和其執(zhí)行結(jié)果: $ adb devicesList of devices attached emulator-5554 deviceemulator-5556 deviceemulator-5558 device 如果沒有模擬器或手機(jī)在運(yùn)行,運(yùn)行 adb devices 命令的執(zhí)行結(jié)果如下: $ adb devcesList of devices attached 如果有多個模擬器或手機(jī)正在運(yùn)行,當(dāng)使用 adb 命令的時候就需要指定目標(biāo)設(shè)備,這可以通過使用 adb -s 你可以使用 adb 命令指定序列號在特定的設(shè)備上執(zhí)行命令,這里可以先使用前面提到的 例如: adb -s emulator-5556 install helloWorld.apk 需要注意的是,如果使用了 補(bǔ)充: 這是 Google 官方給出在多設(shè)備的情況下,不用
大意就是:如果你有多個設(shè)備,即既有模擬器,又有真機(jī),但是模擬器只有一個,那么你可以使用 $ adb -e install helloWorld.apk//同理,如果有多個設(shè)備,但只有一個真機(jī),可以使用如下命令快速發(fā)送命令$ adb -d install helloWorld.apk 使用 adb install [-lrtsdg] 更多關(guān)于創(chuàng)建 apk 文件可參考:Build And Running 卸載應(yīng)用既然有安裝應(yīng)用的命令,那當(dāng)然有卸載應(yīng)用的命令。卸載應(yīng)用命令的格式如下: // 使用 adb forward tcp:6100 tcp:7100 也可以使用UNIX命名的socket標(biāo)識: adb forward tcp:6100 local:logd 補(bǔ)充:關(guān)于 使用 adb 命令 從模擬器或手機(jī)拷貝文件或文件夾(包括文件夾的子目錄) adb pull [-a] 將文件或文件夾(包括文件夾的子目錄)拷貝到模擬器或手機(jī) adb push 比如,我想把桌面的 log.txt 復(fù)制到手機(jī)的 dev 目錄下,則命令如下: $ adb push /Users/littlejie/Desktop/log.txt /dev 有時候,使用該命令復(fù)制文件到手機(jī)或從手機(jī)復(fù)制文件,會碰到如下提示: failed to copy 'log.txt' to '/dev/log.txt': Permission denied 備注: Permission denied 這個問題以前在使用 Windows 系統(tǒng)的時候碰到過,現(xiàn)在轉(zhuǎn) Mac 后就沒有再遇到,難道是我打開方式不對嘛?再補(bǔ)充一點(diǎn), Mac 上我運(yùn)行 $ adb rootadbd is already running as root 這是因?yàn)楫?dāng)前用戶沒有相應(yīng)的權(quán)限或者是 /dev 目錄不可寫。解決方法如下: //方法一//已 root 權(quán)限啟動 adb 服務(wù)$ adb root//adb remount (重新掛載系統(tǒng)分區(qū),使系統(tǒng)分區(qū)重新可寫)$ adb remount//將文件復(fù)制到 /dev 目錄下$ adb push /Users/littlejie/Desktop/log.txt /dev //方法二:修改文件的讀寫權(quán)限$ adb shell# su# chmod 777 /dev 關(guān)于 Linux 下文件權(quán)限的更多內(nèi)容請參考:linux系統(tǒng)644、755、777權(quán)限詳解 adb shell這里簡單講一下 adb shell 有兩種使用方式,一種是不進(jìn)入 remote shell 直接執(zhí)行命令行,格式如下: adb [-d|-e|-s 還有一種是,進(jìn)入模擬器或手機(jī)的 remote shell 執(zhí)行,格式如下: adb [-d|-e|-s 在某些情況下需要重啟 adb 服務(wù)來解決問題,比如 adb 無響應(yīng)。這時你可以通過 之后,通過 $ adb kill-server$ adb start-server* daemon not running. starting it now on port 5037 ** daemon started successfully *$ adb kill-server$ adb devicesList of devices attached* daemon not running. starting it now on port 5037 ** daemon started successfully *emulator-5556 deviceemulator-5554 device 平時我們都是使用 USB調(diào)試,但是現(xiàn)在也支持通過 WIFI 進(jìn)行調(diào)試了。使用方式如下:
通過以上步驟,就可以開心的享用 WiFi 調(diào)試了。如果沒有正常連接,可以按照下面的步驟檢查:
這是一篇關(guān)于 Android 設(shè)備 USB調(diào)試 和 WiFi調(diào)試 相互切換的博文,博主寫了一個腳本來實(shí)現(xiàn)這個過程,有興趣的同學(xué)可以去看看。 補(bǔ)充
bugreport 的詳細(xì)使用可以參考 Baniel01的這篇Android adb bugreport工具分析和使用文章,里面有很詳細(xì)的介紹。
以上就是 adb 命令的常見用法,大部分翻譯自 Android Debug Bridge,其中加了一些個人總結(jié)。有些不常用的 adb 命令沒有介紹,更多 adb 用法請見:Adb Command Summary。文中如有紕漏,歡迎大家留言指出。 微博:厲圣杰 微信: 參考:
|
|