ADB
Android 調(diào)試橋 (adb) 是一個(gè)通用命令行工具侵续,其允許您與模擬器實(shí)例或連接的 Android 設(shè)備進(jìn)行通信的畴。它可為各種設(shè)備操作提供便利塘砸,如安裝和調(diào)試應(yīng)用末融,并提供對(duì) Unix shell(可用來(lái)在模擬器或連接的設(shè)備上運(yùn)行各種命令)的訪問(wèn)钧惧。該工具作為一個(gè)客戶端-服務(wù)器程序,包括三個(gè)組件:
- 客戶端滑潘,該組件發(fā)送命令垢乙。客戶端在開(kāi)發(fā)計(jì)算機(jī)上運(yùn)行语卤。您可以通過(guò)發(fā)出 adb 命令從命令行終端調(diào)用客戶端追逮。
- 后臺(tái)程序,該組件在設(shè)備上運(yùn)行命令粹舵。后臺(tái)程序在每個(gè)模擬器或設(shè)備實(shí)例上作為后臺(tái)進(jìn)程運(yùn)行钮孵。
- 服務(wù)器,該組件管理客戶端和后臺(tái)程序之間的通信眼滤。服務(wù)器在開(kāi)發(fā)計(jì)算機(jī)上作為后臺(tái)進(jìn)程運(yùn)行巴席。
ADB 工作方式
啟動(dòng)一個(gè) adb 客戶端時(shí),此客戶端首先檢查是否有已運(yùn)行的 adb 服務(wù)器進(jìn)程诅需。如果沒(méi)有漾唉,它將啟動(dòng)服務(wù)器進(jìn)程荧库。當(dāng)服務(wù)器啟動(dòng)時(shí),它與本地 TCP 端口 5037 綁定赵刑,并偵聽(tīng)從 adb 客戶端發(fā)送的命令—所有 adb 客戶端均使用端口 5037 與 adb 服務(wù)器通信分衫。
然后,服務(wù)器設(shè)置與所有運(yùn)行的模擬器/設(shè)備實(shí)例的連接般此。它通過(guò)掃描 5555 到 5585 之間(模擬器/設(shè)備使用的范圍)的奇數(shù)號(hào)端口查找模擬器/設(shè)備實(shí)例蚪战。服務(wù)器一旦發(fā)現(xiàn) adb 后臺(tái)程序,它將設(shè)置與該端口的連接铐懊。請(qǐng)注意邀桑,每個(gè)模擬器/設(shè)備實(shí)例將獲取一對(duì)按順序排列的端口 — 用于控制臺(tái)連接的偶數(shù)號(hào)端口和用于 adb 連接的奇數(shù)號(hào)端口。例如:
模擬器 1科乎,控制臺(tái):5554
模擬器 1壁畸,adb:5555
模擬器 2,控制臺(tái):5556
模擬器 2茅茂,adb:5557
以此類推...
如上所示瓤摧,在端口 5555 與 adb 連接的模擬器實(shí)例與偵聽(tīng)端口 5554 的控制臺(tái)的實(shí)例相同。
當(dāng)服務(wù)器已設(shè)置與所有模擬器實(shí)例的連接后玉吁,您可以使用 adb 命令訪問(wèn)這些實(shí)例照弥。由于服務(wù)器管理與模擬器/設(shè)備實(shí)例的連接,并處理來(lái)自多個(gè) adb 客戶端的命令进副,因此这揣,您可以從任意客戶端(或從某個(gè)腳本)控制任意模擬器/設(shè)備實(shí)例。
ADB CS模式解讀
ADB 主要存放在SDK安裝目錄下的platform-tools文件夾中影斑,它是一個(gè)非常強(qiáng)大的命令行工具给赞,通過(guò)這個(gè)工具你能夠與你的Android設(shè)備進(jìn)行交互。同時(shí)這是一個(gè)包含了以下三部分的CS模式的程序:
adb client
從圖中矫户,我們知道Client是運(yùn)行在PC端的片迅,每當(dāng)我們發(fā)起一個(gè)adb命令的時(shí)候,就會(huì)開(kāi)啟一個(gè)Client程序皆辽。當(dāng)然柑蛇,當(dāng)我們開(kāi)啟DDMS或者ADT的時(shí)候,也會(huì)自動(dòng)創(chuàng)建Client驱闷。
當(dāng)我們開(kāi)啟一個(gè)Client的時(shí)候耻台,它首先會(huì)去檢測(cè)后臺(tái)是否已經(jīng)有一個(gè)Server程序在運(yùn)行著,否則會(huì)開(kāi)啟一個(gè)adb-server進(jìn)程空另。
所有的Client都是通過(guò)5037端口與adb-server進(jìn)行通信的盆耽。
adb daemon(adbd)
從圖中,我們知道daemon是作為一個(gè)后臺(tái)進(jìn)程運(yùn)行在模擬器/真實(shí)Android設(shè)備中的。
daemon使用端口的范圍是5554-5585摄杂,每個(gè)模擬器/設(shè)備連接到PC端時(shí)坝咐,總會(huì)開(kāi)啟這么一個(gè)后臺(tái)進(jìn)程,并且為其分配了兩個(gè)連續(xù)的端口析恢,比如:Emulator 1, console: 5554
Emulator 1, adb: 5555
也正因?yàn)槊總€(gè)設(shè)備都分一組兩個(gè)端口畅厢,也已a(bǔ)db連接手機(jī)的最大數(shù)量為16。
說(shuō)回端口的作用氮昧,在這兩個(gè)端口中,其中偶數(shù)端口是用于server 與設(shè)備進(jìn)行交互的浦楣,可以讓server直接從設(shè)備中讀取數(shù)據(jù)袖肥,而奇數(shù)端口是用來(lái)與設(shè)備的adbd進(jìn)行連接通信的。
adb server
從圖中振劳,我們同樣可以知道椎组,Server也是作為一個(gè)后臺(tái)的程序運(yùn)行在PC端的,他負(fù)責(zé)管理Client進(jìn)程以及adb daemon之間的通信历恐。
當(dāng)一個(gè)Server開(kāi)啟的時(shí)候寸癌,他會(huì)自動(dòng)綁定并且監(jiān)聽(tīng)5037端口,接收Client通過(guò)該端口發(fā)送過(guò)來(lái)的命令弱贼。同時(shí)Server還會(huì)對(duì)5555-5585間的奇數(shù)端口進(jìn)行掃描蒸苇,進(jìn)行對(duì)已連接設(shè)備的定位。
Android adb命令大全
通過(guò)ADB命令查看wifi密碼吮旅、MAC地址溪烤、設(shè)備信息、操作文件庇勃、查看文件檬嘀、日志信息、卸載责嚷、啟動(dòng)和安裝APK等鸳兽。
獲取序列號(hào):
adb get-serialno
查看連接計(jì)算機(jī)的設(shè)備:
adb devices
重啟機(jī)器:
adb reboot
查看log:
adb logcat
終止adb服務(wù)進(jìn)程:
adb kill-server
- 重啟adb服務(wù)進(jìn)程:
adb start-server
獲取機(jī)器MAC地址:
adb shell cat /sys/class/net/wlan0/address
獲取CPU序列號(hào):
adb shell cat /proc/cpuinfo
安裝APK:
adb install <apkfile> //比如:adb install baidu.apk
10 .保留數(shù)據(jù)和緩存文件,重新安裝apk:
adb install -r <apkfile> //比如:adb install -r baidu.apk
- 安裝apk到sd卡:
adb install -s <apkfile> // 比如:adb install -s baidu.apk
卸載APK:
adb uninstall <package> //比如:adb uninstall com.baidu.search
卸載app但保留數(shù)據(jù)和緩存文件:
adb uninstall -k <package> //比如:adb uninstall -k com.baidu.search
啟動(dòng)應(yīng)用:
adb shell am start -n <package_name>/.<activity_class_name>
查看設(shè)備cpu和內(nèi)存占用情況:
adb shell top
查看占用內(nèi)存前6的app:
adb shell top -m 6
查詢各進(jìn)程內(nèi)存使用情況:
adb shell procrank
殺死一個(gè)進(jìn)程:
adb shell kill [pid]
查看進(jìn)程列表:
adb shell ps
查看后臺(tái)services信息:
adb shell service list
查看當(dāng)前內(nèi)存占用:
adb shell cat /proc/meminfo
從本地復(fù)制文件到設(shè)備:
adb push <local> <remote>
從設(shè)備復(fù)制文件到本地:
adb pull <remote> <local>
發(fā)出 shell 命令
可以使用 shell 命令通過(guò) adb 發(fā)出設(shè)備命令罕拂,可以進(jìn)入或不進(jìn)入模擬器/設(shè)備實(shí)例上的 adb 遠(yuǎn)程 shell揍异。要在不進(jìn)入遠(yuǎn)程 shell 的情況下發(fā)出一個(gè)命令,請(qǐng)使用如下 shell 命令:
adb [-d|-e|-s serial_number] shell shell_command
或者爆班,使用如下命令進(jìn)入模擬器/設(shè)備實(shí)例上的遠(yuǎn)程 shell:
adb [-d|-e|-s serial_number] shell
shell 命令二進(jìn)制文件存儲(chǔ)在模擬器或設(shè)備的文件系統(tǒng)中蒿秦,其路徑為 /system/bin/
。
調(diào)用 Activity Manager
在 adb shell 中蛋济,您可以使用 Activity Manager (am) 工具發(fā)出命令以執(zhí)行各種系統(tǒng)操作棍鳖,如啟動(dòng) Activity、強(qiáng)行停止進(jìn)程、廣播 intent渡处、修改設(shè)備屏幕屬性及其他操作镜悉。在 shell 中,此語(yǔ)法為:
am command
您也可以直接從 adb 發(fā)出 Activity Manager 命令医瘫,無(wú)需進(jìn)入遠(yuǎn)程 shell侣肄。例如:
adb shell am start -a android.intent.action.VIEW
調(diào)用軟件包管理器
在 adb shell 中,您可以使用軟件包管理器 (pm) 工具發(fā)出命令醇份,以對(duì)設(shè)備上安裝的應(yīng)用軟件包進(jìn)行操作和查詢稼锅。在 shell 中,此語(yǔ)法為:
pm command
您也可以直接從 adb 發(fā)出軟件包管理器命令僚纷,無(wú)需進(jìn)入遠(yuǎn)程 shell矩距。例如:
adb shell pm uninstall com.example.MyApp
進(jìn)行屏幕截圖
screencap 命令是一個(gè)用于對(duì)設(shè)備顯示屏進(jìn)行屏幕截圖的 shell 實(shí)用程序。在 shell 中怖竭,此語(yǔ)法為:
screencap filenam
要從命令行使用 screencap锥债,請(qǐng)輸入以下命令:
$ adb shell screencap /sdcard/screen.png
以下屏幕截圖會(huì)話示例向您展示使用 adb shell 捕獲屏幕截圖,并使用 pull 命令從設(shè)備下載此文件:
$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png