adb 获取屏幕截图、录制视频
目錄
Android 調試橋 (adb)
adb 的工作原理
在設備上啟用 adb 調試
通過 WLAN 連接到設備
查詢設備
模擬器未列出
將命令發送至特定設備
安裝應用
設置端口轉發
將文件復制到設備/從設備復制文件?
停止 adb 服務器
發出 adb 命令
發出 shell 命令
調用 Activity 管理器 (am)
?調用軟件包管理器 (pm)
調用設備政策管理器 (dpm)
截取屏幕截圖
錄制視頻
讀取應用的 ART 配置文件
重置測試設備
sqlite
轉載地址https://developer.android.com/studio/command-line/adb#-t-option
Android 調試橋 (adb)
Android 調試橋 (adb) 是一種功能多樣的命令行工具,可讓您與設備進行通信。adb 命令可用于執行各種設備操作(例如安裝和調試應用),并提供對 Unix shell(可用來在設備上運行各種命令)的訪問權限。它是一種客戶端-服務器程序,包括以下三個組件:
- 客戶端:用于發送命令。客戶端在開發計算機上運行。您可以通過發出 adb 命令來從命令行終端調用客戶端。
- 守護進程 (adbd):在設備上運行命令。守護進程在每個設備上作為后臺進程運行。
- 服務器:管理客戶端和守護進程之間的通信。服務器在開發機器上作為后臺進程運行。
adb 的工作原理
當您啟動某個 adb 客戶端時,客戶端會先檢查是否有 adb 服務器進程正在運行。如果沒有,它將啟動服務器進程。服務器在啟動后會與本地 TCP 端口 5037 綁定,并監聽 adb 客戶端發出的命令 - 所有 adb 客戶端均通過端口 5037 與 adb 服務器通信。
然后,服務器會與所有正在運行的設備建立連接。它通過掃描 5555 到 5585 之間(該范圍供前 16 個模擬器使用)的奇數號端口查找模擬器。服務器一旦發現 adb 守護進程 (adbd),便會與相應的端口建立連接。請注意,每個模擬器都使用一對按順序排列的端口 - 用于控制臺連接的偶數號端口和用于 adb 連接的奇數號端口。例如:
模擬器 1,控制臺:5554
模擬器 1,adb:5555
模擬器 2,控制臺:5556
模擬器 2,adb:5557
依此類推
如上所示,在端口 5555 處與 adb 連接的模擬器與控制臺監聽端口為 5554 的模擬器是同一個。
服務器與所有設備均建立連接后,您便可以使用 adb 命令訪問這些設備。由于服務器管理與設備的連接,并處理來自多個 adb 客戶端的命令,因此您可以從任意客戶端(或從某個腳本)控制任意設備。
在設備上啟用 adb 調試
要在通過 USB 連接的設備上使用 adb,您必須在設備的系統設置中啟用?USB 調試(位于開發者選項下)。
在搭載 Android 4.2 及更高版本的設備上,“開發者選項”屏幕默認情況下處于隱藏狀態。如需將其顯示出來,請依次轉到設置 > 關于手機,然后點按版本號七次。返回上一屏幕,在底部可以找到開發者選項。
在某些設備上,“開發者選項”屏幕所在的位置或命名方式可能有所不同。
現在,您已經可以通過 USB 連接設備。您可以通過從?android_sdk/platform-tools/?目錄執行?adb devices?來驗證設備是否已連接。如果已連接,您將看到設備名稱以“設備”形式列出。
注意:當您連接搭載 Android 4.2.2 或更高版本的設備時,系統會顯示一個對話框,詢問您是否接受允許通過此計算機進行調試的 RSA 密鑰。這種安全機制可以保護用戶設備,因為它可以確保只有在您能夠解鎖設備并確認對話框的情況下才能執行 USB 調試和其他 adb 命令。
通過 WLAN 連接到設備
一般情況下,adb 通過 USB 與設備進行通信,但您也可以在通過 USB 完成一些初始設置后通過 WLAN 使用 adb,如下所述。不過,如果您開發的是 Wear OS 應用,則應參閱調試 Wear OS 應用指南,其中提供了有關如何通過 WLAN 和藍牙使用 adb 的特別說明。
將 Android 設備和 adb 主機連接到這兩者都可以訪問的同一 WLAN 網絡。請注意,并非所有接入點都適用;您可能需要使用防火墻已正確配置為支持 adb 的接入點。
然后,從頭開始操作。
?
查詢設備
在發出 adb 命令之前,了解哪些設備實例已連接到 adb 服務器會很有幫助。您可以使用?devices?命令生成已連接設備的列表。
adb devices -l作為響應,adb 會針對每個設備輸出以下狀態信息:
- 序列號:由 adb 創建的字符串,用于通過端口號唯一標識設備。下面是一個序列號示例:emulator-5554
- 狀態:設備的連接狀態可以是以下幾項之一:
- offline:設備未連接到 adb 或沒有響應。
- device:設備現已連接到 adb 服務器。請注意,此狀態并不表示 Android 系統已完全啟動并可正常運行,因為在設備連接到 adb 時系統仍在啟動。不過,在啟動后,這是設備的正常運行狀態。
- no device:未連接任何設備。
- 說明:如果包含?-l?選項,則?devices?命令會告知您設備是什么。當您連接了多個設備時,此信息很有用,可幫助您將它們區分開來。
以下示例展示了?devices?命令及其輸出。有三個設備正在運行。列表中的前兩行表示模擬器,第三行表示連接到計算機的硬件設備。
$ 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?命令的極端命令序列會導致正在運行的模擬器不顯示在?adb devices?輸出中(即使在您的桌面上可以看到該模擬器)。當滿足以下所有條件時,就會發生這種情況:
要避免出現這種情況,一種方法是讓模擬器自行選擇端口,并且每次運行的模擬器數量不要超過 16 個。另一種方法是始終先啟動 adb 服務器,然后再使用?emulator?命令,如下例所示。
示例 1:在下面的命令序列中,adb devices?命令啟動了 adb 服務器,但是設備列表未顯示。
停止 adb 服務器,然后按照所示順序輸入以下命令。對于 avd 名稱,請提供系統中有效的 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?顯示了設備列表,因為先啟動了 adb 服務器。
要在?adb devices?輸出中看到模擬器,請停止 adb 服務器,然后在使用?emulator?命令后且在使用?adb devices?命令前重新啟動服務器,如下所示:
$ adb kill-server$ emulator -avd Nexus_6_API_25 -port 5557$ adb start-server$ adb devicesList of devices attachedemulator-5557 device將命令發送至特定設備
如果有多個設備正在運行,則當您發出 adb 命令時,必須指定目標設備。為此,請使用?devices?命令獲取目標設備的序列號。獲得序列號后,請結合使用?-s?選項與 adb 命令來指定序列號。如果您要發出很多 adb 命令,可以將?$ANDROID_SERIAL?環境變量設為包含序列號。如果您同時使用?-s?和?$ANDROID_SERIAL,則?-s?會替換?$ANDROID_SERIAL。
在以下示例中,先獲得了已連接設備的列表,然后使用其中一個設備的序列號在該設備上安裝了?helloWorld.apk。
$ adb devicesList of devices attachedemulator-5554 deviceemulator-5555 device$ adb -s emulator-5555 install helloWorld.apk注意:如果您在多個設備可用時發出命令但未指定目標設備,則 adb 會生成錯誤。
如果有多個可用設備,但只有一個是模擬器,請使用?-e?選項將命令發送至該模擬器。同樣,如果有多個設備,但只連接了一個硬件設備,請使用?-d?選項將命令發送至該硬件設備。
安裝應用
?
您可以使用 adb 的?install?命令在模擬器或連接的設備上安裝 APK:
adb install path_to_apk安裝測試 APK 時,必須結合使用?-t?選項和?install?命令。install [options] path
options如下
- -r:重新安裝現有應用,保留其數據。
- -t:允許安裝測試 APK。僅當您運行或調試了應用或者使用了 Android Studio 的?Build > Build APK?命令時,Gradle 才會生成測試 APK。如果是使用開發者預覽版 SDK(如果?targetSdkVersion?是字母,而非數字)構建的 APK,則安裝測試 APK 時必須在?install?命令中包含?-t?選項。
- -i?installer_package_name:指定安裝程序軟件包名稱。
- --install-location?location:使用以下某個值來設置安裝位置:
- 0:使用默認安裝位置。
- 1:在內部設備存儲上安裝。
- 2:在外部介質上安裝。
- -f:在內部系統內存上安裝軟件包。
- -d:允許版本代碼降級。
- -g:授予應用清單中列出的所有權限。
- --fastdeploy:通過僅更新已更改的 APK 部分來快速更新安裝的軟件包。
請注意,如果您使用的是 Android Studio,則無需直接使用 adb 在模擬器/設備上安裝您的應用。Android Studio 會為您執行應用的打包和安裝操作。
設置端口轉發
您可以使用?forward?命令設置任意端口轉發,將對特定主機端口上的請求轉發到設備上的其他端口。以下示例設置了主機端口 6100 到設備端口 7100 的轉發:
adb forward tcp:6100 tcp:7100以下示例設置了主機端口 6100 到 local:logd 的轉發:
adb forward tcp:6100 local:logd將文件復制到設備/從設備復制文件?
您可以使用?pull?和?push?命令將文件復制到設備或從設備復制文件。與?install?命令(僅將 APK 文件復制到特定位置)不同,pull?和?push?命令可讓您將任意目錄和文件復制到設備中的任何位置。
要從設備復制文件或目錄及其子目錄,請使用以下命令:
adb pull remote local要將文件或目錄及其子目錄復制到設備,請使用以下命令:
adb push local remote將?local?和?remote?替換為開發機器(本地)和設備(遠程)上的目標文件/目錄的路徑。例如:
adb push foo.txt /sdcard/foo.txt停止 adb 服務器
在某些情況下,您可能需要終止 adb 服務器進程,然后重啟以解決問題(例如,如果 adb 不響應命令)。
要停止 adb 服務器,請使用?adb kill-server?命令。然后,您可以通過發出其他任何 adb 命令來重啟服務器。
發出 adb 命令
您可以從開發機器上的命令行發出 adb 命令,也可以通過腳本發出。用法如下:
adb [-d | -e | -s serial_number] command如果只有一個模擬器正在運行或者只連接了一個設備,則默認情況下會將 adb 命令發送至該設備。如果有多個模擬器正在運行并且/或者連接了多個設備,則您需要使用?-d、-e?或?-s?選項指定應向其發送命令的目標設備。
您可以使用以下命令來查看所有支持的 adb 命令的詳細列表:
adb --help發出 shell 命令
您可以使用?shell?命令通過 adb 發出設備命令,也可以啟動交互式 shell。要發出單個命令,請使用?shell?命令,如下所示:
adb [-d |-e | -s serial_number] shell shell_command要在設備上啟動交互式 shell,請使用?shell?命令,如下所示:
adb [-d | -e | -s serial_number] shell要退出交互式 shell,請按 Ctrl + D 鍵或輸入?exit。
注意:在?Android 平臺工具 23?及更高版本中,adb 處理參數的方式與?ssh(1)?命令相同。這項變更解決了很多命令注入方面的問題,還使安全執行包含 shell 元字符的命令(如?adb install Let\'sGo.apk)成為可能。不過,這項變更還意味著,對包含 shell 元字符的所有命令的解釋也發生了變化。例如,adb shell setprop foo 'a b'?命令現在會返回錯誤,因為單引號 (') 會被本地 shell 消去,設備看到的是?adb shell setprop foo a b。要使該命令正常運行,請引用兩次,一次用于本地 shell,另一次用于遠程 shell,與處理?ssh(1)?的方法相同。例如,adb shell setprop foo "'a b'"。
Android 提供了大多數常見的 Unix 命令行工具。如需查看可用工具的列表,請使用以下命令:
adb shell ls /system/bin通過?--help?參數可獲得大多數命令的幫助。許多 shell 命令由 toybox?提供。通過?toybox --help?可獲得適用于所有 toybox 命令的常規幫助。
調用 Activity 管理器 (am)
在 adb shell 中,您可以使用 Activity 管理器 (am) 工具發出命令以執行各種系統操作,如啟動 Activity、強行停止進程、廣播 intent、修改設備屏幕屬性,等等。在 shell 中,語法如下:
am command您也可以直接從 adb 發出 Activity 管理器命令,無需進入遠程 shell。例如:
adb shell am start -a android.intent.action.VIEW表 2.?可用的 Activity 管理器命令
| start [options]?intent | 啟動由?intent?指定的 Activity。 請參閱intent參數規范。 選項如下:
|
| startservice [options]?intent | 啟動由?intent?指定的 Service。 請參閱intent參數的規范。 選項如下:
|
| force-stop?package | 強行停止與?package(應用的軟件包名稱)關聯的所有進程。 |
| kill [options]?package | 終止與?package(應用的軟件包名稱)關聯的所有進程。此命令僅終止可安全終止且不會影響用戶體驗的進程。 選項如下:
|
| kill-all | 終止所有后臺進程。 |
| broadcast [options]?intent | 發出廣播 intent。 請參閱intent參數的規范。 選項如下:
|
| instrument [options]?component | 使用 Instrumentation?實例啟動監控。通常情況下,目標?component?采用?test_package/runner_class?格式。 選項如下:
|
| profile start?process?file | 啟動?process?的分析器,將結果寫入?file。 |
| profile stop?process | 停止?process?的分析器。 |
| dumpheap [options]?process?file | 轉儲?process?的堆,寫入?file。 選項如下:
|
| set-debug-app [options]?package | 設置要調試的應用?package。 選項如下:
|
| clear-debug-app | 清除之前使用?set-debug-app?設置的待調試軟件包。 |
| monitor [options] | 開始監控崩潰或 ANR。 選項如下:
|
| screen-compat {on?|?off}?package | 控制?package?的屏幕兼容性模式。 |
| display-size [reset?|?widthxheight] | 替換設備顯示尺寸。此命令支持使用大屏設備模仿小屏幕分辨率(反之亦然),對于在不同尺寸的屏幕上測試應用非常有用。 示例: |
| display-density?dpi | 替換設備顯示密度。此命令支持使用低密度屏幕模仿高密度屏幕環境(反之亦然),對于在不同密度的屏幕上測試應用非常有用。 示例: |
| to-uri?intent | 以 URI 的形式輸出給定的 intent 規范。 請參閱intent參數的規范。 |
| to-intent-uri?intent | 以?intent:?URI 的形式輸出給定的 intent 規范。 請參閱?intent參數的規范。 |
intent 參數的規范
對于采用?intent?參數的 Activity 管理器命令,您可以使用以下選項指定 intent:
全部顯示
-a?action
指定 intent 操作,如?android.intent.action.VIEW。只能聲明一次。
-d?data_uri
指定 intent 數據 URI,如?content://contacts/people/1。只能聲明一次。
-t?mime_type
指定 intent MIME 類型,如?image/png。只能聲明一次。
-c?category
指定 intent 類別,如?android.intent.category.APP_CONTACTS。
-n?component
指定帶有軟件包名稱前綴的組件名稱以創建顯式 intent,如?com.example.app/.ExampleActivity。
-f?flags
將標志添加到?setFlags()?支持的 intent。
--esn?extra_key
添加一個空 extra。URI intent 不支持此選項。
-e | --es?extra_key?extra_string_value
以鍵值對的形式添加字符串數據。
--ez?extra_key?extra_boolean_value
以鍵值對的形式添加布爾值數據。
--ei?extra_key?extra_int_value
以鍵值對的形式添加整數數據。
--el?extra_key?extra_long_value
以鍵值對的形式添加長整數數據。
--ef?extra_key?extra_float_value
以鍵值對的形式添加浮點數數據。
--eu?extra_key?extra_uri_value
以鍵值對的形式添加 URI 數據。
--ecn?extra_key?extra_component_name_value
添加組件名稱,該名稱作為?ComponentName?對象進行轉換和傳遞。
--eia?extra_key?extra_int_value[,extra_int_value...]
添加整數數組。
--ela?extra_key?extra_long_value[,extra_long_value...]
添加長整數數組。
--efa?extra_key?extra_float_value[,extra_float_value...]
添加浮點數數組。
--grant-read-uri-permission
包含標志?FLAG_GRANT_READ_URI_PERMISSION。
--grant-write-uri-permission
包含標志?FLAG_GRANT_WRITE_URI_PERMISSION。
--debug-log-resolution
包含標志?FLAG_DEBUG_LOG_RESOLUTION。
--exclude-stopped-packages
包含標志?FLAG_EXCLUDE_STOPPED_PACKAGES。
--include-stopped-packages
包含標志?FLAG_INCLUDE_STOPPED_PACKAGES。
--activity-brought-to-front
包含標志?FLAG_ACTIVITY_BROUGHT_TO_FRONT。
--activity-clear-top
包含標志?FLAG_ACTIVITY_CLEAR_TOP。
--activity-clear-when-task-reset
包含標志?FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET。
--activity-exclude-from-recents
包含標志?FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS。
--activity-launched-from-history
包含標志?FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY。
--activity-multiple-task
包含標志?FLAG_ACTIVITY_MULTIPLE_TASK。
--activity-no-animation
包含標志?FLAG_ACTIVITY_NO_ANIMATION。
--activity-no-history
包含標志?FLAG_ACTIVITY_NO_HISTORY。
--activity-no-user-action
包含標志?FLAG_ACTIVITY_NO_USER_ACTION。
--activity-previous-is-top
包含標志?FLAG_ACTIVITY_PREVIOUS_IS_TOP。
--activity-reorder-to-front
包含標志?FLAG_ACTIVITY_REORDER_TO_FRONT。
--activity-reset-task-if-needed
包含標志?FLAG_ACTIVITY_RESET_TASK_IF_NEEDED。
--activity-single-top
包含標志?FLAG_ACTIVITY_SINGLE_TOP。
--activity-clear-task
包含標志?FLAG_ACTIVITY_CLEAR_TASK。
--activity-task-on-home
包含標志?FLAG_ACTIVITY_TASK_ON_HOME。
--receiver-registered-only
包含標志?FLAG_RECEIVER_REGISTERED_ONLY。
--receiver-replace-pending
包含標志?FLAG_RECEIVER_REPLACE_PENDING。
--selector
需要使用?-d?和?-t?選項以設置 intent 數據和類型。
URI?component?package
如果不受上述某一選項的限制,您可以直接指定 URI、軟件包名稱和組件名稱。當某個參數不受限制時,如果該參數包含一個“:”(冒號),則該工具會假定參數是一個 URI;如果該參數包含一個“/”(正斜線),則該工具會假定參數是一個組件名稱;如果并非這兩種情況,則該工具會假定參數是一個軟件包名稱。
?調用軟件包管理器 (pm)
在 adb shell 中,您可以使用軟件包管理器 (pm) 工具發出命令,以對設備上安裝的應用軟件包執行操作和查詢。在 shell 中,語法如下:
pm command您也可以直接從 adb 發出軟件包管理器命令,無需進入遠程 shell。例如:
adb shell pm uninstall com.example.app表 3.?可用的軟件包管理器命令。
| list packages [options]?filter | 輸出所有軟件包,或者,僅輸出軟件包名稱包含?filter?中的文本的軟件包。 選項如下:
|
| list permission-groups | 輸出所有已知的權限組。 |
| list permissions [options]?group | 輸出所有已知的權限,或者,僅輸出?group?中的權限。 選項如下:
|
| list instrumentation [options] | 列出所有測試軟件包。 選項如下:
|
| list features | 輸出系統的所有功能。 |
| list libraries | 輸出當前設備支持的所有庫。 |
| list users | 輸出系統中的所有用戶。 |
| path?package | 輸出給定?package?的 APK 的路徑。 |
| install [options]?path | 將軟件包(通過?path?指定)安裝到系統。 選項如下:
|
| uninstall [options]?package | 從系統中移除軟件包。 選項如下:
|
| clear?package | 刪除與軟件包關聯的所有數據。 |
| enable?package_or_component | 啟用給定的軟件包或組件(寫為“package/class”)。 |
| disable?package_or_component | 停用給定的軟件包或組件(寫為“package/class”)。 |
| disable-user [options]?package_or_component | 選項如下:
|
| grant?package_name?permission | 向應用授予權限。在搭載 Android 6.0(API 級別 23)及更高版本的設備上,該權限可以是應用清單中聲明的任何權限。在搭載 Android 5.1(API 級別 22)及更低版本的設備上,該權限必須是應用定義的可選權限。 |
| revoke?package_name?permission | 從應用撤消權限。在搭載 Android 6.0(API 級別 23)及更高版本的設備上,該權限可以是應用清單中聲明的任何權限。在搭載 Android 5.1(API 級別 22)及更低版本的設備上,該權限必須是應用定義的可選權限。 |
| set-install-location?location | 更改默認安裝位置。位置值如下:
注意:此命令僅用于調試目的;使用此命令會導致應用中斷和其他意外行為。 |
| get-install-location | 返回當前安裝位置。返回值如下:
|
| set-permission-enforced?permission?[true?|?false] | 指定是否應強制執行給定的權限。 |
| trim-caches?desired_free_space | 修剪緩存文件以達到給定的可用空間。 |
| create-user?user_name | 創建具有給定?user_name?的新用戶,從而輸出該用戶的新用戶標識符。 |
| remove-user?user_id | 移除具有給定?user_id?的用戶,從而刪除與該用戶關聯的所有數據。 |
| get-max-users | 輸出設備支持的最大用戶數。 |
調用設備政策管理器 (dpm)
為便于您開發和測試設備管理(或其他企業)應用,您可以向設備政策管理器 (dpm) 工具發出命令。使用該工具可控制活動管理應用,或更改設備上的政策狀態數據。在 shell 中,語法如下:
dpm command您也可以直接從 adb 發出設備政策管理器命令,無需進入遠程 shell:
adb shell dpm command表 4.?可用的設備政策管理器命令
| set-active-admin [options]?component | 將組件設為活動管理。 選項如下:
|
| set-profile-owner [options]?component | 將組件設為活動管理,并將其軟件包設為現有用戶的資料所有者。 選項如下:
|
| set-device-owner [options]?component | 將組件設為活動管理,并將其軟件包設為設備所有者。 選項如下:
|
| remove-active-admin [options]?component | 停用活動管理。應用必須在清單中聲明?android:testOnly。此命令還會移除設備所有者和資料所有者。 選項如下:
|
| clear-freeze-period-record | 清除設備的之前設置的系統 OTA 更新凍結期記錄。在開發管理凍結期的應用時,這有助于避免設備存在調度方面的限制。請參閱管理系統更新。 在搭載 Android 9.0(API 級別 28)及更高版本的設備上受支持。 |
| force-network-logs | 強制系統讓任何現有網絡日志隨時可供 DPC 檢索。如果有可用的連接或 DNS 日志,則 DPC 會收到?onNetworkLogsAvailable()?回調。請參閱網絡活動日志。 此命令有調用頻率限制。在搭載 Android 9.0(API 級別 28)及更高版本的設備上受支持。 |
| force-security-logs | 強制系統向 DPC 提供任何現有安全日志。如果有可用的日志,則 DPC 會收到?onSecurityLogsAvailable()?回調。請參閱記錄企業設備活動。 此命令有調用頻率限制。在搭載 Android 9.0(API 級別 28)或更高版本的設備上受支持。 |
截取屏幕截圖
screencap?命令是一個用于對設備顯示屏截取屏幕截圖的 shell 實用程序。在 shell 中,語法如下:
screencap filename要從命令行使用?screencap,請輸入以下命令:
adb shell screencap /sdcard/screen.png以下屏幕截圖會話示例向您展示了如何使用 adb shell 抓取屏幕截圖,以及使用?pull?命令從設備下載此文件:
$ adb shellshell@ $ screencap /sdcard/screen.pngshell@ $ exit$ adb pull /sdcard/screen.png錄制視頻
screenrecord?命令是一個用于錄制設備(搭載 Android 4.4(API 級別 19)及更高版本)顯示屏的 shell 實用程序。該實用程序將屏幕 Activity 錄制為 MPEG-4 文件。您可以使用此文件創建宣傳視頻或培訓視頻,或將其用于調試或測試。
在 shell 中,使用以下語法:
screenrecord [options] filename要從命令行使用?screenrecord,請輸入以下命令:
adb shell screenrecord /sdcard/demo.mp4按 Ctrl + C 鍵(在 Mac 上,按 Command + C 鍵)停止屏幕錄制;否則,到三分鐘或?--time-limit?設置的時間限制時,錄制將自動停止。
要開始錄制設備屏幕,請運行?screenrecord?命令以錄制視頻。然后,運行?pull?命令以將視頻從設備下載到主機。下面是一個錄制會話示例:
?
$ adb shellshell@ $ screenrecord --verbose /sdcard/demo.mp4(press Control + C to stop)shell@ $ exit$ adb pull /sdcard/demo.mp4screenrecord?實用程序能以您要求的任何支持的分辨率和比特率進行錄制,同時保持設備顯示屏的寬高比。默認情況下,該實用程序以本機顯示屏分辨率和屏幕方向進行錄制,時長不超過三分鐘。
screenrecord?實用程序的局限性:
- 音頻不與視頻文件一起錄制。
- 無法在搭載 Wear OS 的設備上錄制視頻。
- 某些設備可能無法以它們的本機顯示屏分辨率進行錄制。如果在錄制屏幕時出現問題,請嘗試使用較低的屏幕分辨率。
- 不支持在錄制時旋轉屏幕。如果在錄制期間屏幕發生了旋轉,則部分屏幕內容在錄制時將被切斷。
表 5.?screenrecord?選項
| --help | 顯示命令語法和選項 |
| --size?widthxheight | 設置視頻大小:1280x720。默認值為設備的本機顯示屏分辨率(如果支持);如果不支持,則為 1280x720。為獲得最佳效果,請使用設備的 Advanced Video Coding (AVC) 編碼器支持的大小。 |
| --bit-rate?rate | 設置視頻的視頻比特率(以 MB/秒為單位)。默認值為 4Mbps。您可以增加比特率以提升視頻品質,但這么做會導致視頻文件變大。下面的示例將錄制比特率設為 6Mbps: screenrecord --bit-rate 6000000 /sdcard/demo.mp4 ? |
| --time-limit?time | 設置最大錄制時長(以秒為單位)。默認值和最大值均為 180(3 分鐘)。 |
| --rotate | 將輸出旋轉 90 度。此功能處于實驗階段。 |
| --verbose | 在命令行屏幕顯示日志信息。如果您不設置此選項,則該實用程序在運行時不會顯示任何信息。 |
讀取應用的 ART 配置文件
從 Android 7.0(API 級別 24)開始,Android Runtime (ART) 會收集已安裝應用的執行配置文件,這些配置文件用于優化應用性能。您可能需要檢查收集的配置文件,以了解在應用啟動期間,系統頻繁執行了哪些方法和使用了哪些類。
要生成文本格式的配置文件信息,請使用以下命令:
adb shell cmd package dump-profiles package要檢索生成的文件,請使用:
adb pull /data/misc/profman/package.txt重置測試設備
如果您在多個測試設備上測試應用,則在兩次測試之間重置設備可能很有用,例如,可以移除用戶數據并重置測試環境。您可以使用?testharness?adb shell 命令對搭載 Android 10(API 級別 29)或更高版本的測試設備執行恢復出廠設置,如下所示。
adb shell cmd testharness enable使用?testharness?恢復設備時,設備會自動將允許通過當前工作站調試設備的 RSA 密鑰備份在一個持久性位置。也就是說,在重置設備后,工作站可以繼續調試設備并向設備發出 adb 命令,而無需手動注冊新密鑰。
此外,為了幫助您更輕松且更安全地繼續測試您的應用,使用?testharness?恢復設備還會更改以下設備設置:
- 設備會設置某些系統設置,以便不會出現初始設備設置向導。也就是說,設備會進入一種狀態,供您快速安裝、調試和測試您的應用。
- 設置如下:
- 停用鎖定屏幕
- 停用緊急提醒
- 停用帳戶自動同步
- 停用自動系統更新
- 其他:
- 停用預安裝的安全應用
如果您的應用需要檢測并適應?testharness?命令的默認設置,您可以使用?ActivityManager.isRunningInUserTestHarness()。
sqlite
sqlite3?可啟動用于檢查 sqlite 數據庫的 sqlite 命令行程序。它包含用于輸出表格內容的?.dump?以及用于輸出現有表格的?SQL CREATE?語句的?.schema?等命令。您也可以從命令行執行 SQLite 命令,如下所示。
$ adb -s emulator-5554 shell$ sqlite3 /data/data/com.example.app/databases/rssitems.dbSQLite version 3.3.12Enter ".help" for instructions在開發過程中有可能還會用到的命令:
獲取屏幕分辨率
adb shell wm size
?
設置屏幕分辨率
adb shell wm size 1080x1920?
?
獲取DPI(Dots Per Inch,每英寸點數)
adb shell wm?density?
?
設置DPI
adb shell wm density 240?
?
謝謝瀏覽,如果能剛好解決你目前的問題,倍感榮幸。?
總結
以上是生活随笔為你收集整理的adb 获取屏幕截图、录制视频的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CorelDraw2022新版来了 新版
- 下一篇: 清新简约课题开题报告PPT模板