Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Am命令用法詳解

Am命令用法詳解

編輯:關於Android編程

作為一名開發者,相信對adb指令一定不會陌生。那麼在手機連接adb後,可通過am命令做很多操作:

(1) 撥打電話10086

adb shell am start -a android.intent.action.CALL -d tel:10086

(2) 打開網站www.gityuan.com

adb shell am start -a android.intent.action.VIEW -d  http://gityuan.com

(3) 啟動Activity: 啟動包名為com.yuanhh.app,主Activity為.MainActivity,且extra數據以”website”為key, “yuanh.com”為value。通過java代碼要完成該功能雖然不復雜,但至少需要一個android環境,而通過adb的方式,只需要在adb窗口,輸入如下命令便可完成:

am start -n com.yuanhh.app/.MainActivity -es website gityuan.com

am命令還可以啟動Service、Broadcast,殺進程,監控等功能,這些功能都非常便捷調試程序,接下來講述關於am更多更詳細的功能。

二、Am命令

命令格式:

am [subcommand] [options]

命令列表:

命令 功能 實現方法 am start [options] <INTENT> 啟動Activity startActivityAsUser am startservice <INTENT> 啟動Service startService am stopservice <INTENT> 停止Service stopService am broadcast <INTENT> 發送廣播 broadcastIntent am kill <PACKAGE> 殺指定後台進程 killBackgroundProcesses am kill-all 殺所有後台進程 killAllBackgroundProcesses am force-stop <PACKAGE> 強殺進程 forceStopPackage am hang 系統卡住 hang am restart 重啟 restart am bug-report 創建bugreport requestBugReport am dumpheap <pid> <file> 進程pid的堆信息輸出到file dumpheap am send-trim-memory <pid> <level> 收緊進程的內存 setProcessMemoryTrimLevel am monitor 監控 MyActivityController.run

am命令實的實現方式在Am.java,最終幾乎都是調用ActivityManagerService相應的方法來完成的,am monitor除外。比如前面概述中介紹的命令am start -a android.intent.action.VIEW -d http://gityuan.com, 啟動Acitivty最終調用的是ActivityManagerService類的startActivityAsUser()方法來完成的。再比如am kill-all命令,最終的實現工作是由ActivityManagerService的killBackgroundProcesses()方法完成的。

接下來,說說[options]和 <INTENT>參數的意義以及如何正確取值。

三、 Options

3.1 啟動Activity

主要是啟動Activity命令am start [options] <INTENT>使用options參數,接下來列舉Activity命令的[options]參數:

  • -D: 允許調試功能
  • -W: 等待app啟動完成
  • -R <COUNT>: 重復啟動Activity COUNT次
  • -S: 啟動activity之前,先調用forceStopPackage()方法強制停止app.
  • –opengl-trace: 運行獲取OpenGL函數的trace
  • –user <USER_ID> | current: 指定用戶來運行App,默認為當前用戶。
  • –start-profiler <FILE>: 啟動profiler,並將結果發送到 <FILE>;
  • -P <FILE>: 類似 –start-profiler,不同的是當app進入idle狀態,則停止profiling
  • –sampling INTERVAL: 設置profiler 取樣時間間隔,單位ms;

啟動Activity的實現原理: 存在-W參數則調用startActivityAndWait()方法來運行,否則startActivityAsUser()。

3.2 收緊內存

命令

am send-trim-memory  <pid> <level>

例如: 向pid=12345的進程,發出level=RUNNING_LOW的收緊內存命令

am send-trim-memory 12345 RUNNING_LOW。

那麼level取值范圍為: HIDDEN、RUNNING_MODERATE、BACKGROUND、RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE。

3.3 其他

對於am的子命令,startservice, stopservice, broadcast, kill, profile start, profile stop, dumpheap的可選參數都允許設置--user <USER_ID>。目前市面上的絕大多數手機還是單用戶模式,故可以忽略該參數,默認為當前用戶。

例如:啟動id=10010的用戶的指定service。

am startservice --user 10010

四、 Intent

Intent的參數和flags較多,本文為方便起見,分為3種類型參數,常用參數,Extra參數,Flags參數。

4.1 常用參數

  • -a <ACTION>: 指定Intent action, 實現原理Intent.setAction();
  • -n <COMPONENT>: 指定組件名,格式為{包名}/.{主Activity名},實現原理Intent.setComponent();
  • -d <DATA_URI>: 指定Intent data URI
  • -t <MIME_TYPE>: 指定Intent MIME Type
  • -c <CATEGORY> [-c <CATEGORY>] ...]:指定Intent category,實現原理Intent.addCategory()
  • -p <PACKAGE>: 指定包名,實現原理Intent.setPackage();
  • -f <FLAGS>: 添加flags,實現原理Intent.setFlags(int ),緊接著的參數必須是int型;

實例

am start -a android.intent.action.VIEW
am start -n com.yuanhh.app/.MainActivity
am start -d content://contacts/people/1
am start -t image/png
am start -c android.intent.category.APP_CONTACTS

4.2 Extra參數

(1). 基本類型

參數 -e/-es -esn -ez -ei -el -ef -eu -ecn 類型 String (String)null boolean int long float uri component

比如參數es是Extra String首字母簡稱,實例:

am start -n com.yuanhh.app/.MainActivity -es website gityuan.com

此處-es website gityuan.com,等價於Intent.putExtra(“website”, “gityuan.com”);

(2). 數組類型

參數 -esa -eia -ela -efa 數組類型 String[] int[] long[] float[]

比如參數eia,是Extra int array首字母簡稱,多個value值之間以逗號隔開,實例:

am start -n com.yuanhh.app/.MainActivity -ela weekday 1,2,3,4,5

此處-ela weekday 1,2,3,4,5,等價於Intent.putExtra(“weekday”, new int[]{1,2,3,4,5});

(3). ArrayList類型

參數 -esal -eial -elal -efal List類型 String int long float

比如參數efal,是Extra float Array List首字母簡稱,多個value值之間以逗號隔開,實例:

am start -n com.yuanhh.app/.MainActivity -efal nums 1.2,2.2

此處-efal nums 1.2,2.2,等價於先構造ArrayList變量,再通過putExtra放入第二個參數。

4.3 Flags參數

在參數類型1中,提到有-f <FLAGS>,是通過Intent.setFlags(int )方法,來設置Intent的flags.本小節也是關於flags,是通過Intent.addFlags(int )方法。如下所示,所有的flags參數。

[--grant-read-uri-permission] [--grant-write-uri-permission]
[--grant-persistable-uri-permission] [--grant-prefix-uri-permission]
[--debug-log-resolution]
[--exclude-stopped-packages] [--include-stopped-packages]
[--activity-brought-to-front] [--activity-clear-top]
[--activity-clear-when-task-reset] [--activity-exclude-from-recents]
[--activity-launched-from-history] [--activity-multiple-task]
[--activity-no-animation] [--activity-no-history]
[--activity-no-user-action] [--activity-previous-is-top]
[--activity-reorder-to-front] [--activity-reset-task-if-needed]
[--activity-single-top] [--activity-clear-task]
[--activity-task-on-home]
[--receiver-registered-only] [--receiver-replace-pending]

例如,發送action=”broadcast.demo”的廣播,並且對於forceStopPackage()的應用不允許接收該廣播,命令如下:

am broadcast -a broadcast.demo --exclude-stopped-packages
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved