|
Android 開發(fā)中, adb 是開發(fā)者經(jīng)常使用的工具,是 Android 開發(fā)者必須掌握的。 Android Debug Bridge,Android 調(diào)試橋接器,簡稱 adb ,該工具位于
adb 工具模型示意圖如下: 當(dāng)啟動(dòng) adb 客戶端時(shí),客戶端首先檢查 adb 服務(wù)端進(jìn)程是否運(yùn)行,如果沒有運(yùn)行,則啟動(dòng)服務(wù)端。當(dāng)服務(wù)端啟動(dòng)時(shí),它會(huì)綁定到本地的 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)行連接。需要說明的是,每一個(gè)模擬器或手機(jī)使用一對有序的端口,偶數(shù)號端口用于控制臺(tái)連接,奇數(shù)號端口用于 adb 連接,例如: Emulator 1, console: 5554Emulator 1, adb: 5555Emulator 2, console: 5556Emulator 2, adb: 5557 ...即如果模擬器與 adb 在 5555 端口連接,則其與控制臺(tái)的連接就是 5554 端口。 當(dāng)服務(wù)端與所有的模擬器建立連接之后,就可以使用 adb 命令來控制或者訪問了。因?yàn)榉?wù)端管理著連接并且可以接收到從多個(gè) adb 客戶端的命令,所以可以從任何一個(gè)客戶端或腳本來控制任何模擬器或手機(jī)設(shè)備。 補(bǔ)充:
大意就是,你想使用 USB調(diào)試 就得啟用 USB調(diào)試 模式下的 RSA密鑰指紋。不然我就不給你用。
了解 adb 服務(wù)端連接的模擬器或手機(jī)可以幫助更好的使用 adb 命令,這可以通過 devices 命令來列舉當(dāng)前連接的設(shè)備: adb devices執(zhí)行結(jié)果是 adb 為每一個(gè)設(shè)備輸出以下狀態(tài)信息: 序列號(serialNumber):由 adb 創(chuàng)建用于唯一標(biāo)識設(shè)備的字符串,格式是 <設(shè)備類型>-<端口號>,例如: emulator-5554連接狀態(tài)(state),其值是可能是下面的任意一種:offline — 未連接或未響應(yīng)device — 表示設(shè)備已經(jīng)連接到服務(wù)端。但需要注意的是,這個(gè)狀態(tài)并不表示 Android 系統(tǒng)已經(jīng)完全啟動(dòng)起來并且可操作,因?yàn)橄到y(tǒng)在啟動(dòng)的過程中就已經(jīng)連接 adb ,但這個(gè)狀態(tài)是正常的可操作狀態(tài)。no device - 表示沒有任何設(shè)備連接(樓主測試過程中沒有碰到過 no device 的情況,沒連接設(shè)備就沒任何輸出)端口號>設(shè)備類型>每一個(gè)設(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如果有多個(gè)模擬器或手機(jī)正在運(yùn)行,當(dāng)使用 adb 命令的時(shí)候就需要指定目標(biāo)設(shè)備,這可以通過使用 adb -s 你可以使用 adb 命令指定序列號在特定的設(shè)備上執(zhí)行命令,這里可以先使用前面提到的 例如: adb -s emulator-5556 install helloWorld.apk需要注意的是,如果使用了 補(bǔ)充: 這是 Google 官方給出在多設(shè)備的情況下,不用
大意就是:如果你有多個(gè)設(shè)備,即既有模擬器,又有真機(jī),但是模擬器只有一個(gè),那么你可以使用 $ adb -e install helloWorld.apk//同理,如果有多個(gè)設(shè)備,但只有一個(gè)真機(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有時(shí)候,使用該命令復(fù)制文件到手機(jī)或從手機(jī)復(fù)制文件,會(huì)碰到如下提示: failed to copy 'log.txt' to '/dev/log.txt': Permission denied備注: Permission denied 這個(gè)問題以前在使用 Windows 系統(tǒng)的時(shí)候碰到過,現(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)限啟動(dòng) 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)。這時(shí)你可以通過 之后,通過 $ 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平時(shí)我們都是使用 USB調(diào)試,但是現(xiàn)在也支持通過 WIFI 進(jìn)行調(diào)試了。使用方式如下:
通過以上步驟,就可以開心的享用 WiFi 調(diào)試了。如果沒有正常連接,可以按照下面的步驟檢查:
這是一篇關(guān)于 Android 設(shè)備 USB調(diào)試 和 WiFi調(diào)試 相互切換的博文,博主寫了一個(gè)腳本來實(shí)現(xiàn)這個(gè)過程,有興趣的同學(xué)可以去看看。 補(bǔ)充
bugreport 的詳細(xì)使用可以參考 Baniel01的這篇Android adb bugreport工具分析和使用文章,里面有很詳細(xì)的介紹。
以上就是 adb 命令的常見用法,大部分翻譯自 Android Debug Bridge,其中加了一些個(gè)人總結(jié)。有些不常用的 adb 命令沒有介紹,更多 adb 用法請見:Adb Command Summary。文中如有紕漏,歡迎大家留言指出。 微博:厲圣杰 微信: 參考:
|
|
|