與應(yīng)用交互
主要是使用am<command>命令,常用的<command>如下
| command | 用途 |
|---|---|
| start [options] <INTENT> | 啟動(dòng) <INTENT> 指定的 Activity |
| startservice [options] <INTENT> | 啟動(dòng) <INTENT> 指定的 Service |
| broadcast [options] <INTENT> | 發(fā)送 <INTENT> 指定的廣播 |
| force-stop <packagename> | 停止 <packagename> 相關(guān)的進(jìn)程 |
<INTENT> 參數(shù)很靈活,和寫 Android 程序時(shí)代碼里的 Intent 相對應(yīng)。
用于決定intent對象的選項(xiàng)如下:
| 參數(shù) | 含義 |
|---|---|
| -a <ACTION> | 指定 action,比如 android.intent.action.VIEW |
| -c <CATEGORY> | 指定 category,比如 android.intent.category.APP_CONTACTS |
| -n <COMPONENT> | 指定完整 component 名,用于明確指定啟動(dòng)哪個(gè) Activity,如 com.example.app/.ExampleActivity |
<INTENT> 里還能帶數(shù)據(jù),就像寫代碼時(shí)的 Bundle 一樣:
| 參數(shù) | 含義 |
|---|---|
| --esn <EXTRA_KEY> | null 值(只有 key 名) |
| --es <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> | string 值 |
| --ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> | boolean 值 |
| --ei <EXTRA_KEY> <EXTRA_INT_VALUE> | integer 值 |
| --el <EXTRA_KEY> <EXTRA_LONG_VALUE> | long 值 |
| --ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE> | float 值 |
| --eu <EXTRA_KEY> <EXTRA_URI_VALUE> | URI |
| --ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE> | component name |
| --eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...] | integer 數(shù)組 |
| --ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...] | long 數(shù)組 |
啟動(dòng)應(yīng)用/調(diào)起Activity
指定Activity名稱啟動(dòng)
命令格式:
adb shell am start [options] <INTENT>
調(diào)起微信并傳給它 string 數(shù)據(jù)鍵值對 toast - hello, world。

不指定Activity名稱啟動(dòng)(啟動(dòng)主Activity)
命令格式:
adb shell monkey -p <packagename> -c android.intent.category.LAUNCHER 1
啟動(dòng)QQ

調(diào)起Service
命令格式:
adb shell am startservice [options] <INTENT>
例如:
調(diào)起微信的某Service
adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService
另外一個(gè)典型的用例是如果設(shè)備上原本應(yīng)該顯示虛擬按鍵但是沒有顯示,可以試試這個(gè):
adb shell am startservice -n com.android.systemui/.SystemUIService
停止Service
命令格式:
adb shell am stopservice [options] <INTENT>
發(fā)送廣播
命令格式:
adb shell am broadcast [options] <INTENT>
可以向所有組件廣播,也可以向指定組件廣播
例如,向所有組件廣播:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
又例如,只向org.mazhuang.boottimemeasure/.BootCompletedReceiver廣播
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver
這類用法在測試的時(shí)候很實(shí)用,比如某個(gè)廣播的場景很難制造,可以考慮通過這種方式來發(fā)送廣播。
既能發(fā)送系統(tǒng)預(yù)定義的廣播,也能發(fā)送自定義廣播。如下是部分系統(tǒng)預(yù)定義廣播及正常觸發(fā)時(shí)機(jī):
(均可使用adb觸發(fā))
| action | 觸發(fā)時(shí)機(jī) |
|---|---|
| android.net.conn.CONNECTIVITY_CHANGE | 網(wǎng)絡(luò)連接發(fā)生變化 |
| android.intent.action.SCREEN_ON | 屏幕點(diǎn)亮 |
| android.intent.action.SCREEN_OFF | 屏幕熄滅 |
| android.intent.action.BATTERY_LOW | 電量低,會(huì)彈出電量低提示框 |
| android.intent.action.BATTERY_OKAY | 電量恢復(fù)了 |
| android.intent.action.BOOT_COMPLETED | 設(shè)備啟動(dòng)完畢 |
| android.intent.action.DEVICE_STORAGE_LOW | 存儲(chǔ)空間過低 |
| android.intent.action.DEVICE_STORAGE_OK | 存儲(chǔ)空間恢復(fù) |
| android.intent.action.PACKAGE_ADDED | 安裝了新的應(yīng)用 |
| android.net.wifi.STATE_CHANGE | WiFi 連接狀態(tài)發(fā)生變化 |
| android.net.wifi.WIFI_STATE_CHANGED | WiFi 狀態(tài)變?yōu)閱⒂?關(guān)閉/正在啟動(dòng)/正在關(guān)閉/未知 |
| android.intent.action.BATTERY_CHANGED | 電池電量發(fā)生變化 |
| android.intent.action.INPUT_METHOD_CHANGED | 系統(tǒng)輸入法發(fā)生變化 |
| android.intent.action.ACTION_POWER_CONNECTED | 外部電源連接 |
| android.intent.action.ACTION_POWER_DISCONNECTED | 外部電源斷開連接 |
| android.intent.action.DREAMING_STARTED | 系統(tǒng)開始休眠 |
| android.intent.action.DREAMING_STOPPED | 系統(tǒng)停止休眠 |
| android.intent.action.HEADSET_PLUG | 插入耳機(jī) |
| android.intent.action.MEDIA_UNMOUNTED | 卸載外部介質(zhì) |
| android.intent.action.MEDIA_MOUNTED | 掛載外部介質(zhì) |
| android.os.action.POWER_SAVE_MODE_CHANGED | 省電模式開啟 |
強(qiáng)制停止應(yīng)用
命令:
adb shell am force-stop <packagename>
命令示例:

