與應用交互
主要是使用am<command>命令叹坦,常用的<command>如下
command | 用途 |
---|---|
start [options] <INTENT> | 啟動 <INTENT> 指定的 Activity |
startservice [options] <INTENT> | 啟動 <INTENT> 指定的 Service |
broadcast [options] <INTENT> | 發(fā)送 <INTENT> 指定的廣播 |
force-stop <packagename> | 停止 <packagename> 相關的進程 |
<INTENT> 參數(shù)很靈活溜歪,和寫 Android 程序時代碼里的 Intent 相對應。
用于決定intent對象的選項如下:
參數(shù) | 含義 |
---|---|
-a <ACTION> | 指定 action,比如 android.intent.action.VIEW |
-c <CATEGORY> | 指定 category齿椅,比如 android.intent.category.APP_CONTACTS |
-n <COMPONENT> | 指定完整 component 名,用于明確指定啟動哪個 Activity曼验,如 com.example.app/.ExampleActivity |
<INTENT> 里還能帶數(shù)據(jù)卡骂,就像寫代碼時的 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ù)組 |
啟動應用/調(diào)起Activity
指定Activity名稱啟動
命令格式:
adb shell am start [options] <INTENT>
調(diào)起微信并傳給它 string 數(shù)據(jù)鍵值對 toast - hello, world
。
不指定Activity名稱啟動(啟動主Activity)
命令格式:
adb shell monkey -p <packagename> -c android.intent.category.LAUNCHER 1
啟動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
另外一個典型的用例是如果設備上原本應該顯示虛擬按鍵但是沒有顯示煮甥,可以試試這個:
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
這類用法在測試的時候很實用卖局,比如某個廣播的場景很難制造,可以考慮通過這種方式來發(fā)送廣播双霍。
既能發(fā)送系統(tǒng)預定義的廣播砚偶,也能發(fā)送自定義廣播。如下是部分系統(tǒng)預定義廣播及正常觸發(fā)時機:
(均可使用adb觸發(fā))
action | 觸發(fā)時機 |
---|---|
android.net.conn.CONNECTIVITY_CHANGE | 網(wǎng)絡連接發(fā)生變化 |
android.intent.action.SCREEN_ON | 屏幕點亮 |
android.intent.action.SCREEN_OFF | 屏幕熄滅 |
android.intent.action.BATTERY_LOW | 電量低店煞,會彈出電量低提示框 |
android.intent.action.BATTERY_OKAY | 電量恢復了 |
android.intent.action.BOOT_COMPLETED | 設備啟動完畢 |
android.intent.action.DEVICE_STORAGE_LOW | 存儲空間過低 |
android.intent.action.DEVICE_STORAGE_OK | 存儲空間恢復 |
android.intent.action.PACKAGE_ADDED | 安裝了新的應用 |
android.net.wifi.STATE_CHANGE | WiFi 連接狀態(tài)發(fā)生變化 |
android.net.wifi.WIFI_STATE_CHANGED | WiFi 狀態(tài)變?yōu)閱⒂?關閉/正在啟動/正在關閉/未知 |
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 | 插入耳機 |
android.intent.action.MEDIA_UNMOUNTED | 卸載外部介質(zhì) |
android.intent.action.MEDIA_MOUNTED | 掛載外部介質(zhì) |
android.os.action.POWER_SAVE_MODE_CHANGED | 省電模式開啟 |
強制停止應用
命令:
adb shell am force-stop <packagename>
命令示例:
收緊內(nèi)存
adb shell am send-trim-memory <pid> <level>
pid: 進程 ID level: HIDDEN蟹演、RUNNING_MODERATE、BACKGROUND顷蟀、 RUNNING_LOW酒请、MODERATE、RUNNING_CRITICAL鸣个、COMPLETE
命令示例:
adb shell am send-trim-memory 12345 RUNNING_LOW
表示向 pid=12345 的進程羞反,發(fā)出 level=RUNNING_LOW 的收緊內(nèi)存命令布朦。
修改設置
注: 修改設置之后,運行恢復命令有可能顯示仍然不太正常昼窗,可以運行 adb reboot 重啟設備是趴,或手動重啟。
修改設置的原理主要是通過 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的設置值澄惊。
分辨率
adb shell wm size 480x1024
表示將分辨率修改為 480px * 1024px唆途。
恢復:
adb shell wm size reset
屏幕密度
adb shell wm density 160
表示將屏幕密度修改為 160dpi。
恢復:
adb shell wm density reset
顯示區(qū)域
adb shell wm overscan 0,0,0,200
四個數(shù)字分別表示距離左掸驱、上肛搬、右、下邊緣的留白像素毕贼,以上命令表示將屏幕底部 200px 留白温赔。
恢復:
adb shell wm overscan reset
關閉USB調(diào)試
adb shell settings put global adb_enabled 0
恢復:
用命令恢復不了了,畢竟關閉了 USB 調(diào)試 adb 就連接不上 Android 設備了鬼癣。
去設備上手動恢復吧:「設置」-「開發(fā)者選項」-「Android 調(diào)試」陶贼。
允許/禁止訪問非 SDK API:
不需要設備獲得Root權限。
允許訪問非 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)用深灰名單中的接口。 |
實用功能
屏幕截圖
注:未指定路徑則医舆,默認為adb所在的文件夾
截圖保存到電腦:
adb exec-out screencap -p > sc.png
如果 adb 版本較老俘侠,無法使用 exec-out 命令,這時候建議更新 adb 版本蔬将。無法更新的話可以使用以下麻煩點的辦法:
先截圖保存到設備里:
adb shell screencap -p /sdcard/sc.png
然后將 png 文件導出到電腦:
adb pull /sdcard/sc.png
可以使用adb shell screencap -h
查看 screencap 命令的幫助信息爷速,下面是兩個有意義的參數(shù)及含義:
參數(shù) | 含義 |
---|---|
-p | 指定保存文件為 png 格式(如果指定文件后綴png,則可省略) |
-d display-id | 指定截圖的顯示屏編號(有多顯示屏的情況下) |
錄制屏幕
錄制屏幕以mp4格式保存到 /sdcard:
adb shell screenrecord /sdcard/filename.mp4
需要停止時按 Ctrl-C
霞怀,默認錄制時間和最長錄制時間都是 180 秒惫东。
如果需要導出到電腦:
adb pull /sdcard/filename.mp4
可以使用 adb shell screenrecord --help
查看 screenrecord 命令的幫助信息,下面是常見參數(shù)及含義:
參數(shù) | 含義 |
---|---|
--size WIDTHxHEIGHT | 視頻的尺寸,比如 1280x720廉沮,默認是屏幕分辨率颓遏。 |
--bit-rate RATE | 視頻的比特率,默認是 4Mbps滞时。 |
--time-limit TIME | 錄制時長叁幢,單位秒。 |
--verbose | 輸出更多信息坪稽。 |
開啟/關閉wifi
開啟
adb shell svc wifi enable
關閉
adb shell svc wifi disable
使用Monkey進行壓力測試
Monkey 可以生成偽隨機用戶事件來模擬單擊曼玩、觸摸、手勢等操作窒百,可以對正在開發(fā)中的程序進行隨機壓力測試演训。
簡單用法:
adb shell monkey -p <packagename> -v 500
表示向 <packagename>
指定的應用程序發(fā)送 500 個偽隨機事件。
更多內(nèi)容可見monkey官網(wǎng)