adb的全稱為AndroidDebugBridge,譯為android調(diào)試橋,就是在android系統(tǒng)中起到調(diào)試橋的作用。通過(guò)adb我們可以在Eclipse中方便通過(guò)DDMS來(lái)調(diào)試Android程序,說(shuō)白了就是debug工具。
adb是一個(gè)客戶端-服務(wù)器端程序,其中客戶端是你用來(lái)操作的電腦,服務(wù)器端是android設(shè)備。
下面詳細(xì)介紹下adb的使用方法
在您的設(shè)備上啟用adb調(diào)試
要在通過(guò)USB連接的設(shè)備上使用adb,您必須在設(shè)備系統(tǒng)設(shè)置中啟用USBdebugging(位于Developeroptions下)。
在運(yùn)行Android4.2及更高版本的設(shè)備上,Developeroptions屏幕默認(rèn)情況下處于隱藏狀態(tài)。如需將其顯示出來(lái),請(qǐng)轉(zhuǎn)到Settings》Aboutphone并點(diǎn)按Buildnumber七次。返回上一屏幕,在底部可以找到Developeroptions。
在某些設(shè)備上,Developeroptions屏幕所在的位置或命名方式可能有所不同。
現(xiàn)在,您可以將設(shè)備與USB連接??梢詮腶ndroid_sdk/platform-tools/目錄執(zhí)行adbdevices來(lái)驗(yàn)證設(shè)備是否連接。如果已連接,您將看到設(shè)備名稱以“設(shè)備”形式列示。
注:當(dāng)您連接運(yùn)行Android4.2.2或更高版本的設(shè)備時(shí),系統(tǒng)將顯示一個(gè)對(duì)話框,詢問(wèn)您是否接受允許在這臺(tái)計(jì)算機(jī)上調(diào)試的RSA密鑰。這種安全機(jī)制可以保護(hù)用戶設(shè)備,因?yàn)樗梢源_保只有在您能夠解鎖設(shè)備并確認(rèn)對(duì)話框的情況下才能執(zhí)行USB調(diào)試和其他ADB命令。
如需了解有關(guān)通過(guò)USB連接到設(shè)備的詳細(xì)信息,請(qǐng)參閱在硬件設(shè)備上運(yùn)行應(yīng)用。
通過(guò)WLAN連接到設(shè)備
一般情況下,通過(guò)USB使用adb。不過(guò),也可以按照下面的說(shuō)明通過(guò)WLAN使用它。
將Android設(shè)備和adb主計(jì)算機(jī)連接到這兩者都可以訪問(wèn)的常用WLAN網(wǎng)絡(luò)。請(qǐng)注意,并非所有訪問(wèn)點(diǎn)均適用;您可能需要使用已正確配置防火墻的訪問(wèn)點(diǎn)以支持adb的訪問(wèn)點(diǎn)。
注:如果您嘗試連接到AndroidWear設(shè)備,則通過(guò)關(guān)閉與其連接的手機(jī)的藍(lán)牙強(qiáng)制將它連接到WLAN。
使用USB電纜將設(shè)備連接到主計(jì)算機(jī)。
設(shè)置目標(biāo)設(shè)備以偵聽端口5555上的TCP/IP連接。
$adbtcpip5555
從目標(biāo)設(shè)備斷開USB電纜連接。
查找Android設(shè)備的IP地址。例如,在Nexus設(shè)備上,您可以通過(guò)訪問(wèn)Settings》Abouttablet(或Aboutphone)》Status》IPaddress查找IP地址?;蛘?,在AndroidWear設(shè)備上,您可以通過(guò)訪問(wèn)Settings》Wi-FiSettings》Advanced》IPaddress查找IP地址。
連接至設(shè)備,通過(guò)IP地址識(shí)別此設(shè)備。
$adbconnectdevice_ip_address
請(qǐng)確認(rèn)您的主計(jì)算機(jī)已連接至目標(biāo)設(shè)備:
$adbdevices
Listofdevicesattached
device_ip_address:5555device
現(xiàn)在,您可以開始操作了!
如果adb連接丟失:
請(qǐng)確保您的主機(jī)仍與您的Android設(shè)備連接到同一個(gè)WLAN網(wǎng)絡(luò)。
通過(guò)再次執(zhí)行adbconnect步驟重新連接。
如果無(wú)法連接,則重置adb主機(jī):
adbkill-server
然后,從頭開始操作。
查詢?cè)O(shè)備
在發(fā)出adb命令之前,知道哪些模擬器/設(shè)備實(shí)例已連接到adb服務(wù)器會(huì)很有幫助。您可以使用devices命令生成已連接的模擬器/設(shè)備的列表:
adbdevices
在響應(yīng)時(shí),adb針對(duì)每個(gè)實(shí)例輸出此狀態(tài)信息:
序列號(hào)—一個(gè)由adb創(chuàng)建的字符串,用于通過(guò)其控制臺(tái)端口號(hào)唯一標(biāo)識(shí)模擬器/設(shè)備實(shí)例。序列號(hào)的格式為type-console-port。下面是一個(gè)序列號(hào)示例:emulator-5554
狀態(tài)—實(shí)例的連接狀態(tài)可為下列狀態(tài)之一:
offline—實(shí)例未連接到adb或不響應(yīng)。
device—實(shí)例現(xiàn)在已連接到adb服務(wù)器。請(qǐng)注意,此狀態(tài)并不表示Android系統(tǒng)已完全啟動(dòng)且可以運(yùn)行,因?yàn)樵诖藢?shí)例連接到adb時(shí)系統(tǒng)仍在啟動(dòng)。不過(guò),在啟動(dòng)后,這將是模擬器/設(shè)備實(shí)例的正常運(yùn)行狀態(tài)。
nodevice—未連接模擬器/設(shè)備。
輸出的格式類似如下:
Listofdevicesattached
serial_numberstate
以下示例向您展示了devices命令及其輸出:
adbdevices
Listofdevicesattached
emulator-5554device
emulator-5556device
emulator-5558device
將命令發(fā)送至特定設(shè)備
如果多個(gè)模擬器/設(shè)備實(shí)例正在運(yùn)行,在發(fā)出adb命令時(shí)您必須指定一個(gè)目標(biāo)實(shí)例。為此,請(qǐng)?jiān)诿钪惺褂?s選項(xiàng)。以下是-s選項(xiàng)的用法:
adb-sserial_numbercommand
如上所示,您使用由adb分配的序列號(hào)為命令指定目標(biāo)實(shí)例。您可使用devices命令獲取正在運(yùn)行的模擬器/設(shè)備實(shí)例的序列號(hào)。例如:
adb-semulator-5556installhelloWorld.apk
注意,如果在多個(gè)設(shè)備可用時(shí)您未指定目標(biāo)模擬器/設(shè)備實(shí)例就發(fā)出命令,那么adb將生成一個(gè)錯(cuò)誤。
如果您有多個(gè)設(shè)備可用(硬件或模擬設(shè)備),但只有一個(gè)設(shè)備是模擬器,則使用-e選項(xiàng)將命令發(fā)送至該模擬器。同樣,如果有多個(gè)設(shè)備,但只連接了一個(gè)硬件設(shè)備,則使用-d選項(xiàng)將命令發(fā)送至該硬件設(shè)備。
安裝應(yīng)用
您可以使用adb從開發(fā)計(jì)算機(jī)復(fù)制應(yīng)用,并將其安裝到模擬器/設(shè)備實(shí)例上。為此,請(qǐng)使用install命令。使用此命令,您必須指定您要安裝的APK文件的路徑:
adbinstallpath_to_apk
如需有關(guān)如何創(chuàng)建可在模擬器/設(shè)備實(shí)例上安裝的APK文件的詳細(xì)信息,請(qǐng)參閱構(gòu)建和運(yùn)行您的應(yīng)用。
請(qǐng)注意,如果使用AndroidStudio,則無(wú)需直接使用adb(或aapt)在模擬器/設(shè)備上安裝您的應(yīng)用。而是由AndroidStudio為您處理應(yīng)用的打包和安裝。
設(shè)置端口轉(zhuǎn)發(fā)
您可以使用forward命令設(shè)置任意端口轉(zhuǎn)發(fā)—將對(duì)特定主機(jī)端口的請(qǐng)求轉(zhuǎn)發(fā)到模擬器/設(shè)備實(shí)例上的其他端口。下面向您介紹如何設(shè)置主機(jī)端口6100到模擬器/設(shè)備端口7100的轉(zhuǎn)發(fā):
adbforwardtcp:6100tcp:7100
您也可以使用adb設(shè)置傳輸?shù)街付ǖ某橄骍NIX網(wǎng)域套接字的轉(zhuǎn)發(fā),如下所示:
adbforwardtcp:6100local:logd
將文件復(fù)制到設(shè)備/從設(shè)備復(fù)制文件
您可以使用adb命令pull和push將文件復(fù)制到模擬器/設(shè)備實(shí)例或從其中復(fù)制文件。與install命令不同(其僅將APK文件復(fù)制到特定位置),pull和push命令允許您將任意目錄和文件復(fù)制到模擬器/設(shè)備實(shí)例中的任意位置。
要從模擬器或設(shè)備復(fù)制文件或目錄(及其子目錄),請(qǐng)使用
adbpullremotelocal
要將文件文件或目錄(及其子目錄)復(fù)制到模擬器或設(shè)備,請(qǐng)使用
adbpushlocalremote
在上述命令中,local和remote指的是開發(fā)計(jì)算機(jī)(本地)和模擬器/設(shè)備實(shí)例(遠(yuǎn)程)上目標(biāo)文件/目錄的路徑。例如:
adbpushfoo.txt/sdcard/foo.txt
停止adb服務(wù)器
在某些情況下,您可能需要終止adb服務(wù)器進(jìn)程,然后重啟它以解決問(wèn)題(例如,如果adb不響應(yīng)命令)。
要停止adb服務(wù)器,請(qǐng)使用adbkill-server命令。然后,您可以通過(guò)發(fā)出任意其他adb命令重啟服務(wù)器。
adb命令參考
您可以在開發(fā)計(jì)算機(jī)上從命令行發(fā)出adb命令,或通過(guò)腳本發(fā)出。用法如下:
adb[-d|-e|-sserial_number]command
如果只有一個(gè)模擬器在運(yùn)行或只連接了一個(gè)設(shè)備,則默認(rèn)情況下將adb命令發(fā)送至該設(shè)備。如果有多個(gè)模擬器在運(yùn)行和/或連接了多個(gè)設(shè)備,您需要使用-d、-e或-s選項(xiàng)指定應(yīng)向其發(fā)送命令的目標(biāo)設(shè)備。
發(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|-sserial_number]shellshell_command
或者,使用如下命令進(jìn)入模擬器/設(shè)備實(shí)例上的遠(yuǎn)程shell:
adb[-d|-e|-sserial_number]shell
當(dāng)您準(zhǔn)備退出遠(yuǎn)程shell時(shí),按Control+D或輸入exit。
shell命令二進(jìn)制文件存儲(chǔ)在模擬器或設(shè)備的文件系統(tǒng)中,其路徑為/system/bin/。
調(diào)用ActivityManager(am)
在adbshell中,您可以使用ActivityManager(am)工具發(fā)出命令以執(zhí)行各種系統(tǒng)操作,如啟動(dòng)Activity、強(qiáng)行停止進(jìn)程、廣播intent、修改設(shè)備屏幕屬性及其他操作。在shell中,此語(yǔ)法為:
amcommand
您也可以直接從adb發(fā)出ActivityManager命令,無(wú)需進(jìn)入遠(yuǎn)程shell。例如:
adbshellamstart-aandroid.intent.action.VIEW
調(diào)用軟件包管理器(pm)
在adbshell中,您可以使用軟件包管理器(pm)工具發(fā)出命令,以對(duì)設(shè)備上安裝的應(yīng)用軟件包進(jìn)行操作和查詢。在shell中,此語(yǔ)法為:
pmcommand
您也可以直接從adb發(fā)出軟件包管理器命令,無(wú)需進(jìn)入遠(yuǎn)程shell。例如:
adbshellpmuninstallcom.example.MyApp
進(jìn)行屏幕截圖
screencap命令是一個(gè)用于對(duì)設(shè)備顯示屏進(jìn)行屏幕截圖的shell實(shí)用程序。在shell中,此語(yǔ)法為:
screencapfilename
要從命令行使用screencap,請(qǐng)輸入以下命令:
$adbshellscreencap/sdcard/screen.png
以下屏幕截圖會(huì)話示例向您展示使用adbshell捕獲屏幕截圖,并使用pull命令從設(shè)備下載此文件:
$adbshell
shell@$screencap/sdcard/screen.png
shell@$exit
$adbpull/sdcard/screen.png
錄制視頻
screenrecord命令是一個(gè)用于錄制設(shè)備(運(yùn)行Android4.4(API級(jí)別19)及更高版本)顯示屏的shell實(shí)用程序。此實(shí)用程序?qū)⑵聊籄ctivity錄制到MPEG-4文件。
注:音頻不與視頻文件一起錄制。
開發(fā)者可以使用此文件創(chuàng)建宣傳視頻或培訓(xùn)視頻。在shell中,此語(yǔ)法為:
screenrecord[options]filename
要從命令行使用screenrecord,請(qǐng)輸入以下命令:
$adbshellscreenrecord/sdcard/demo.mp4
按Control+C停止屏幕錄制,否則,到三分鐘或--time-limit設(shè)置的時(shí)間限制時(shí),錄制將自動(dòng)停止。
要開始錄制設(shè)備屏幕,請(qǐng)運(yùn)行screenrecord命令以錄制視頻。然后,運(yùn)行pull命令從設(shè)備將此視頻下載到主計(jì)算機(jī)。下面是一個(gè)錄制會(huì)話示例:
$adbshell
shell@$screenrecord--verbose/sdcard/demo.mp4
?。╬ressControl+Ctostop)
shell@$exit
$adbpull/sdcard/demo.mp4
screenrecord實(shí)用程序可以任何支持的分辨率和所需的比特率進(jìn)行錄制,同時(shí)保留設(shè)備顯示屏的縱橫比。默認(rèn)情況下,此實(shí)用程序以原生顯示分辨率和屏幕方向進(jìn)行錄制,最大時(shí)長(zhǎng)為三分鐘。
下面是screenrecord實(shí)用程序的一些已知限制,您在使用時(shí)應(yīng)注意:
某些設(shè)備可能無(wú)法以它們的原生顯示分辨率進(jìn)行錄制。如果在錄制屏幕時(shí)出現(xiàn)問(wèn)題,請(qǐng)嘗試使用較低的屏幕分辨率。
不支持在錄制時(shí)旋轉(zhuǎn)屏幕。如果在錄制期間屏幕旋轉(zhuǎn)了,則部分屏幕的錄制將被切斷。
讀取應(yīng)用的ART配置文件
從Android7.0(API級(jí)別24)開始,AndroidRuntime(ART)會(huì)收集已安裝應(yīng)用的執(zhí)行配置文件,其可用于優(yōu)化應(yīng)用性能。您可能想要檢查收集的配置文件,以了解在應(yīng)用啟動(dòng)期間,系統(tǒng)決定頻繁執(zhí)行哪些方法和使用哪些類。
要生成配置文件信息的文本表單,請(qǐng)使用以下命令:
$adbshellcmdpackagedump-profilespackage
要檢索生成的文件,請(qǐng)使用:
$adbpull/data/misc/profman/package.txt
其他shell命令
如需所有可用shell程序的列表,請(qǐng)使用以下命令:
adbshellls/system/bin
大多數(shù)命令都提供幫助說(shuō)明。
評(píng)論