前言
本篇文章是對官方文檔的理解和總結,大部分內容來自官方文檔。
adb即Android 調試橋,是一個通用命令行工具,其允許我們與模擬器實例或連接的 Android 設備進行通信。
和Git、MySQL等一樣,adb也有圖形化工具,給我們更友好的交互體驗。
但不管是Android Studio開發環境還是豌豆莢等工具,實質都是用的adb命令和設備通信。
因此,真正去了解adb是什麼,如何使用,有利於我們更好地去發揮它的作用和解決問題。
你可能也會發現,它很有趣~
adb的組成
adb工具位於android_sdk目錄/platform-tools/,作爲一個客戶端-服務器程序,它包括三個組件:
客戶端,該組件發送命令。客戶端在開發計算機上運行。您可以通過發出 adb 命令從命令行終端調用客戶端。
後臺程序,該組件在設備上運行命令。後臺程序在每個模擬器或設備實例上作爲後臺進程運行。
服務器,該組件管理客戶端和後臺程序之間的通信。服務器在開發計算機上作爲後臺進程運行。
啓動一個 adb 客戶端時,此客戶端首先檢查是否有已運行的 adb 服務器進程。如果沒有,它將啓動服務器進程。
當服務器啓動時,它與本地 TCP 端口 5037 綁定,之後所有 adb 客戶端均通過該端口 與 adb 服務器通信。
然後,服務器設置與所有運行的模擬器/設備實例的連接。
它通過掃描 5555 到 5585 之間(模擬器/設備使用的範圍)的奇數號端口查找模擬器/設備實例。
服務器一旦發現 adb 後臺程序,它將設置與該端口的連接。
請注意,每個模擬器/設備實例將獲取一對按順序排列的端口:
用於控制檯連接的偶數號端口
和
用於 adb 連接的奇數號端口。例如:
模擬器 1,控制檯:5554
模擬器 1,adb:5555
模擬器 2,控制檯:5556
模擬器 2,adb:5557
以此類推…
如上所示,在端口 5555 與 adb 連接的模擬器實例與偵聽端口 5554 的控制檯的實例相同。
常用的命令(更多命令可以自行探索~):
停止adb服務器
adb kill-server
之後使用任一adb命令會重啓adb服務器
查看設備
adb devices
輸出:
List of devices attached
[* daemon not running. starting it now on port 5037 *]
[* daemon started successfully *]
serial_number state
將命令發送至特定設備
adb -s serial_number command
選定目標設備
-d 將 adb 命令發送至唯一連接的 USB 設備
-e 將 adb 命令發送至唯一運行的模擬器實例
-s 將 adb 命令發送至該序列號表示的設備實例
安裝app
adb install apk_path
安裝選項
-r 替換設備上已有的APP
-d 允許降版本安裝
-t 允許安裝測試包
-g 授予所有運行時權限
-s 安裝在sd卡上
-l 安裝具有轉發鎖定功能的軟件包。
卸載app
adb uninstall [-k] 包名
-k 保留緩存
重啓設備
adb reboot
Wifi連接設備
//設置目標設備以偵聽端口 5555 上的 TCP/IP 連接
adb tcpip 5555
//連接到設備的ip地址
adb connect device_ip_address
將文件複製到設備
adb push local remote
如:
adb push foo.txt /sdcard/foo.txt
從設備複製文件
adb pull remote local
shell命令
在目標設備中發出 shell 命令,然後退出遠程 shell
adb [-d|-e|-s serial_number] shell shell_command
在目標設備中啓動遠程 shell
adb [-d|-e|-s serial_number] shell
以下shell命令按此示例
離開shell環境
exit
調用 Activity Manager (am)
//示例:啓動Activity
am start -n com.example.app/.ExampleActivity
//啓動Activity
am start [options] intent
//啓動Service
am startservice [options] intent
//啓動廣播
am broadcast [options] intent
//強制關閉APP
am force-stop package
[options]:
-a action
-c category
-d data_uri
-t mime_type
-n component (指定帶有軟件包名稱前綴的組件名稱以創建顯式 intent)
調用軟件包管理器 (pm)
//列出所有軟件包
pm list packages [包含的文本]
//列出所有測試包
pm list instrumentation
//列出系統所有功能
pm list features
//列出設備支持的所有庫
pm list libraries
//列出設備上的所有用戶
pm list users
//輸出給定 package 的 APK 的路徑
pm path package
//安裝app
pm install [options] path
//卸載app
pm uninstall [options] package
//刪除與軟件包關聯的所有數據
pm clear package
截屏
screencap /sdcard/screen.png
//將圖片複製到電腦
adb pull /sdcard/screen.png
錄製視頻
screenrecord [options] /sdcard/demo.mp4
[options]:
--size widthxheight
--bit-rate rate 默認值爲 4Mbps(4000000)
--time-limit time 設置最大錄製時長(以秒爲單位)。默認值和最大值均爲 180(3 分鐘)
--rotate 將輸出旋轉 90 度。此功能是實驗性的
--verbose 顯示命令行屏幕上的日誌信息
刪除文件
rm file_path
刪除整個文件夾
rm -r dir_path
cat /data/misc/wifi/*.conf
設備型號
getprop ro.product.model
查看android版本
getprop ro.build.version.release
屏幕分辨率
wm size
屏幕密度
wm density
電池情況
dumpsys battery
input 交互
//輸入文本到設備上處於焦點的文本框
shell input text hello
其他輸入input查看
Monkey壓力測試(官方文檔)
adb shell monkey -p your.package.name -v 500