深入認識adb工具

前言

官方文檔

本篇文章是對官方文檔的理解和總結,大部分內容來自官方文檔。

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