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