adb部分總結(jié)

adb常用命令

與應(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。

image.png

不指定Activity名稱啟動(dòng)(啟動(dòng)主Activity)

命令格式:

adb shell monkey -p <packagename> -c android.intent.category.LAUNCHER 1

啟動(dòng)QQ


image.png

調(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>

命令示例:


image.png

收緊內(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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ADB,即 Android Debug Bridge,它是 Android 開發(fā)/測試人員不可替代的強(qiáng)大工具,也是...
    猿萬閱讀 1,503評論 0 0
  • ADB,即 Android Debug Bridge,它是 Android 開發(fā)/測試人員不可替代的強(qiáng)大工具,也是...
    網(wǎng)絡(luò)安全自修室閱讀 19,049評論 0 6
  • ADB,即 Android Debug Bridge,它是 Android 開發(fā)/測試人員不可替代的強(qiáng)大工具 基本...
    android_趙樂瑋閱讀 960評論 0 2
  • 轉(zhuǎn)自 https://github.com/mzlogin/awesome-adb Adb ADB,即 Andro...
    hxljy閱讀 361評論 0 5
  • 原文地址[https://github.com/mzlogin/awesome-adb] 基本用法 命令語法 ad...
    SunshineBrother閱讀 895評論 0 2

友情鏈接更多精彩內(nèi)容