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