一、什麼是ADB?
adb:一種功能多樣的命令行調試工具。
Android 調試橋 (adb) ,可與設備進行通信。adb 命令可用於執行各種設備操作(例如安裝和調試應用),並提供對 Unix shell(可用來在設備上運行各種命令)的訪問權限。它是一種客戶端-服務器程序,包括以下三個組件:
客戶端:用於發送命令。客戶端在開發機器上運行。可以通過發出 adb 命令從命令行終端調用客戶端。(可以通過它對Android應用進行安裝、卸載、調試)
PC上的手機助手基本都是通過adb命令去完成的。有時候裝了這類手機助手的話,它自帶的adb程序可能會與Android SDK下的adb程序產生衝突,5037端口被佔用,導致adb命令無法連接到設備。Windows下通過netstat -ano|findstr "5037"
守護程序 (adbd):用於在設備上運行命令。守護程序在每個設備上作爲後臺進程運行
執行adb shell ps | grep adbd, 可以找到該後臺進程,Windows使用findstr替代grep.
adb nodaemon server
服務器(Service):用於管理客戶端與守護程序之間的通信。服務器在開發機器上作爲後臺進程運行
adb服務啓動後,Windows可以在任務管理中找到adb.exe; linux ps -ef | gref adb 可以查看service
二、adb命令
一般都是通過這樣子的格式 adb [-d|-e|-s <設備序列號>] <子命令>
通常只有一臺設備就忽略 [-d|-e|-s ] 這一部分
參數含義:
-d指定當前唯一通過USB連接的Android設備爲命令目標
-e指定當前唯一運行的模擬器爲命令目標
-s <serialNumber>指定相應 serialNumber 號的設備/模擬器爲命令目標
這裏介紹一些常用的命令:
獲取設備列表及設備狀態
adb devices
獲取設備的狀態
adb get-state
注意:設備的狀態有 3 鍾,device , offline , unknown
device:設備正常連接
offline:連接出現異常,設備無響應
unknown:沒有連接設備
結束 adb 服務
adb kill-server
啓動 adb 服務
adb start-server
注意:通常兩個命令一起用,有時候我們開啓server會失敗,這是因爲我們裝了的手機助手,豌豆莢或者其他軟件自帶有自己的adb,導致端口衝突開啓失敗。一般在連接出現異常,使用 adb devices 未正常列出設備, 設備狀態異常時使用 kill-server,然後運行 start-server 進行重啓服務。
打印 Android 的系統日誌
adb logcat
打印 dumpsys、dumpstate、logcat 的輸出,也是用於分析錯誤輸出比較多
adb bugreport
打印日誌後重定向到一個文件中
adb bugreport > d:\bugreport.log
安裝應用,覆蓋安裝是使用 -r 選項
adb install **.apk
注意:有些adb版本無法支持安裝中文的apk
查看手機應用包名
adb shell pm list packages
查看應用對應的apk文件在手機上的安裝位置則可以在上面的命令後加-f參數
adb shell pm list packages -f
卸載應用,後面跟的參數是應用的包名,請區別於 apk 文件名
adb uninstall com.perfdog.app
'-k' means keep the data and cache directories , -k 選項,卸載時保存數據和緩存目錄
adb -k uninstall
將 Android 設備上的文件或者文件夾複製到本地
adb pull
adb pull /sdcard/test.txt C:\Users\Administrator\Desktop\log
推送本地文件至 Android 設備
adb push 電腦文件路徑 安卓設備路徑
獲取連接到的手機的序列號
adb get-serialno
獲取設備的連接狀態
adb -s get-state
等待設備連接成功
adb wait-for-device
該命令將會阻塞一直到默認連接的那部機器狀態變爲device,也就是連接成功。
三、adb shell
其實adb shell命令就是調用的是Android設備中的system/bin目錄下的命令。
Android的內核本身就是Linux,所以Android本身也支持Linux命令,但是因爲是手機系統,所以進行了一定的刪減,部分命令不支持,而不支持的部分,我們可以通過安裝busybox這個軟件進行。
如何在手機中執行Shell命令?
每次都加上adb shell來進行命令的發送與執行
adb shell <command>
先通過adb shell進入手機Shell執行狀態,然後直接輸入Linux命令。
使一個apk處於禁用狀態,相當於卸載了:
disable <PACKAGE_OR_COMPONENT>
其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile
eg:adb shell su disable com.UCMobile/.main.UCMobile
同時我們在手機上發現,UC瀏覽器的圖標不見了
讓一個apk從禁用狀態恢復過來
enable <PACKAGE_OR_COMPONENT>
其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobileeg:
adb shell su enable com.UCMobile/.main.UCMobile
同時我們從手機上發現,UC瀏覽器的圖標又出現了。
查看一個apk所在的路徑
pm path 包名
adb shell pm path com.UCMobile
查看手機中裝的所有的包
pm list packages
屏幕開始錄像並且儲存到/sdcard中,同時名字爲demo.mp4
adb shell screenrecord /sdcard/demo.mp4
錄屏設置時長10s,命名爲demo.mp4
adb shell screenrecord --time-limit 10 /sdcard/demo.mp4
注意:現在僅支持一部分手機錄屏,不支持的手機會出現以下提示
解決方法:
安裝了scrcpy之後,只需要輸入如下命令,即可錄取指定設備的屏幕
scrcpy -s device --render-expired-frames -Nr ./demo.pm4
--render-expired-frames:儘可能最大幀率
-N:不在PC端展示
-r:錄製mp4/mkv文件
關閉設備請求,開啓設備
adb shell stop
adb shell start
設備關機以及重啓
adb reboot
adb shutdown
四、其他常用pm、am、dumpsys、uiautomator、input
pm:安裝、卸載、清理包和數據、
am:啓動具體的app
dumpsys:獲取系統、app的性能數據
uiautomator:獲取當前界面結構和執行自動化測試
input:幫助完成一些自動化模擬的指令
pm(package manager)可以獲取一些安裝到Android設備上的app的信息
pm list packages 用法:list packages [ options] filter
獲取所有的應用的包名
adb shell pm list package
列出系統應用
adb shell pm list package -s
列出第三方應用
adb shell pm list package -3
查看它們的關聯文件
adb shell pm list package -f
查看軟件包的安裝來源
adb shell pm list package -i
pm dump 包名 很多dump信息
adb shell pm dump com.yy.huanju
安裝應用
pm install
apk如果在電腦用 adb install
如果在Android設備上用 adb shell pm install
卸載應用,同adb uninstall ,後跟包名
pm uninstall
清除應用數據
pm clear
am(activity manager,字面意思就跟activity有關,大家都知道Android的界面都是由一個個activity顯示的)
啓動一個Activity
adb shell am start -n package/launch_activity
獲取到package和launch_activity
adb shell dumpsys window windows | findstr Current
AndroidSDK中aapt工具,檢索命令結果,可以獲取到package和launch_activity
aapt.exe d badging xx.apk
這裏涉及到一個點,如何找到程序的入口,首先你要知道是哪個activity才能啓動;
adb logcat | grep -i displayed
啓動華爲系統相機
adb shell am start -n com.huawei.camera/com.huawei.camera
打開音樂播放器
am start -a android.intent.action.MUSIC_PLAYER
播放指定音樂:
am start -a "android.intent.action.VIEW" -t "audio/mp3" -d "file:///sdcard/Music/test.mp3"
先停止目標應用,再啓動
adb shell am start -S com.huawei.camera/com.huawei.camera
等待應用完成啓動
adb shell am start -W com.huawei.camera/com.huawei.camera
啓動網頁(android.intent.action.VIEW具體參考Android官網)
adb shell am start -aandroid.intent.action.VIEW-d http://baidu.com
結束應用
am force-stop 包名
模擬輸入,向獲得焦點的EditText控件輸入內容
adb shell input text "hello,world"
返回主界面
adb shell input keyevent KEYCODE_HOME
發送一個點擊操作的指令,參數是<x> <y>座標
adb shell input tap 100 100
從左往右滑動屏幕, /從 100 100 經歷300毫秒滑動到 200 200
adb shell input swipe 100 100 200 200 300
長按操作,在 100 100 位置長按 1000毫秒
adb shell input swipe 100 100 100 100 1000