關於ADB需要知道的一些知識

Android 調試橋 (adb) 是一種功能多樣的命令行工具,可讓您與設備進行通信。adb 命令可用於執行各種設備操作(例如安裝和調試應用),並提供對 Unix shell(可用來在設備上運行各種命令)的訪問權限。它是一種客戶端-服務器程序,包括以下三個組件:

  • 客戶端: 用於發送命令。客戶端在開發計算機上運行。您可以通過發出 adb 命令來從命令行終端調用客戶端。
  • 守護進程 (adbd): 在設備上運行命令。守護進程在每個設備上作爲後臺進程運行。
  • 服務器: 管理客戶端和守護進程之間的通信。服務器在開發機器上作爲後臺進程運行。

adb 下載與安裝:

如果經常使用adb工具,強烈建議把 adb 運行路徑配置到系統的運行環境中

  1. 如果你安裝了android開發環境,那麼你可以直接打開Android sdk的安裝路徑,找到文件夾android_sdk/platform-tools/,就可以找到adb.exe,然後通過命令行模式使用adb命令了;
  2. 當然也支持下載adb獨立程序,請點擊下載;下載完成後解壓並進入目錄即可;

adb 工作原理

當啓動某個 adb 客戶端時,客戶端會先檢查是否有 adb 服務器進程正在運行。如果沒有,它將啓動服務器進程。服務器在啓動後會與本地 TCP 端口 5037 綁定,並監聽 adb 客戶端發出的命令 - 所有 adb 客戶端均通過端口 5037 與 adb 服務器通信。

C:\Users\admin>adb start-server
* daemon not running; starting now at tcp:5037
* daemon started successfully

然後,服務器會與所有正在運行的設備建立連接。它通過掃描 5555 到 5585 之間(該範圍供前 16 個模擬器使用)的奇數號端口查找模擬器。服務器一旦發現 adb 守護進程 (adbd),便會與相應的端口建立連接。請注意,每個模擬器都使用一對按順序排列的端口 - 用於控制檯連接的偶數號端口和用於 adb 連接的奇數號端口。例如:

模擬器 1,控制檯:5554
模擬器 1,adb:5555
模擬器 2,控制檯:5556
模擬器 2,adb:5557
依此類推

如上所示,在端口 5555 處與 adb 連接的模擬器與控制檯監聽端口爲 5554 的模擬器是同一個。

服務器與所有設備均建立連接後,您便可以使用 adb 命令訪問這些設備。由於服務器管理與設備的連接,並處理來自多個 adb 客戶端的命令,因此您可以從任意客戶端(或從某個腳本)控制任意設備。

在設備上啓動 ADB 調試

想要連接 Android 設備並使用adb命令必須在設備的系統設置中啓用USB調試(位於開發者選項下)
在搭載 Android 4.2 及更高版本的設備上,開發者選項屏幕默認情況下處於隱藏狀態。如需將其顯示出來,請依次轉到設置 > 關於手機,然後點按版本號七次。返回上一屏幕,在底部可以找到開發者選項進入該頁面打開USB調試即可。

部分機型還要修改USB連接方式傳輸文件模式,纔可以正常連接

通過 adb 服務連接 Android 設備

通常連接 Android 設備我們都是通過 USB 數據線進行連接,這是被大家周知的;在確保設備打開了調試模式的前提,連接設備後計算機會自動檢測 usb 驅動進行適配連接,然後屏幕右下角會給出相對應的彈窗提示;
然後使用命令行終端進行連接狀態查看:adb devices(如果沒有把adb.exe配置到系統的環境變量中操作檯會提示‘沒有 adb 命令’等類似錯誤信息,那就只能切換到adb.exe所在目錄再試,例如命令行輸入cd d:/sdk/platform-tools/)

C:\Users\admin>cd /d d:\adb\
D:\adb> adb devices
UYT7N17A28000401        device

除了線連以外還可以使用wlan的方式進行連接,需要在通過 USB 完成一些初始設置後通過 WLAN 使用 adb:

  1. 將 Android 設備和 adb 主機連接到這兩者都可以訪問的同一 WLAN 網絡。請注意,並非所有接入點都適用;您可能需要使用防火牆已正確配置爲支持 adb 的接入點。
  2. 如果您要連接到 Wear OS 設備,請關閉與該設備配對的手機上的藍牙。
  3. 使用 USB 數據線將設備連接到主機。
  4. 設置目標設備以監聽端口 5555 上的 TCP/IP 連接。
    adb tcpip 5555
  1. 拔掉連接目標設備的 USB 數據線。
  2. 找到 Android 設備的 IP 地址。例如,對於 Nexus 設備,您可以在設置 > 關於平板電腦(或關於手機)> 狀態 > IP 地址下找到 IP 地址.
  3. 通過 IP 地址連接到設備。
    adb connect 192.168.***.***
  1. 確認主機連接狀態:
    adb devices

