ADB——應用交互


使用ADB與手機應用交互

  應用交互的操作包括:啟動應用 / 調起Activity、調起Services、停止Service、發送廣播、強行停止應用

 

基本命令

am <command> 

  常用的command如下:

command 用途
start [options] <INTENT> 啟動<INTENT>指定的 Activity
startservice [options] <INTENT> 啟動<INTENT>指定的services
broadcast [options] <INTENT> 發送<INTENT>指定的廣播
force-stop <packagename> 停止<packgame> 相關的進程

  <INTENT>參數很靈活,和寫 Android 程序時代碼里的 Intent 相對應。

  用於決定 intent 對象的選項如下:

參數 含義
-a <ACTION> 指定 action,比如android.intent.action.VIEW
-c <CATEGORY> 指定 category,比如android.intent.category.APP_CONTACTS
-n <COMPONENT> 指定完整 component 名,用於明確指定啟動哪個 Activity,如com.example.app/.ExampleActivity

  <INTENT>里還能帶數據,就像寫代碼時的 Bundle 一樣:

   
參數 含義 --esn <EXTRA_KEY> null 值(只有 key 名)
`-e --es <EXTRA_KEY> <EXTRA_STRING_VALUE>`
--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 數組
--ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...] long 數組

 


啟動應用 / 調起Activity:

adb shell am start [options] <INTENT>

 

例如:

# 調起微信主界面。
adb shell am start -n com.tencent.mm/.ui.LauncherUI

# 調起 org.mazhuang.boottimemeasure/.MainActivity 並傳給它 string 數據鍵值對 toast - hello, world。
adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"

 

調起Services:

adb shell am startservice [options] <INTENT>

 

例如:

# 調起微信的某 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>

 

發送廣播

adb shell am broadcast [options] <INTENT>

 

  可以向所有組件廣播,也可以只向指定組件廣播。

  例如

# 向所有組件廣播 BOOT_COMPLETED:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

# 只向 org.mazhuang.boottimemeasure/.BootCompletedReceiver 廣播 BOOT_COMPLETED:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver

 

  這類用法在測試的時候很實用,比如某個廣播的場景很難制造,可以考慮通過這種方式來發送廣播。

  既能發送系統預定義的廣播,也能發送自定義廣播。如下是部分系統預定義廣播及正常觸發時機:

action 觸發時機
android.net.conn.CONNECTIVITY_CHANGE 網絡連接發生變化
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 連接狀態發生變化
android.net.wifi.WIFI_STATE_CHANGED WiFi 狀態變為啟用/關閉/正在啟動/正在關閉/未知
android.intent.action.BATTERY_CHANGED 電池電量發生變化
android.intent.action.INPUT_METHOD_CHANGED 系統輸入法發生變化
android.intent.action.ACTION_POWER_CONNECTED 外部電源連接
android.intent.action.ACTION_POWER_DISCONNECTED 外部電源斷開連接
android.intent.action.DREAMING_STARTED 系統開始休眠
android.intent.action.DREAMING_STOPPED 系統停止休眠
android.intent.action.WALLPAPER_CHANGED 壁紙發生變化
android.intent.action.HEADSET_PLUG 插入耳機
android.intent.action.MEDIA_UNMOUNTED 卸載外部介質
android.intent.action.MEDIA_MOUNTED 掛載外部介質
android.os.action.POWER_SAVE_MODE_CHANGED 省電模式開啟

(以上廣播均可使用 adb 觸發)

 

強制停止應用

adb shell am force-stop <packagename>

# 停止 360 安全衛士的一切進程與服務。
adb shell am force-stop com.qihoo360.mobilesafe

 

收緊內存:

adb shell am send-trim-memory  <pid> <level>
# pid: 進程 ID level: HIDDEN、RUNNING_MODERATE、BACKGROUND、 RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE

# 向 pid=12345 的進程,發出 level=RUNNING_LOW 的收緊內存命令。
adb shell am send-trim-memory 12345 RUNNING_LOW

 

 

         

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM