概述
在 adb shell 中,您可以使用 Activity Manager (am) 工具发出命令以执行各种系统操作,如启动 Activity、强行停止进程、广播 intent、修改设备屏幕属性及其他操作。在 shell 中,此语法为:
1 | am <command> |
您也可以直接从 adb 发出 Activity Manager 命令,无需进入远程 shell。例如:
1 | adb shell am start -a android.intent.action.VIEW |
可用的 am 命令:
1 | usage: am [subcommand] [options] |
Intent 参数规范
由于好几个 am
命令都可以带 Intent
参数,比如 am start
、am broadcast
等,这里就先介绍一下 Intent 参数规范。
可以参考官方文档
[-a <ACTION>]
:指定 intent 的 Action(setAction()方法),如“android.intent.action.VIEW”。此指定只能声明一次。am start -a android.intent.action.hq.TEST_AM
[-d <DATA_URI>]
:指定 intent 的 Data(setData()方法),如“content://contacts/people/1”。此指定只能声明一次。[-t <MIME_TYPE>]
:指定 intent MIME 类型,如“image/png”。此指定只能声明一次。[-c <CATEGORY> [-c <CATEGORY>] ...]
:指定 intent 类别(addCategory(String category)),如“android.intent.category.APP_CONTACTS”。[-n <COMPONENT>]
:指定带有包名前缀的组件名称以创建显式 intent,如“com.example.heqiang.testsomething/.commontest.OtherTestActivity”。[--f <FLAG>]
:将标志添加到intent[-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
:添加一个 null extra。URI intent 不支持此选项。adb shell am start -a android.intent.action.hq.TEST_AM --es TEST test
,如果有多个参数:adb shell am start -a android.intent.action.hq.TEST_AM --es TEST test --es TEST1 test1
[--esn <EXTRA_KEY> ...]
:添加字符串数据作为键值对。adb shell am start -a android.intent.action.hq.TEST_AM --esn TEST
[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
:添加布尔型数据作为键值对。adb shell am start -a android.intent.action.hq.TEST_AM --ez TEST true
[--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
:添加整数型数据作为键值对。[--el <EXTRA_KEY> <EXTRA_LONG_VALUE> ...]
:添加长整型数据作为键值对。[--ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE> ...]
:添加浮点型数据作为键值对。[--eu <EXTRA_KEY> <EXTRA_URI_VALUE> ...]
:添加 URI 数据作为键值对。[--ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE>]
:添加组件名称,将其作为 ComponentName 对象进行转换和传递。[--eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]]
:添加整数数组, 转换成Integer[]进行传递[--eial <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]]
:添加整数数组,转换成List进行传递 [--ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]]
:添加长整型数组,转换成Long[]进行传递[--elal <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]]
:添加长整型数组,转换成List进行传递 [--efa <EXTRA_KEY> <EXTRA_FLOAT_VALUE>[,<EXTRA_FLOAT_VALUE...]]
:添加浮点型数组,转换成Float[]进行传递[--efal <EXTRA_KEY> <EXTRA_FLOAT_VALUE>[,<EXTRA_FLOAT_VALUE...]]
:添加浮点型数组,转换成List进行传递 [--esa <EXTRA_KEY> <EXTRA_STRING_VALUE>[,<EXTRA_STRING_VALUE...]]
:添加字符串数组,转换成String[]进行传递adb shell am start -a android.intent.action.hq.TEST_AM --esa TEST a,b,c
[--esal <EXTRA_KEY> <EXTRA_STRING_VALUE>[,<EXTRA_STRING_VALUE...]]
:添加字符串数组,转换成List进行传递 [--grant-read-uri-permission]
:包含标志 FLAG_GRANT_READ_URI_PERMISSION。[--grant-write-uri-permission]
:包含标志 FLAG_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]
:[--receiver-foreground]
:[--selector]
:[<URI> | <PACKAGE> | <COMPONENT>]
:如果不受上述某一选项的限制,那么就认为是直接指定 URI、包名和组件名称。当参数不受限制时,如果参数包含一个“:”(冒号),则认为参数是一个 URI;如果参数包含一个“/”(正斜杠),则认为参数是一个组件名称;否则认为参数是一个包名。
am start
启动 intent 指定的 Activity:
1 | am start [-D] [-N] [-W] [-P <FILE>] [--start-profiler <FILE>] |
可以使用一下选项:
- -D:启用调试。
- -N:启用 Natvie 调试。
-W:等待启动完成。
1
2
3
4
5
6Status: ok
Activity: com.example.heqiang.testsomething/.commontest.OtherTestActivity
ThisTime: 131
TotalTime: 131
WaitTime: 157
Complete–start-profiler
:启动分析器并将结果发送到 file。 - –sampling INTERVAL:制定采样率
- -P
:类似于 –start-profiler,但当应用进入空闲状态时分析停止。 - -R
:重复 Activity 启动 count 次数。在每次重复前,将完成顶部 Activity。 - -S:启动 Activity 前强行停止目标应用。
- –track-allocation:打开Allocation Tracker用来跟踪内存分配
- –user <USER_ID> | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行。
- –stack <STACK_ID>:指定将Activity放入的栈
am startservice
启动 intent 指定的 Service:
1 | am startservice [--user <USER_ID> | current] <INTENT> |
可以使用一下选项:
- –user <USER_ID> | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行。
am stopservice
停止一个 Service
1 | am stopservice [--user <USER_ID> | current] <INTENT> |
- –user <USER_ID> | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行。
am force-stop
1 | am force-stop [--user <USER_ID> | all | current] <PACKAGE> |
强行停止与 package(应用的包名称)关联的所有应用。
am kill
终止与 package(应用的包名称)关联的所有进程。此命令仅终止可安全终止且不会影响用户体验的进程。
1 | am kill [--user <USER_ID> | all | current] <PACKAGE> |
am kill-all
终止所有后台进程。
am broadcast
发出广播 intent。
1 | am broadcast [--user <USER_ID> | all | current] <INTENT> |
am stack
am stack start <DISPLAY_ID> <INTENT>
:am stack movetask <TASK_ID> <STACK_ID> [true|false]
:am stack resize <STACK_ID> <LEFT,TOP,RIGHT,BOTTOM>
:am stack resize-animated <STACK_ID> <LEFT,TOP,RIGHT,BOTTOM>
:am stack resize-docked-stack <LEFT,TOP,RIGHT,BOTTOM> [<TASK_LEFT,TASK_TOP,TASK_RIGHT,TASK_BOTTOM>]
:am stack size-docked-stack-test: <STEP_SIZE> <l|t|r|b> [DELAY_MS]
:am stack move-top-activity-to-pinned-stack: <STACK_ID> <LEFT,TOP,RIGHT,BOTTOM>
:am stack positiontask <TASK_ID> <STACK_ID> <POSITION>
:am stack list
:am stack info <STACK_ID>
:am stack remove <STACK_ID>
:am task lock <TASK_ID>
:am task lock stop
:am task resizeable <TASK_ID> [0 (unresizeable) | 1 (crop_windows) | 2 (resizeable) | 3 (resizeable_and_pipable)]
:am task resize <TASK_ID> <LEFT,TOP,RIGHT,BOTTOM>
:am task drag-task-test <TASK_ID> <STEP_SIZE> [DELAY_MS]
:am task size-task-test <TASK_ID> <STEP_SIZE> [DELAY_MS]
:
am get-config
am send-trim-memory
发送回收内存的命令,会调用 Application 和 Activity 的 onTrimMemory(int level)
方法。
1 | am send-trim-memory [--user <USER_ID>] <PROCESS> |
1 | adb shell am send-trim-memory com.example.heqiang.testsomething RUNNING_CRITICAL |