如果連接過程中斷開了,在確保設備和連接計算機在同一網絡中後,可以使用adb connect [*:port]進行重新連接,如果還沒有解決問題,那就重置一下 adb 服務 adb kill-server (與啓動服務相對應start-server,注意沒有’restart-server’操作)重新開始 adb 連接流程

常用的 adb 命令 [更多詳細命令](https://developer.android.google.cn/studio/command-line/adb.html#-t-option 官方介紹)

  • adb --help 有問題找助手
  • adb start-server 啓動 adb 服務

  • adb kill-server 停止 adb 服務,通常與adb start-server聯合做重啓服務使用

  • adb reboot [bootloader | recovery] 重啓 Android 設備(刷機模式|恢復模式)注意:由於很多品牌商對系統的修改的原因刷機模式可能不能正常啓動

  • adb pull <device> <host> 拉取 Android 設備上的文件到本地主機,注意本地文件路徑不能是根目錄,例如:

      adb pull -s WOSWRKP799999999 /sdcard/storage/user.txt d:/adb/
    
  • adb push <host> <device> 複製本地主機文件並推送到 Android 設備,如果指定目標文件名已經存在會替換已有文件,例如:

      adb push d:/adb/hello.png /sdcard/temp.png
    
  • adb devices [-l] 查看連接 adb 服務的設備列表,參數 -l 僅返回在線設備

  • adb -s <WOSWRKP799999999> [command] 如果主機連接有多臺設備,想要給指定的設備發命令請用-s指定該設備的標識,如果多設備時沒有使用-s的話 adb 會報錯 s

  • adb install [options] <**.apk> 使用install進行安裝指定路徑的 apk 文件;
    options 可以包含:

    1. -r 重新安裝當前 apk 文件,保留已有數據
    2. -t 允許安裝測試 apk 文件
    3. -g 授權所有清單文件
  • adb unistall [-k] <package> 使用uninstall進行指定包名卸載,參數-k清除文件

  • adb shell dumpsys package <package> 查看 app 的相關信息 重要,重要

連接 shell

adb shell 使用 shell 命令通過 adb 發出設備命令,也可以啓動交互式 shell;(連接設備 shell)連接後簡單理解直接在 Android 設備上使用命令行,這時就可以使用一些unix的命令,當然會有很多命令是不能執行的,因爲它們被廠商閹割掉了,這種閹割在不同廠商、不同版本的表現還不一致,還有一些是因爲 Android 內核的安全策略限制引起的;可以使用adb shell ls /system/bin進行查看可以使用的unix命令

對於shell的操作可以一條一條的進行執行,例如: adb shell pwd,adb shell ls,adb shell ...,也可以直接進入shell然後統一操作
如果要退出shell界面,可以使用ctrl + d 使用 exit 命令也可以
注意:部分需要有 root 權限纔可以執行

調用 Activity 管理器(am)

瞭解更多請點擊

出命令以執行各種系統操作,如啓動 Activity、強行停止進程、廣播 intent、修改設備屏幕屬性,等等
am <command [options]>shell內部命令,需要結合adb shell進行使用,例如:

    adb shell am start -a android.intent.action.VIEW
  • start [options] <intent> 啓動由’intent’指定的 Activity
    1. -d 啓動調試功能
    2. -S:在啓動 Activity 前,強行停止目標應用
    3. --start-profiler <file>:啓動分析器並將結果發送至 file。
  • startService [options] <intent> 啓動由’intent’指定的 service
  • broadcast [options] <intent> 發出廣播 intent。
  • force-stop <package> 強行停止與 package 相關的進程
  • kill <package> 終止與 package 相關的進程,僅終止可安全終止且不會影響用戶體驗的進程
  • kill-all 終止所有後天進程
  • monitor --gdb 開始監控崩潰/anr
  • dumpheap <process> <file> 轉儲 process 的堆,存入到 file
  • profile start <process> <file> 開始分析進程並保存到日誌
  • profile stop <process> 停止分析進程
  • instrument [options] <component> 使用 Instrumentation 實例啓動監控。通常情況下,目標 component 採用 test_package/runner_class 格式。

調用軟件包管理器(pm)

瞭解更多請點擊

在 adb shell 中,您可以使用軟件包管理器 (pm) 工具發出命令,以對設備上安裝的應用軟件包執行操作和查詢。
pm <command [options]> 也是shell內部命令,也是需要結合adb shell進行使用,例如:

    adb shell pm uninstall -k <package> // 使用包管理器卸載指定的包名應用
  • list package [options] <filter> 輸出所有軟件包,或者,僅輸出軟件包名稱包含 filter 中的文本的軟件包。

    1. -s:進行過濾以僅顯示系統軟件包。
    2. -3:進行過濾以僅顯示第三方軟件包。
    3. -e:進行過濾以僅顯示已啓用的軟件包.
    4. -d:進行過濾以僅顯示已停用的軟件包。
    5. -i:查看軟件包的安裝程序。
      adb shell pm list packages -3 -i com.tencent
      adb shell pm list packages | grep com.tencent
    
  • list permission-groups 輸出所有已知的權限組

  • install [options] <**.apk> 同上

  • uninstall -k <package> 卸載指定的包名的應用

  • clear <package> 清除指定包名的應用的所有數據,與剛安裝完的狀態相同

查看系統信息

  • adb shell dumpsys meminfo <package> 查看當前包運行的內存情況

查系統日誌

logcat [options] 可以獲取到系統的日誌信息,需要結合adb shell進行使用
詳細請點擊

  • -b log 模塊有個緩存的概念,默認開啓main,system,和crash三個緩存域,但是華爲 mate10 默認並沒有加載crash,這個緩存域有一個策略週期性清除
  • -c 清除(清空)所選的緩衝區並退出,默認緩衝區集爲 main、system 和 crash。要清除所有緩衝區,請使用 -b all -c。
  • f </sdcard/file> 把當前日誌或緩存域日誌信息報存到文件
  • -s [TAG:property] 設置日誌過濾條件,在 Android 打印的使用:
  Log.e(TAG,'content') // 日誌級別分爲'v':'verbose','d':'debug','i':'info','w':'warn','e':'error'
  adb shell logcat -s SplashActivity:E -f /sdcard/log.txt // 打印`Log.e()`的日誌信息

打印的格式是 date time process_id-thread-id/package-name log-level/TAG: content ,在設置過濾的時候通過-s控制TAG和日誌級別
例如:W/MainActivity 要符合*:TAG,其中級別分別對應原生級別大寫首字母:V,I,D,W,E

  • -S 在輸出中包含統計信息,以幫助您識別和定位日誌垃圾信息發送者。
  • -P <whiteList ~blackList> 設置日誌過濾的白名單和黑名單,白名單"list" 就是進程 pid 及 uid ,黑明單就是前面加上"~"

調用設備政策管理器 (dpm)

adb shell dpm <command>爲便於開發和測試設備管理(或其他企業)應用,您可以向設備政策管理器 (dpm) 工具發出命令。使用該工具可控制活動管理應用,或更改設備上的政策狀態數據。

由於用到的比較少,瞭解更多請點擊

截取屏幕圖片

screencap /sdcard/.../**.png 命令是一個用於對設備顯示屏截取屏幕截圖的 shell 實用程序,例如:

    $adb shell
    shell@ $ screencap /sdcard/screen.png
    shell@ $ exit
    $adb pull /sdcard/screen.png d:/adb/

錄製視頻

screenrecord [options] /sdcard/.../**.mp4 命令是一個用於錄製設備(搭載 Android 4.4(API 級別 19)及更高版本)顯示屏的 shell 實用程序。該實用程序將屏幕 Activity 錄製爲 MPEG-4 文件。

注意:在很多真機上面改命令被移除或者改名了,比如在華爲Mate10 /system/bin目錄下是沒有這個可執行程序的

  • --help 幫助

  • --size <width>*<height> 設置視頻的分辨率,默認是 1280*720

  • --time-limit <time> 設置視頻最大時長,以秒爲單位,默認值和最大值均爲 180s(3 分鐘)

  • --bit-rate <rate> 設置視頻的比特率(MB/s),默認 4M/s,例如設置 6M/s:

      screenrecord --bit-rate 6000000 /sdcard/demo.mp4
    
  • --verbose 打印錄製相關信息

例如:

    $adb shell
    shell@ $ screenrecord --size 1920*1080 --time-limit 30 --verbose /sccard/video.mp4
    shell@ $ exit
    $adb pull /sdcard/video.mp4 d:/adb/

sqlite

sqlite3 可啓動用於檢查 sqlite 數據庫的 sqlite 命令行程序。它包含用於輸出表格內容的 .dump 以及用於輸出現有表格的 SQL CREATE 語句的 .schema 等命令。
瞭解詳細sqlite3 相關命令

注意:在很多真機上該命令都被移除或者改名了,比如在華爲Mate10目錄下是沒有這個可執行程序的

    $adb shell
    shell@ $ sqlite3 /data/data/com.example/databases/test.db // 真機通常會被系統權限控制拒絕訪問
    shell@ $ .tables
    shell@ $ CREATE TABLE test(id INT(4) AUTO_INCREMENT PRIMARY KEY,name VARCHAR(30) NOT NULL,...)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章