收緊內(nèi)存
adb shell am send-trim-memory <pid> <level>
pid: 進(jìn)程 ID level: HIDDEN、RUNNING_MODERATE、BACKGROUND、 RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE
命令示例:
adb shell am send-trim-memory 12345 RUNNING_LOW
表示向 pid=12345 的進(jìn)程,發(fā)出 level=RUNNING_LOW 的收緊內(nèi)存命令。
修改設(shè)置
注: 修改設(shè)置之后,運(yùn)行恢復(fù)命令有可能顯示仍然不太正常,可以運(yùn)行 adb reboot 重啟設(shè)備,或手動(dòng)重啟。
修改設(shè)置的原理主要是通過 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的設(shè)置值。
分辨率
adb shell wm size 480x1024
表示將分辨率修改為 480px * 1024px。
恢復(fù):
adb shell wm size reset
屏幕密度
adb shell wm density 160
表示將屏幕密度修改為 160dpi。
恢復(fù):
adb shell wm density reset
顯示區(qū)域
adb shell wm overscan 0,0,0,200
四個(gè)數(shù)字分別表示距離左、上、右、下邊緣的留白像素,以上命令表示將屏幕底部 200px 留白。
恢復(fù):
adb shell wm overscan reset
關(guān)閉USB調(diào)試
adb shell settings put global adb_enabled 0
恢復(fù):
用命令恢復(fù)不了了,畢竟關(guān)閉了 USB 調(diào)試 adb 就連接不上 Android 設(shè)備了。
去設(shè)備上手動(dòng)恢復(fù)吧:「設(shè)置」-「開發(fā)者選項(xiàng)」-「Android 調(diào)試」。
允許/禁止訪問非 SDK API:
不需要設(shè)備獲得Root權(quán)限。
允許訪問非 SDK API:
adb shell settings put global hidden_api_policy_pre_p_apps 1
adb shell settings put global hidden_api_policy_p_apps 1
禁止訪問非 SDK API
adb shell settings delete global hidden_api_policy_pre_p_apps
adb shell settings delete global hidden_api_policy_p_apps
命令最后的數(shù)字的含義:
| 值 | 含義 |
|---|---|
| 0 | 禁止檢測非 SDK 接口的調(diào)用。該情況下,日志記錄功能被禁用,并且令 strict mode API,即 detectNonSdkApiUsage() 無效。不推薦。 |
| 1 | 僅警告——允許訪問所有非 SDK 接口,但保留日志中的警告信息,可繼續(xù)使用 strick mode API。 |
| 2 | 禁止調(diào)用深灰名單和黑名單中的接口。 |
| 3 | 禁止調(diào)用黑名單中的接口,但允許調(diào)用深灰名單中的接口。 |
實(shí)用功能
屏幕截圖
注:未指定路徑則,默認(rèn)為adb所在的文件夾
截圖保存到電腦:
adb exec-out screencap -p > sc.png
如果 adb 版本較老,無法使用 exec-out 命令,這時(shí)候建議更新 adb 版本。無法更新的話可以使用以下麻煩點(diǎn)的辦法:
先截圖保存到設(shè)備里:
adb shell screencap -p /sdcard/sc.png
然后將 png 文件導(dǎo)出到電腦:
adb pull /sdcard/sc.png
可以使用adb shell screencap -h 查看 screencap 命令的幫助信息,下面是兩個(gè)有意義的參數(shù)及含義:
| 參數(shù) | 含義 |
|---|---|
| -p | 指定保存文件為 png 格式(如果指定文件后綴png,則可省略) |
| -d display-id | 指定截圖的顯示屏編號(有多顯示屏的情況下) |
錄制屏幕
錄制屏幕以mp4格式保存到 /sdcard:
adb shell screenrecord /sdcard/filename.mp4
需要停止時(shí)按 Ctrl-C,默認(rèn)錄制時(shí)間和最長錄制時(shí)間都是 180 秒。
如果需要導(dǎo)出到電腦:
adb pull /sdcard/filename.mp4
可以使用 adb shell screenrecord --help 查看 screenrecord 命令的幫助信息,下面是常見參數(shù)及含義:
| 參數(shù) | 含義 |
|---|---|
| --size WIDTHxHEIGHT | 視頻的尺寸,比如 1280x720,默認(rèn)是屏幕分辨率。 |
| --bit-rate RATE | 視頻的比特率,默認(rèn)是 4Mbps。 |
| --time-limit TIME | 錄制時(shí)長,單位秒。 |
| --verbose | 輸出更多信息。 |
開啟/關(guān)閉wifi
開啟
adb shell svc wifi enable
關(guān)閉
adb shell svc wifi disable
使用Monkey進(jìn)行壓力測試
Monkey 可以生成偽隨機(jī)用戶事件來模擬單擊、觸摸、手勢等操作,可以對正在開發(fā)中的程序進(jìn)行隨機(jī)壓力測試。
簡單用法:
adb shell monkey -p <packagename> -v 500
表示向 <packagename> 指定的應(yīng)用程序發(fā)送 500 個(gè)偽隨機(jī)事件。
更多內(nèi)容可見monkey官網(wǎng)