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