日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

adb 获取屏幕截图、录制视频

發布時間:2024/1/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 的接入點。

  • 如果您要連接到 Wear OS 設備,請關閉與該設備配對的手機上的藍牙。
  • 使用 USB 數據線將設備連接到主機。
  • 設置目標設備以監聽端口 5555 上的 TCP/IP 連接。 adb tcpip 5555
  • 拔掉連接目標設備的 USB 數據線。
  • 找到 Android 設備的 IP 地址。例如,對于 Nexus 設備,您可以在設置?>?關于平板電腦(或關于手機)>?狀態?>?IP 地址下找到 IP 地址?;蛘?#xff0c;對于 Wear OS 設備,您可以在設置?>?WLAN 設置?>?高級?>?IP 地址下找到 IP 地址。
  • 通過 IP 地址連接到設備。 adb connect device_ip_address
  • 確認主機已連接到目標設備: $ adb devicesList of devices attacheddevice_ip_address:5555 device
  • 確保主機仍與 Android 設備連接到同一個 WLAN 網絡。
  • 通過再次執行?adb connect?步驟重新連接。
  • 如果上述操作未解決問題,重置 adb 主機: adb kill-server

    然后,從頭開始操作。

  • ?

    查詢設備

    在發出 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?輸出中(即使在您的桌面上可以看到該模擬器)。當滿足以下所有條件時,就會發生這種情況:

  • adb 服務器未在運行,且
  • 您在使用?emulator?命令時,將?-port?或?-ports?選項的端口值設為 5554 到 5584 之間的奇數,且
  • 您選擇的奇數號端口處于空閑狀態,因此可以與指定端口號的端口建立連接,或者該端口處于繁忙狀態,模擬器切換到符合第 2 條中要求的另一個端口,且
  • 啟動模擬器后才啟動 adb 服務器。
  • 要避免出現這種情況,一種方法是讓模擬器自行選擇端口,并且每次運行的模擬器數量不要超過 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參數規范。

    選項如下:

    • -D:啟用調試功能。
    • -W:等待啟動完成。
    • --start-profiler?file:啟動分析器并將結果發送至?file。
    • -P?file:類似于?--start-profiler,但當應用進入空閑狀態時分析停止。
    • -R?count:重復啟動 Activity?count?次。在每次重復前,將完成頂層 Activity。
    • -S:在啟動 Activity 前,強行停止目標應用。
    • --opengl-trace:啟用 OpenGL 函數的跟蹤。
    • --user?user_id?| current:指定要作為哪個用戶運行;如果未指定,則作為當前用戶運行。
    startservice [options]?intent啟動由?intent?指定的 Service。

    請參閱intent參數的規范。

    選項如下:

    • --user?user_id?| current:指定要作為哪個用戶運行;如果未指定,則作為當前用戶運行。
    force-stop?package強行停止與?package(應用的軟件包名稱)關聯的所有進程。
    kill [options]?package終止與?package(應用的軟件包名稱)關聯的所有進程。此命令僅終止可安全終止且不會影響用戶體驗的進程。

    選項如下:

    • --user?user_id?| all | current:指定要終止哪個用戶的進程;如果未指定,則終止所有用戶的進程。
    kill-all終止所有后臺進程。
    broadcast [options]?intent發出廣播 intent。

    請參閱intent參數的規范。

    選項如下:

    • [--user?user_id?| all | current]:指定要發送給哪個用戶;如果未指定,則發送給所有用戶。
    instrument [options]?component使用 Instrumentation?實例啟動監控。通常情況下,目標?component?采用?test_package/runner_class?格式。

    選項如下:

    • -r:輸出原始結果(否則,對?report_key_streamresult?進行解碼)。與?[-e perf true]?結合使用以生成性能測量值的原始輸出。
    • -e?name?value:將參數?name?設為?value。對于測試運行程序,通用格式為?-e?testrunner_flag?value[,value...]。
    • -p?file:將分析數據寫入?file。
    • -w:先等待插樁完成,然后再返回。測試運行程序需要使用此選項。
    • --no-window-animation:運行時關閉窗口動畫。
    • --user?user_id?| current:指定以哪個用戶身份運行插樁;如果未指定,則以當前用戶身份運行。
    profile start?process?file啟動?process?的分析器,將結果寫入?file。
    profile stop?process停止?process?的分析器。
    dumpheap [options]?process?file轉儲?process?的堆,寫入?file。

    選項如下:

    • --user [user_id?| current]:提供進程名稱時,指定要轉儲的進程的用戶;如果未指定,則使用當前用戶。
    • -n:轉儲原生堆,而非托管堆。
    set-debug-app [options]?package設置要調試的應用?package。

    選項如下:

    • -w:應用啟動時等待調試程序。
    • --persistent:保留此值。
    clear-debug-app清除之前使用?set-debug-app?設置的待調試軟件包。
    monitor [options]開始監控崩潰或 ANR。

    選項如下:

    • --gdb:在崩潰/ANR 時,在給定的端口上啟動 gdbserv。
    screen-compat {on?|?off}?package控制?package?的屏幕兼容性模式。
    display-size [reset?|?widthxheight]替換設備顯示尺寸。此命令支持使用大屏設備模仿小屏幕分辨率(反之亦然),對于在不同尺寸的屏幕上測試應用非常有用。

    示例:
    am display-size 1280x800

    display-density?dpi替換設備顯示密度。此命令支持使用低密度屏幕模仿高密度屏幕環境(反之亦然),對于在不同密度的屏幕上測試應用非常有用。

    示例:
    am display-density 480

    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?中的文本的軟件包。

    選項如下:

    • -f:查看它們的關聯文件。
    • -d:進行過濾以僅顯示已停用的軟件包。
    • -e:進行過濾以僅顯示已啟用的軟件包。
    • -s:進行過濾以僅顯示系統軟件包。
    • -3:進行過濾以僅顯示第三方軟件包。
    • -i:查看軟件包的安裝程序。
    • -u:也包括卸載的軟件包。
    • --user?user_id:要查詢的用戶空間。
    list permission-groups輸出所有已知的權限組。
    list permissions [options]?group輸出所有已知的權限,或者,僅輸出?group?中的權限。

    選項如下:

    • -g:按組進行整理。
    • -f:輸出所有信息。
    • -s:簡短摘要。
    • -d:僅列出危險權限。
    • -u:僅列出用戶將看到的權限。
    list instrumentation [options]列出所有測試軟件包。

    選項如下:

    • -f:列出測試軟件包的 APK 文件。
    • target_package:僅列出此應用的測試軟件包。
    list features輸出系統的所有功能。
    list libraries輸出當前設備支持的所有庫。
    list users輸出系統中的所有用戶。
    path?package輸出給定?package?的 APK 的路徑。
    install [options]?path將軟件包(通過?path?指定)安裝到系統。

    選項如下:

    • -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 部分來快速更新安裝的軟件包。
    uninstall [options]?package從系統中移除軟件包。

    選項如下:

    • -k:移除軟件包后保留數據和緩存目錄。
    clear?package刪除與軟件包關聯的所有數據。
    enable?package_or_component啟用給定的軟件包或組件(寫為“package/class”)。
    disable?package_or_component停用給定的軟件包或組件(寫為“package/class”)。
    disable-user [options]?package_or_component

    選項如下:

    • --user?user_id:要停用的用戶。
    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更改默認安裝位置。位置值如下:
    • 0:自動 - 讓系統決定最合適的位置。
    • 1:內部 - 在內部設備存儲上安裝。
    • 2:外部 - 在外部介質上安裝。

    注意:此命令僅用于調試目的;使用此命令會導致應用中斷和其他意外行為。

    get-install-location返回當前安裝位置。返回值如下:
    • 0 [auto]:讓系統決定最合適的位置
    • 1 [internal]:在內部設備存儲上安裝
    • 2 [external]:在外部介質上安裝
    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將組件設為活動管理。

    選項如下:

    • --user?user_id:指定目標用戶。您也可以傳遞?--user current?以選擇當前用戶。
    set-profile-owner [options]?component將組件設為活動管理,并將其軟件包設為現有用戶的資料所有者。

    選項如下:

    • --user?user_id:指定目標用戶。您也可以傳遞?--user current?以選擇當前用戶。
    • --name?name:指定簡單易懂的組織名稱。
    set-device-owner [options]?component將組件設為活動管理,并將其軟件包設為設備所有者。

    選項如下:

    • --user?user_id:指定目標用戶。您也可以傳遞?--user current?以選擇當前用戶。
    • --name?name:指定簡單易懂的組織名稱。
    remove-active-admin [options]?component停用活動管理。應用必須在清單中聲明?android:testOnly。此命令還會移除設備所有者和資料所有者。

    選項如下:

    • --user?user_id:指定目標用戶。您也可以傳遞?--user current?以選擇當前用戶。
    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.mp4

    screenrecord?實用程序能以您要求的任何支持的分辨率和比特率進行錄制,同時保持設備顯示屏的寬高比。默認情況下,該實用程序以本機顯示屏分辨率和屏幕方向進行錄制,時長不超過三分鐘。

    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 获取屏幕截图、录制视频的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。