本帖最后由 Pretender. 于 2021-7-1 10:39 編輯
今天和大家一起深度學(xué)習(xí)一下安卓DIY利器:adb。
抖音搜索”拆修玩評(píng)“關(guān)注我看更多好玩的知識(shí)和教程,一起來(lái)玩唄!
————————————我是分割線———————————————
Android 調(diào)試橋 (adb) 是一種功能多樣的命令行工具,可讓您與設(shè)備進(jìn)行通信。adb 命令可用于執(zhí)行各種設(shè)備操作(例如安裝和調(diào)試應(yīng)用),并提供對(duì) Unix shell(可用來(lái)在設(shè)備上運(yùn)行各種命令)的訪問(wèn)權(quán)限。它是一種客戶(hù)端-服務(wù)器程序,包括以下三個(gè)組件: - 客戶(hù)端:用于發(fā)送命令。客戶(hù)端在開(kāi)發(fā)計(jì)算機(jī)上運(yùn)行。您可以通過(guò)發(fā)出 adb 命令從命令行終端調(diào)用客戶(hù)端。
- 守護(hù)程序 (adbd):用于在設(shè)備上運(yùn)行命令。守護(hù)程序在每個(gè)設(shè)備上作為后臺(tái)進(jìn)程運(yùn)行。
- 服務(wù)器:用于管理客戶(hù)端與守護(hù)程序之間的通信。服務(wù)器在開(kāi)發(fā)機(jī)器上作為后臺(tái)進(jìn)程運(yùn)行。
adb 包含在 Android SDK 平臺(tái)工具軟件包中。您可以使用 [color=var(--devsite-link-color)]SDK 管理器下載此軟件包,該管理器會(huì)將其安裝在 android_sdk/platform-tools/ 下?;蛘撸绻枰?dú)立的 Android SDK 平臺(tái)工具軟件包,也可以[color=var(--devsite-link-color)]點(diǎn)擊此處進(jìn)行下載。 如需了解如何連接設(shè)備以使用 ADB,包括如何使用 Connection Assistant 對(duì)常見(jiàn)問(wèn)題進(jìn)行排查,請(qǐng)參閱[color=var(--devsite-link-color)]在硬件設(shè)備上運(yùn)行應(yīng)用。 adb 的工作原理當(dāng)您啟動(dòng)某個(gè) adb 客戶(hù)端時(shí),該客戶(hù)端會(huì)先檢查是否有 adb 服務(wù)器進(jìn)程正在運(yùn)行。如果沒(méi)有,它會(huì)啟動(dòng)服務(wù)器進(jìn)程。服務(wù)器在啟動(dòng)后會(huì)與本地 TCP 端口 5037 綁定,并監(jiān)聽(tīng) adb 客戶(hù)端發(fā)出的命令 - 所有 adb 客戶(hù)端均通過(guò)端口 5037 與 adb 服務(wù)器通信。 然后,服務(wù)器會(huì)與所有正在運(yùn)行的設(shè)備建立連接。它通過(guò)掃描 5555 到 5585 之間(該范圍供前 16 個(gè)模擬器使用)的奇數(shù)號(hào)端口查找模擬器。服務(wù)器一旦發(fā)現(xiàn) adb 守護(hù)程序 (adbd),便會(huì)與相應(yīng)的端口建立連接。請(qǐng)注意,每個(gè)模擬器都使用一對(duì)按順序排列的端口 - 用于控制臺(tái)連接的偶數(shù)號(hào)端口和用于 adb 連接的奇數(shù)號(hào)端口。例如: 模擬器 1,控制臺(tái):5554
模擬器 1,adb:5555
模擬器 2,控制臺(tái):5556
模擬器 2,adb:5557
依此類(lèi)推 如上所示,在端口 5555 處與 adb 連接的模擬器與控制臺(tái)監(jiān)聽(tīng)端口為 5554 的模擬器是同一個(gè)。 服務(wù)器與所有設(shè)備均建立連接后,您便可以使用 adb 命令訪問(wèn)這些設(shè)備。由于服務(wù)器管理與設(shè)備的連接,并處理來(lái)自多個(gè) adb 客戶(hù)端的命令,因此您可以從任意客戶(hù)端(或從某個(gè)腳本)控制任意設(shè)備。 在設(shè)備上啟用 adb 調(diào)試如要在通過(guò) USB 連接的設(shè)備上使用 adb,您必須在設(shè)備的系統(tǒng)設(shè)置中啟用 USB 調(diào)試(位于開(kāi)發(fā)者選項(xiàng)下)。如需在通過(guò) WLAN 連接的設(shè)備上使用 adb,請(qǐng)參閱[color=var(--devsite-link-color)]通過(guò) WLAN 連接到設(shè)備。 在搭載 Android 4.2 及更高版本的設(shè)備上,“開(kāi)發(fā)者選項(xiàng)”屏幕默認(rèn)情況下處于隱藏狀態(tài)。如需將其顯示出來(lái),請(qǐng)依次轉(zhuǎn)到設(shè)置 > 關(guān)于手機(jī),然后點(diǎn)按版本號(hào)七次。返回上一屏幕,在底部可以找到開(kāi)發(fā)者選項(xiàng)。 在某些設(shè)備上,“開(kāi)發(fā)者選項(xiàng)”屏幕所在的位置或名稱(chēng)可能有所不同。 現(xiàn)在,您已經(jīng)可以通過(guò) USB 連接設(shè)備。您可以通過(guò)從 android_sdk/platform-tools/ 目錄執(zhí)行 adb devices 驗(yàn)證設(shè)備是否已連接。如果已連接,您將看到設(shè)備名稱(chēng)以“設(shè)備”形式列出。 [color=var(--devsite-note-notice-color)]注意:當(dāng)您連接搭載 Android 4.2.2 或更高版本的設(shè)備時(shí),系統(tǒng)會(huì)顯示一個(gè)對(duì)話框,詢(xún)問(wèn)您是否接受允許通過(guò)此計(jì)算機(jī)進(jìn)行調(diào)試的 RSA 密鑰。這種安全機(jī)制可以保護(hù)用戶(hù)設(shè)備,因?yàn)樗梢源_保只有在您能夠解鎖設(shè)備并確認(rèn)對(duì)話框的情況下才能執(zhí)行 USB 調(diào)試和其他 adb 命令。 要詳細(xì)了解如何通過(guò) USB 連接到設(shè)備,請(qǐng)參閱[color=var(--devsite-link-color)]在硬件設(shè)備上運(yùn)行應(yīng)用。 通過(guò) Wi-Fi 連接到設(shè)備(Android 11 及更高版本)Android 11 及更高版本支持使用 Android 調(diào)試橋 (adb) 從工作站以無(wú)線方式部署和調(diào)試應(yīng)用。例如,您可以將可調(diào)試應(yīng)用部署到多臺(tái)遠(yuǎn)程設(shè)備,而無(wú)需通過(guò) USB 實(shí)際連接設(shè)備。這樣就可以避免常見(jiàn)的 USB 連接問(wèn)題,例如驅(qū)動(dòng)程序安裝方面的問(wèn)題。 如需使用無(wú)線調(diào)試,您需要使用配對(duì)碼將您的設(shè)備與工作站配對(duì)。您的工作站和設(shè)備必須連接到同一無(wú)線網(wǎng)絡(luò)。如需連接到您的設(shè)備,請(qǐng)按以下步驟操作: 圖 1. 無(wú)線 ADB 配對(duì)對(duì)話框。
- 在您的工作站上,更新到最新版本的 [color=var(--devsite-link-color)]SDK 平臺(tái)工具。
- 在設(shè)備上啟用[color=var(--devsite-link-color)]開(kāi)發(fā)者選項(xiàng)。
- 啟用無(wú)線調(diào)試選項(xiàng)。
- 在詢(xún)問(wèn)要允許在此網(wǎng)絡(luò)上進(jìn)行無(wú)線調(diào)試嗎?的對(duì)話框中,點(diǎn)擊允許。
- 選擇使用配對(duì)碼配對(duì)設(shè)備。記下設(shè)備上顯示的配對(duì)碼、IP 地址和端口號(hào)(參見(jiàn)圖片)。
- 在工作站上,打開(kāi)一個(gè)終端并導(dǎo)航到 android_sdk/platform-tools。
- 運(yùn)行 adb pair ipaddr:port。 使用第 5 步中的 IP 地址和端口號(hào)。
- 當(dāng)系統(tǒng)提示時(shí),輸入您在第 5 步中獲得的配對(duì)碼。系統(tǒng)會(huì)顯示一條消息,表明您的設(shè)備已成功配對(duì)。 none Enter pairing code: 482924 Successfully paired to 192.168.1.130:37099 [guid=adb-235XY]
- (僅適用于 Linux 或 Microsoft Windows)運(yùn)行 adb connect ipaddr:port。使用無(wú)線調(diào)試下的 IP 地址和端口。
圖 2. 無(wú)線 adb IP 地址和端口號(hào)。
通過(guò) WLAN 連接到設(shè)備(Android 10 及更低版本)一般情況下,adb 通過(guò) USB 與設(shè)備進(jìn)行通信,但您也可以在以下情況下通過(guò) WLAN 使用 adb: - 如需連接到搭載 Android 11(及更高版本)的設(shè)備,請(qǐng)參閱[color=var(--devsite-link-color)]在硬件設(shè)備上運(yùn)行應(yīng)用的“WLAN”部分。
- 如要連接到搭載早期 Android 版本的設(shè)備,您必須通過(guò) USB 執(zhí)行一些初始步驟。下文對(duì)這些步驟做了說(shuō)明。
- 如果您開(kāi)發(fā)的是 Wear OS 應(yīng)用,請(qǐng)參閱[color=var(--devsite-link-color)]調(diào)試 Wear OS 應(yīng)用指南,其中提供了有關(guān)如何通過(guò) WLAN 和藍(lán)牙使用 adb 的特別說(shuō)明。
- 將 Android 設(shè)備和 adb 主機(jī)連接到這兩者都可以訪問(wèn)的同一 WLAN 網(wǎng)絡(luò)。請(qǐng)注意,并非所有接入點(diǎn)都適用;您可能需要使用防火墻已正確配置為支持 adb 的接入點(diǎn)。
- 如果您要連接到 Wear OS 設(shè)備,請(qǐng)關(guān)閉手機(jī)上與該設(shè)備配對(duì)的藍(lán)牙。
- 使用 USB 線將設(shè)備連接到主機(jī)。
- 設(shè)置目標(biāo)設(shè)備以監(jiān)聽(tīng)端口 5555 上的 TCP/IP 連接。adb tcpip 5555
- 拔掉連接目標(biāo)設(shè)備的 USB 線。
- 找到 Android 設(shè)備的 IP 地址。例如,對(duì)于 Nexus 設(shè)備,您可以在設(shè)置 > 關(guān)于平板電腦(或關(guān)于手機(jī))> 狀態(tài) > IP 地址下找到 IP 地址?;蛘?,對(duì)于 Wear OS 設(shè)備,您可以在設(shè)置 > WLAN 設(shè)置 > 高級(jí) > IP 地址下找到 IP 地址。
- 通過(guò) IP 地址連接到設(shè)備。adb connect device_ip_address
- 確認(rèn)主機(jī)已連接到目標(biāo)設(shè)備:$ adb devicesList of devices attacheddevice_ip_address:5555 device
現(xiàn)在,您可以開(kāi)始操作了! 如果 adb 連接斷開(kāi): - 確保主機(jī)仍與 Android 設(shè)備連接到同一個(gè) WLAN 網(wǎng)絡(luò)。
- 通過(guò)再次執(zhí)行 adb connect 步驟重新連接。
- 如果上述操作未解決問(wèn)題,重置 adb 主機(jī):adb kill-server
然后,從頭開(kāi)始操作。
查詢(xún)?cè)O(shè)備在發(fā)出 adb 命令之前,了解哪些設(shè)備實(shí)例已連接到 adb 服務(wù)器會(huì)很有幫助。您可以使用 devices 命令生成已連接設(shè)備的列表。 adb devices -l 作為回應(yīng),adb 會(huì)針對(duì)每個(gè)設(shè)備輸出以下?tīng)顟B(tài)信息: - 序列號(hào):由 adb 創(chuàng)建的字符串,用于通過(guò)端口號(hào)唯一標(biāo)識(shí)設(shè)備。 下面是一個(gè)序列號(hào)示例:emulator-5554
- 狀態(tài):設(shè)備的連接狀態(tài)可以是以下幾項(xiàng)之一:
- offline:設(shè)備未連接到 adb 或沒(méi)有響應(yīng)。
- device:設(shè)備現(xiàn)已連接到 adb 服務(wù)器。請(qǐng)注意,此狀態(tài)并不表示 Android 系統(tǒng)已完全啟動(dòng)并可正常運(yùn)行,因?yàn)樵谠O(shè)備連接到 adb 時(shí)系統(tǒng)仍在啟動(dòng)。不過(guò),在啟動(dòng)后,這將是設(shè)備的正常運(yùn)行狀態(tài)。
- no device:未連接任何設(shè)備。
- 說(shuō)明:如果您包含 -l 選項(xiàng),devices 命令會(huì)告知您設(shè)備是什么。當(dāng)您連接了多個(gè)設(shè)備時(shí),此信息很有用,可幫助您將它們區(qū)分開(kāi)來(lái)。
以下示例展示了 devices 命令及其輸出。有三個(gè)設(shè)備正在運(yùn)行。列表中的前兩行表示模擬器,第三行表示連接到計(jì)算機(jī)的硬件設(shè)備。 $ adb devicesList of devices attachedemulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x860a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo模擬器未列出adb devices 命令的極端命令序列會(huì)導(dǎo)致正在運(yùn)行的模擬器不顯示在 adb devices 輸出中(即使在您的桌面上可以看到該模擬器)。當(dāng)滿(mǎn)足以下所有條件時(shí),就會(huì)發(fā)生這種情況: - adb 服務(wù)器未在運(yùn)行,
- 您在使用 emulator 命令時(shí),將 -port 或 -ports 選項(xiàng)的端口值設(shè)為 5554 到 5584 之間的奇數(shù),
- 您選擇的奇數(shù)號(hào)端口處于空閑狀態(tài),因此可以與指定端口號(hào)的端口建立連接,或者該端口處于忙碌狀態(tài),模擬器切換到了符合第 2 條中要求的另一個(gè)端口,以及
- 啟動(dòng)模擬器后才啟動(dòng) adb 服務(wù)器。
避免出現(xiàn)這種情況的一種方法是讓模擬器自行選擇端口,并且每次運(yùn)行的模擬器數(shù)量不要超過(guò) 16 個(gè)。另一種方法是始終先啟動(dòng) adb 服務(wù)器,然后再使用 emulator 命令,如下例所示。 示例 1:在下面的命令序列中,adb devices 命令啟動(dòng)了 adb 服務(wù)器,但是設(shè)備列表未顯示。 停止 adb 服務(wù)器,然后按照所示順序輸入以下命令。對(duì)于 avd 名稱(chēng),請(qǐng)?zhí)峁┫到y(tǒng)中有效的 avd 名稱(chēng)。如需獲取 avd 名稱(chēng)列表,請(qǐng)輸入 emulator -list-avds。 emulator 命令位于 android_sdk/tools 目錄下。 $ adb kill-server$ emulator -avd Nexus_6_API_25 -port 5555$ adb devicesList of devices attached* daemon not running. starting it now on port 5037 ** daemon started successfully *示例 2:在下面的命令序列中,adb devices 顯示了設(shè)備列表,因?yàn)橄葐?dòng)了 adb 服務(wù)器。 如果想在 adb devices 輸出中看到模擬器,請(qǐng)停止 adb 服務(wù)器,然后在使用 emulator 命令之后、使用 adb devices 命令之前,重新啟動(dòng)該服務(wù)器,如下所示: $ adb kill-server$ emulator -avd Nexus_6_API_25 -port 5557$ adb start-server$ adb devicesList of devices attachedemulator-5557 device如需詳細(xì)了解模擬器命令行選項(xiàng),請(qǐng)參閱[color=var(--devsite-link-color)]使用命令行參數(shù)。 將命令發(fā)送至特定設(shè)備如果有多個(gè)設(shè)備在運(yùn)行,您在發(fā)出 adb 命令時(shí)必須指定目標(biāo)設(shè)備。為此,請(qǐng)使用 devices 命令獲取目標(biāo)設(shè)備的序列號(hào)。獲得序列號(hào)后,請(qǐng)結(jié)合使用 -s 選項(xiàng)與 adb 命令來(lái)指定序列號(hào)。如果您要發(fā)出很多 adb 命令,可以將 $ANDROID_SERIAL 環(huán)境變量設(shè)為包含序列號(hào)。如果您同時(shí)使用 -s 和 $ANDROID_SERIAL,-s 會(huì)替換 $ANDROID_SERIAL。 在以下示例中,先獲得了已連接設(shè)備的列表,然后使用其中一個(gè)設(shè)備的序列號(hào)在該設(shè)備上安裝了 helloWorld.apk。 $ adb devicesList of devices attachedemulator-5554 deviceemulator-5555 device$ adb -s emulator-5555 install helloWorld.apk[color=var(--devsite-note-notice-color)]注意:如果您在多個(gè)設(shè)備可用時(shí)發(fā)出命令但未指定目標(biāo)設(shè)備,adb 會(huì)生成錯(cuò)誤。 如果有多個(gè)可用設(shè)備,但只有一個(gè)是模擬器,請(qǐng)使用 -e 選項(xiàng)將命令發(fā)送至該模擬器。同樣,如果有多個(gè)設(shè)備,但只連接了一個(gè)硬件設(shè)備,請(qǐng)使用 -d 選項(xiàng)將命令發(fā)送至該硬件設(shè)備。 安裝應(yīng)用您可以使用 adb 的 install 命令在模擬器或連接的設(shè)備上安裝 APK: adb install path_to_apk安裝測(cè)試 APK 時(shí),必須在 install 命令中使用 -t 選項(xiàng)。如需了解詳情,請(qǐng)參閱 [color=var(--devsite-link-color)]-t。 要詳細(xì)了解如何創(chuàng)建可安裝在模擬器/設(shè)備實(shí)例上的 APK 文件,請(qǐng)參閱[color=var(--devsite-link-color)]構(gòu)建和運(yùn)行應(yīng)用。 請(qǐng)注意,如果您使用的是 Android Studio,則無(wú)需直接使用 adb 在模擬器/設(shè)備上安裝您的應(yīng)用。Android Studio 會(huì)為您執(zhí)行應(yīng)用的打包和安裝操作。 設(shè)置端口轉(zhuǎn)發(fā)您可以使用 forward 命令設(shè)置任意端口轉(zhuǎn)發(fā),將特定主機(jī)端口上的請(qǐng)求轉(zhuǎn)發(fā)到設(shè)備上的其他端口。以下示例設(shè)置了主機(jī)端口 6100 到設(shè)備端口 7100 的轉(zhuǎn)發(fā): adb forward tcp:6100 tcp:7100以下示例設(shè)置了主機(jī)端口 6100 到 local:logd 的轉(zhuǎn)發(fā): adb forward tcp:6100 local:logd將文件復(fù)制到設(shè)備/從設(shè)備復(fù)制文件您可以使用 pull 和 push 命令將文件復(fù)制到設(shè)備或從設(shè)備復(fù)制文件。與 install 命令(僅將 APK 文件復(fù)制到特定位置)不同,使用 pull 和 push 命令可將任意目錄和文件復(fù)制到設(shè)備中的任何位置。 如需從設(shè)備中復(fù)制某個(gè)文件或目錄(及其子目錄),請(qǐng)使用以下命令: adb pull remote local如需將某個(gè)文件或目錄(及其子目錄)復(fù)制到設(shè)備,請(qǐng)使用以下命令: adb push local remote將 local 和 remote 替換為開(kāi)發(fā)機(jī)器(本地)和設(shè)備(遠(yuǎn)程)上的目標(biāo)文件/目錄的路徑。例如: adb push foo.txt /sdcard/foo.txt停止 adb 服務(wù)器在某些情況下,您可能需要終止 adb 服務(wù)器進(jìn)程,然后重啟以解決問(wèn)題(例如,如果 adb 不響應(yīng)命令)。 如需停止 adb 服務(wù)器,請(qǐng)使用 adb kill-server 命令。然后,您可以通過(guò)發(fā)出其他任何 adb 命令來(lái)重啟服務(wù)器。 發(fā)出 adb 命令您可以從開(kāi)發(fā)機(jī)器上的命令行發(fā)出 adb 命令,也可以通過(guò)腳本發(fā)出。用法如下: adb [-d | -e | -s serial_number] command如果只有一個(gè)模擬器在運(yùn)行或者只連接了一個(gè)設(shè)備,系統(tǒng)會(huì)默認(rèn)將 adb 命令發(fā)送至該設(shè)備。如果有多個(gè)模擬器正在運(yùn)行并且/或者連接了多個(gè)設(shè)備,您需要使用 -d、-e 或 -s 選項(xiàng)指定應(yīng)向其發(fā)送命令的目標(biāo)設(shè)備。 您可以使用以下命令來(lái)查看所有支持的 adb 命令的詳細(xì)列表: adb --help發(fā)出 shell 命令您可以使用 shell 命令通過(guò) adb 發(fā)出設(shè)備命令,也可以啟動(dòng)交互式 shell。如需發(fā)出單個(gè)命令,請(qǐng)使用 shell 命令,如下所示: adb [-d |-e | -s serial_number] shell shell_command要在設(shè)備上啟動(dòng)交互式 shell,請(qǐng)使用 shell 命令,如下所示: adb [-d | -e | -s serial_number] shell要退出交互式 shell,請(qǐng)按 Ctrl + D 鍵或輸入 exit。 [color=var(--devsite-note-notice-color)]注意:在 Android 平臺(tái)工具 23 及更高版本中,adb 處理參數(shù)的方式與 ssh(1) 命令相同。這項(xiàng)變更解決了很多[color=var(--devsite-note-notice-color)]命令注入方面的問(wèn)題,還使安全執(zhí)行包含 shell [color=var(--devsite-note-notice-color)]元字符的命令(如 adb install Let\'sGo.apk)成為可能。不過(guò),這項(xiàng)變更還意味著,對(duì)包含 shell 元字符的所有命令的解釋也發(fā)生了變化。例如,adb shell setprop foo 'a b' 命令現(xiàn)在會(huì)返回錯(cuò)誤,因?yàn)閱我?hào) (') 會(huì)被本地 shell 消去,設(shè)備看到的是 adb shell setprop foo a b。如需使該命令正常運(yùn)行,請(qǐng)引用兩次,一次用于本地 shell,另一次用于遠(yuǎn)程 shell,與處理 ssh(1) 的方法相同。例如,adb shell setprop foo "'a b'"。 Android 提供了大多數(shù)常見(jiàn)的 Unix 命令行工具。如需查看可用工具的列表,請(qǐng)使用以下命令: adb shell ls /system/bin對(duì)于大多數(shù)命令,都可通過(guò) --help 參數(shù)獲得命令幫助。許多 shell 命令都由 [color=var(--devsite-link-color)]toybox 提供。對(duì)于所有 toybox 命令,都可通過(guò) toybox --help 可獲得命令的常規(guī)幫助。 另請(qǐng)參閱 [color=var(--devsite-link-color)]Logcat 命令行工具,該工具對(duì)監(jiān)控系統(tǒng)日志很有用。 調(diào)用 Activity 管理器 (am)在 adb shell 中,您可以使用 Activity 管理器 (am) 工具發(fā)出命令以執(zhí)行各種系統(tǒng)操作,如啟動(dòng) Activity、強(qiáng)行停止進(jìn)程、廣播 intent、修改設(shè)備屏幕屬性,等等。在 shell 中,相應(yīng)的語(yǔ)法為: am command您也可以直接從 adb 發(fā)出 Activity 管理器命令,無(wú)需進(jìn)入遠(yuǎn)程 shell。例如: adb shell am start -a android.intent.action.VIEW表 2. 可用的 Activity 管理器命令 命令 | 說(shuō)明 | start [options] intent | 啟動(dòng)由 intent 指定的 [color=var(--devsite-link-color)]Activity。 請(qǐng)參閱 [color=var(--devsite-link-color)]intent 參數(shù)的規(guī)范。 具體選項(xiàng)包括: - -D:?jiǎn)⒂谜{(diào)試功能。
- -W:等待啟動(dòng)完成。
- --start-profiler file:?jiǎn)?dòng)性能剖析器并將結(jié)果發(fā)送至 file。
- -P file:類(lèi)似于 --start-profiler,但當(dāng)應(yīng)用進(jìn)入空閑狀態(tài)時(shí)剖析停止。
- -R count:重復(fù)啟動(dòng) Activity count 次。在每次重復(fù)前,將完成頂層 Activity。
- -S:在啟動(dòng) Activity 前,強(qiáng)行停止目標(biāo)應(yīng)用。
- --opengl-trace:?jiǎn)⒂?OpenGL 函數(shù)的跟蹤。
- --user user_id | current:指定要作為哪個(gè)用戶(hù)運(yùn)行;如果未指定,則作為當(dāng)前用戶(hù)運(yùn)行。
| startservice [options] intent | 啟動(dòng)由 intent 指定的 [color=var(--devsite-link-color)]Service。 請(qǐng)參閱 [color=var(--devsite-link-color)]intent 參數(shù)的規(guī)范。 具體選項(xiàng)包括: - --user user_id | current:指定要作為哪個(gè)用戶(hù)運(yùn)行;如果未指定,則作為當(dāng)前用戶(hù)運(yùn)行。
| force-stop package | 強(qiáng)行停止與 package(應(yīng)用的軟件包名稱(chēng))關(guān)聯(lián)的所有進(jìn)程。 | kill [options] package | 終止與 package(應(yīng)用的軟件包名稱(chēng))關(guān)聯(lián)的所有進(jìn)程。此命令僅終止可安全終止且不會(huì)影響用戶(hù)體驗(yàn)的進(jìn)程。 具體選項(xiàng)包括: - --user user_id | all | current:指定要終止哪個(gè)用戶(hù)的進(jìn)程;如果未指定,則終止所有用戶(hù)的進(jìn)程。
| kill-all | 終止所有后臺(tái)進(jìn)程。 | broadcast [options] intent | 發(fā)出廣播 intent。 請(qǐng)參閱 [color=var(--devsite-link-color)]intent 參數(shù)的規(guī)范。 具體選項(xiàng)包括: - [--user user_id | all | current]:指定要發(fā)送給哪個(gè)用戶(hù);如果未指定,則發(fā)送給所有用戶(hù)。
| instrument [options] component | 使用 [color=var(--devsite-link-color)]Instrumentation 實(shí)例啟動(dòng)監(jiān)控。通常情況下,目標(biāo) component 采用 test_package/runner_class 格式。 具體選項(xiàng)包括: - -r:輸出原始結(jié)果(否則,對(duì) report_key_streamresult 進(jìn)行解碼)。與 [-e perf true] 結(jié)合使用可生成性能測(cè)量的原始輸出。
- -e name value:將參數(shù) name 設(shè)為 value。 對(duì)于測(cè)試運(yùn)行程序,通用格式為 -e testrunner_flag value[,value...]。
- -p file:將剖析數(shù)據(jù)寫(xiě)入 file。
- -w:等待插樁完成后再返回。測(cè)試運(yùn)行程序需要使用此選項(xiàng)。
- --no-window-animation:運(yùn)行時(shí)關(guān)閉窗口動(dòng)畫(huà)。
- --user user_id | current:指定以哪個(gè)用戶(hù)身份運(yùn)行插樁;如果未指定,則以當(dāng)前用戶(hù)身份運(yùn)行。
| profile start process file | 啟動(dòng) process 的性能剖析器,將結(jié)果寫(xiě)入 file。 | profile stop process | 停止 process 的性能剖析器。 | dumpheap [options] process file | 轉(zhuǎn)儲(chǔ) process 的堆,寫(xiě)入 file。 具體選項(xiàng)包括: - --user [user_id | current]:提供進(jìn)程名稱(chēng)時(shí),指定要轉(zhuǎn)儲(chǔ)的進(jìn)程的用戶(hù);如果未指定,則使用當(dāng)前用戶(hù)。
- -n:轉(zhuǎn)儲(chǔ)原生堆,而非托管堆。
| set-debug-app [options] package | 設(shè)置要調(diào)試的應(yīng)用 package。 具體選項(xiàng)包括: - -w:應(yīng)用啟動(dòng)時(shí)等待調(diào)試程序。
- --persistent:保留此值。
| clear-debug-app | 清除之前使用 set-debug-app 設(shè)置的待調(diào)試軟件包。 | monitor [options] | 開(kāi)始監(jiān)控崩潰或 ANR。 具體選項(xiàng)包括: - --gdb:在崩潰/ANR 時(shí),在給定的端口上啟動(dòng) gdbserv。
| screen-compat {on | off}package | 控制 package 的[color=var(--devsite-link-color)]屏幕兼容性模式。 | display-size [reset |widthxheight] | 替換設(shè)備顯示尺寸。此命令支持使用大屏設(shè)備模仿小屏幕分辨率(反之亦然),對(duì)于在不同尺寸的屏幕上測(cè)試應(yīng)用非常有用。 示例:
am display-size 1280x800 | display-density dpi | 替換設(shè)備顯示密度。此命令支持使用低密度屏幕在高密度屏幕環(huán)境上進(jìn)行測(cè)試(反之亦然),對(duì)于在不同密度的屏幕上測(cè)試應(yīng)用非常有用。 示例:
am display-density 480 | to-uri intent | 以 URI 的形式輸出給定的 intent 規(guī)范。 請(qǐng)參閱 [color=var(--devsite-link-color)]intent 參數(shù)的規(guī)范。 | to-intent-uri intent | 以 intent: URI 的形式輸出給定的 intent 規(guī)范。 請(qǐng)參閱 [color=var(--devsite-link-color)]intent 參數(shù)的規(guī)范。 |
intent 參數(shù)的規(guī)范對(duì)于采用 intent 參數(shù)的 Activity 管理器命令,您可以使用以下選項(xiàng)指定 intent: [color=var(--devsite-link-color)]全部顯示 調(diào)用軟件包管理器 (pm)在 adb shell 中,您可以使用軟件包管理器 (pm) 工具發(fā)出命令,以對(duì)設(shè)備上安裝的應(yīng)用軟件包執(zhí)行操作和查詢(xún)。在 shell 中,相應(yīng)的語(yǔ)法為: pm command您也可以直接從 adb 發(fā)出軟件包管理器命令,無(wú)需進(jìn)入遠(yuǎn)程 shell。例如: adb shell pm uninstall com.example.MyApp表 3. 可用的軟件包管理器命令。 命令 | 說(shuō)明 | list packages [options] filter | 輸出所有軟件包,或者,僅輸出軟件包名稱(chēng)包含 filter 中的文本的軟件包。 具體選項(xiàng): - -f:查看它們的關(guān)聯(lián)文件。
- -d:進(jìn)行過(guò)濾以?xún)H顯示已停用的軟件包。
- -e:進(jìn)行過(guò)濾以?xún)H顯示已啟用的軟件包。
- -s:進(jìn)行過(guò)濾以?xún)H顯示系統(tǒng)軟件包。
- -3:進(jìn)行過(guò)濾以?xún)H顯示第三方軟件包。
- -i:查看軟件包的安裝程序。
- -u:也包括已卸載的軟件包。
- --user user_id:要查詢(xún)的用戶(hù)空間。
| list permission-groups | 輸出所有已知的權(quán)限組。 | list permissions [options] group | 輸出所有已知的權(quán)限,或者,僅輸出 group 中的權(quán)限。 具體選項(xiàng): - -g:按組進(jìn)行整理。
- -f:輸出所有信息。
- -s:簡(jiǎn)短摘要。
- -d:僅列出危險(xiǎn)權(quán)限。
- -u:僅列出用戶(hù)將看到的權(quán)限。
| list instrumentation [options] | 列出所有測(cè)試軟件包。 具體選項(xiàng): - -f:列出測(cè)試軟件包的 APK 文件。
- target_package:僅列出此應(yīng)用的測(cè)試軟件包。
| list features | 輸出系統(tǒng)的所有功能。 | list libraries | 輸出當(dāng)前設(shè)備支持的所有庫(kù)。 | list users | 輸出系統(tǒng)中的所有用戶(hù)。 | path package | 輸出給定 package 的 APK 的路徑。 | install [options] path | 將軟件包(通過(guò) path 指定)安裝到系統(tǒng)。 具體選項(xiàng): | uninstall [options] package | 從系統(tǒng)中移除軟件包。 具體選項(xiàng): - -k:移除軟件包后保留數(shù)據(jù)和緩存目錄。
| clear package | 刪除與軟件包關(guān)聯(lián)的所有數(shù)據(jù)。 | enable package_or_component | 啟用給定的軟件包或組件(寫(xiě)為“package/class”)。 | disable package_or_component | 停用給定的軟件包或組件(寫(xiě)為“package/class”)。 | disable-user [options] package_or_component | 具體選項(xiàng): - --user user_id:要停用的用戶(hù)。
| grant package_name permission | 向應(yīng)用授予權(quán)限。在搭載 Android 6.0(API 級(jí)別 23)及更高版本的設(shè)備上,該權(quán)限可以是應(yīng)用清單中聲明的任何權(quán)限。在搭載 Android 5.1(API 級(jí)別 22)及更低版本的設(shè)備上,該權(quán)限必須是應(yīng)用定義的可選權(quán)限。 | revoke package_name permission | 從應(yīng)用撤消權(quán)限。在搭載 Android 6.0(API 級(jí)別 23)及更高版本的設(shè)備上,該權(quán)限可以是應(yīng)用清單中聲明的任何權(quán)限。在搭載 Android 5.1(API 級(jí)別 22)及更低版本的設(shè)備上,該權(quán)限必須是應(yīng)用定義的可選權(quán)限。 | set-install-location location | 更改默認(rèn)安裝位置。位置值如下:- 0:自動(dòng):讓系統(tǒng)決定最合適的位置。
- 1:內(nèi)部:在內(nèi)部設(shè)備存儲(chǔ)上安裝。
- 2:外部:在外部介質(zhì)上安裝。
[color=var(--devsite-note-notice-color)]注意:此命令僅用于調(diào)試目的;使用此命令可能會(huì)導(dǎo)致應(yīng)用中斷和其他意外行為。 | get-install-location | 返回當(dāng)前安裝位置。返回值如下:- 0 [auto]:讓系統(tǒng)決定最合適的位置
- 1 [internal]:在內(nèi)部設(shè)備存儲(chǔ)上安裝
- 2 [external]:在外部介質(zhì)上安裝
| set-permission-enforced permission [true | false] | 指定是否應(yīng)強(qiáng)制執(zhí)行指定權(quán)限。 | trim-caches desired_free_space | 減少緩存文件以達(dá)到給定的可用空間。 | create-user user_name | 創(chuàng)建具有給定 user_name 的新用戶(hù),從而輸出該用戶(hù)的新用戶(hù)標(biāo)識(shí)符。 | remove-user user_id | 移除具有給定 user_id 的用戶(hù),從而刪除與該用戶(hù)關(guān)聯(lián)的所有數(shù)據(jù)。 | get-max-users | 輸出設(shè)備支持的最大用戶(hù)數(shù)。 |
調(diào)用設(shè)備政策管理器 (dpm)為便于您開(kāi)發(fā)和測(cè)試設(shè)備管理(或其他企業(yè))應(yīng)用,您可以向設(shè)備政策管理器 (dpm) 工具發(fā)出命令。使用該工具可控制 活動(dòng)管理應(yīng)用,或更改設(shè)備上的政策狀態(tài)數(shù)據(jù)。在 shell 中,語(yǔ)法如下: dpm command您也可以直接從 adb 發(fā)出設(shè)備政策管理器命令,無(wú)需進(jìn)入遠(yuǎn)程 shell: adb shell dpm command表 4. 可用的設(shè)備政策管理器命令 命令 | 說(shuō)明 | set-active-admin [options] component | 將 component 設(shè)為活動(dòng)管理。 具體選項(xiàng)包括: - --user user_id:指定目標(biāo)用戶(hù)。您也可以傳遞 --user current以選擇當(dāng)前用戶(hù)。
| set-profile-owner [options] component | 將 component 設(shè)為活動(dòng)管理,并將其軟件包設(shè)為現(xiàn)有用戶(hù)的個(gè)人資料所有者。 具體選項(xiàng)包括: - --user user_id:指定目標(biāo)用戶(hù)。您也可以傳遞 --user current以選擇當(dāng)前用戶(hù)。
- --name name:指定簡(jiǎn)單易懂的組織名稱(chēng)。
| set-device-owner [options] component | 將 component 設(shè)為活動(dòng)管理,并將其軟件包設(shè)為設(shè)備所有者。 具體選項(xiàng)包括: - --user user_id:指定目標(biāo)用戶(hù)。您也可以傳遞 --user current以選擇當(dāng)前用戶(hù)。
- --name name:指定簡(jiǎn)單易懂的組織名稱(chēng)。
| remove-active-admin [options] component | 停用活動(dòng)管理。應(yīng)用必須在清單中聲明 [color=var(--devsite-link-color)]android:testOnly。此命令還會(huì)移除設(shè)備所有者和個(gè)人資料所有者。 具體選項(xiàng)包括: - --user user_id:指定目標(biāo)用戶(hù)。您也可以傳遞 --user current以選擇當(dāng)前用戶(hù)。
| clear-freeze-period-record | 清除設(shè)備之前設(shè)置的系統(tǒng) OTA 更新凍結(jié)期記錄。在開(kāi)發(fā)管理凍結(jié)期的應(yīng)用時(shí),這有助于避免設(shè)備存在調(diào)度方面的限制。請(qǐng)參閱[color=var(--devsite-link-color)]管理系統(tǒng)更新。 在搭載 Android 9.0(API 級(jí)別 28)及更高版本的設(shè)備上受支持。 | force-network-logs | 強(qiáng)制系統(tǒng)讓任何現(xiàn)有網(wǎng)絡(luò)日志隨時(shí)可供 DPC 檢索。如果有可用的連接或 DNS 日志,DPC 會(huì)收到 [color=var(--devsite-link-color)]onNetworkLogsAvailable() 回調(diào)。請(qǐng)參閱[color=var(--devsite-link-color)]網(wǎng)絡(luò)活動(dòng)日志。 此命令有調(diào)用頻率限制。在搭載 Android 9.0(API 級(jí)別 28)及更高版本的設(shè)備上受支持。 | force-security-logs | 強(qiáng)制系統(tǒng)向 DPC 提供任何現(xiàn)有安全日志。如果有可用的日志,DPC 會(huì)收到 [color=var(--devsite-link-color)]onSecurityLogsAvailable() 回調(diào)。請(qǐng)參閱[color=var(--devsite-link-color)]記錄企業(yè)設(shè)備活動(dòng)。 此命令有調(diào)用頻率限制。在搭載 Android 9.0(API 級(jí)別 28)及更高版本的設(shè)備上受支持。 |
截取屏幕截圖screencap 命令是一個(gè)用于對(duì)設(shè)備顯示屏截取屏幕截圖的 shell 實(shí)用程序。在 shell 中,語(yǔ)法如下: screencap filename如需從命令行使用 screencap,請(qǐng)輸入以下命令: adb shell screencap /sdcard/screen.png以下屏幕截圖會(huì)話示例展示了如何使用 adb shell 截取屏幕截圖,以及如何使用 pull 命令從設(shè)備下載屏幕截圖文件:
$ adb shellshell@ $ screencap /sdcard/screen.pngshell@ $ exit$ adb pull /sdcard/screen.png錄制視頻screenrecord 命令是一個(gè)用于錄制設(shè)備(搭載 Android 4.4(API 級(jí)別 19)及更高版本)顯示屏的 shell 實(shí)用程序。該實(shí)用程序?qū)⑵聊?Activity 錄制為 MPEG-4 文件。您可以使用此文件創(chuàng)建宣傳視頻或培訓(xùn)視頻,或?qū)⑵溆糜谡{(diào)試或測(cè)試。 在 shell 中,使用以下語(yǔ)法: screenrecord [options] filename如需從命令行使用 screenrecord,請(qǐng)輸入以下命令: adb shell screenrecord /sdcard/demo.mp4按 Ctrl + C 鍵(在 Mac 上,按 Command + C 鍵)可停止屏幕錄制;如果不手動(dòng)停止,到三分鐘或 --time-limit 設(shè)置的時(shí)間限制時(shí),錄制將會(huì)自動(dòng)停止。 如需開(kāi)始錄制設(shè)備屏幕,請(qǐng)運(yùn)行 screenrecord 命令以錄制視頻。然后,運(yùn)行 pull 命令以將視頻從設(shè)備下載到主機(jī)。下面是一個(gè)錄制會(huì)話示例:
$ adb shellshell@ $ screenrecord --verbose /sdcard/demo.mp4(press Control + C to stop)shell@ $ exit$ adb pull /sdcard/demo.mp4screenrecord 實(shí)用程序能以您要求的任何支持的分辨率和比特率進(jìn)行錄制,同時(shí)保持設(shè)備顯示屏的寬高比。默認(rèn)情況下,該實(shí)用程序以本機(jī)顯示分辨率和屏幕方向進(jìn)行錄制,時(shí)長(zhǎng)不超過(guò)三分鐘。 screenrecord 實(shí)用程序的局限性: - 音頻不與視頻文件一起錄制。
- 無(wú)法在搭載 Wear OS 的設(shè)備上錄制視頻。
- 某些設(shè)備可能無(wú)法以它們的本機(jī)顯示分辨率進(jìn)行錄制。如果在錄制屏幕時(shí)出現(xiàn)問(wèn)題,請(qǐng)嘗試使用較低的屏幕分辨率。
- 不支持在錄制時(shí)旋轉(zhuǎn)屏幕。如果在錄制期間屏幕發(fā)生了旋轉(zhuǎn),則部分屏幕內(nèi)容在錄制時(shí)將被切斷。
表 5. screenrecord 選項(xiàng) 選項(xiàng) | 說(shuō)明 | --help | 顯示命令語(yǔ)法和選項(xiàng) | --size widthxheight | 設(shè)置視頻大小:1280x720。默認(rèn)值為設(shè)備的本機(jī)顯示屏分辨率(如果支持);如果不支持,則為 1280x720。為獲得最佳效果,請(qǐng)使用設(shè)備的 Advanced Video Coding (AVC) 編碼器支持的大小。 | --bit-rate rate | 設(shè)置視頻的視頻比特率(以 MB/秒為單位)。默認(rèn)值為 4Mbps。您可以增加比特率以提升視頻品質(zhì),但這樣做會(huì)導(dǎo)致視頻文件變大。下面的示例將錄制比特率設(shè)為 6Mbps:screenrecord --bit-rate 6000000 /sdcard/demo.mp4 | --time-limit time | 設(shè)置最大錄制時(shí)長(zhǎng)(以秒為單位)。默認(rèn)值和最大值均為 180(3 分鐘)。 | --rotate | 將輸出旋轉(zhuǎn) 90 度。此功能處于實(shí)驗(yàn)階段。 | --verbose | 在命令行屏幕顯示日志信息。如果您不設(shè)置此選項(xiàng),則該實(shí)用程序在運(yùn)行時(shí)不會(huì)顯示任何信息。 |
讀取應(yīng)用的 ART 配置文件從 Android 7.0(API 級(jí)別 24)開(kāi)始,Android Runtime (ART) 會(huì)收集已安裝應(yīng)用的執(zhí)行配置文件,這些配置文件用于優(yōu)化應(yīng)用性能。您可能需要檢查收集的配置文件,以了解在應(yīng)用啟動(dòng)期間,系統(tǒng)頻繁執(zhí)行了哪些方法和使用了哪些類(lèi)。 要生成文本格式的配置文件信息,請(qǐng)使用以下命令: adb shell cmd package dump-profiles package要檢索生成的文件,請(qǐng)使用: adb pull /data/misc/profman/package.txt重置測(cè)試設(shè)備如果您在多個(gè)測(cè)試設(shè)備上測(cè)試應(yīng)用,則在兩次測(cè)試之間重置設(shè)備可能很有用,例如,可以移除用戶(hù)數(shù)據(jù)并重置測(cè)試環(huán)境。您可以使用 testharness adb shell 命令對(duì)搭載 Android 10(API 級(jí)別 29)或更高版本的測(cè)試設(shè)備執(zhí)行恢復(fù)出廠設(shè)置,如下所示。 adb shell cmd testharness enable使用 testharness 恢復(fù)設(shè)備時(shí),設(shè)備會(huì)自動(dòng)將允許通過(guò)當(dāng)前工作站調(diào)試設(shè)備的 RSA 密鑰備份在一個(gè)持久性位置。也就是說(shuō),在重置設(shè)備后,工作站可以繼續(xù)調(diào)試設(shè)備并向設(shè)備發(fā)出 adb 命令,而無(wú)需手動(dòng)注冊(cè)新密鑰。 此外,為了幫助您更輕松且更安全地繼續(xù)測(cè)試您的應(yīng)用,使用 testharness 恢復(fù)設(shè)備還會(huì)更改以下設(shè)備設(shè)置: - 設(shè)備會(huì)設(shè)置某些系統(tǒng)設(shè)置,以便不會(huì)出現(xiàn)初始設(shè)備設(shè)置向?qū)АR簿褪钦f(shuō),設(shè)備會(huì)進(jìn)入一種狀態(tài),供您快速安裝、調(diào)試和測(cè)試您的應(yīng)用。
- 設(shè)置:
- 停用鎖定屏幕
- 停用緊急提醒
- 停用帳戶(hù)自動(dòng)同步
- 停用自動(dòng)系統(tǒng)更新
- 其他:
如果您的應(yīng)用需要檢測(cè)并適應(yīng) testharness 命令的默認(rèn)設(shè)置,您可以使用 [color=var(--devsite-link-color)]ActivityManager.isRunningInUserTestHarness()。 sqlitesqlite3 可啟動(dòng)用于檢查 sqlite 數(shù)據(jù)庫(kù)的 sqlite 命令行程序。它包含用于輸出表格內(nèi)容的 .dump 以及用于輸出現(xiàn)有表格的 SQL CREATE 語(yǔ)句的 .schema 等命令。您也可以從命令行執(zhí)行 SQLite 命令,如下所示。 $ adb -s emulator-5554 shell$ sqlite3 /data/data/com.example.app/databases/rssitems.dbSQLite version 3.3.12Enter ".help" for instructions
抖音搜索”拆修玩評(píng)“關(guān)注我看更多好玩的知識(shí)和教程,一起來(lái)玩唄!
|