am 是 Activity Manager 的缩写,它是 Android 系统中一个核心的命令行工具,用于与系统的活动管理器进行交互,开发者、测试人员和高级用户经常使用它来启动、调试和管理应用程序。

am 命令是什么?
am 命令位于 Android 系统的 /system/bin/ 目录下,它允许你从命令行(通过 adb shell)或一个应用程序中,以编程方式控制 Android 的活动管理器。
它的主要功能包括:
- 启动 Activity: 打开一个应用的界面。
- 启动 Service: 启动一个后台服务。
- 发送广播: 向系统或应用发送一个
Intent。 - 强制停止应用: 强制关闭一个应用及其所有组件。
- 获取应用信息: 查看任务、进程等状态。
如何使用 am 命令?
你通常需要通过 adb shell 来访问 am 命令。
# 连接设备并进入 shell adb shell # 在 shell 内部使用 am 命令 am <command>
常用 am 命令详解
下面是最常用的一些 am 命令及其用法。

A. 启动 Activity (startactivity)
这是最常用的功能,用于启动一个 Activity。
基本语法:
am startactivity [options] <INTENT>
<INTENT> 的格式:
<INTENT> 通常是一个 Intent 的 URI 格式,
<ACTION> (<DATA>) [<EXTRA_KEY> <EXTRA_VALUE>] [<FLAG>]
常用选项:
-W: 等待 Activity 启动完成,并返回启动信息(耗时、是否成功等)。-D: 开启调试模式,会等待调试器附加。-n: 直接指定要启动的组件,格式为ComponentName,即包名/类名,这是最明确的方式。
示例:
-
启动一个应用的主 Activity: 假设要启动微信的主 Activity,你需要先知道它的包名和主 Activity 类名(可以通过
adb shell dumpsys activity或aapt工具查看)。# 启动微信 am start -n com.tencent.mm/.ui.LauncherUI
-
通过 Action 启动: 打开系统默认的网页浏览器并访问一个 URL。
am start -a android.intent.action.VIEW -d "https://www.google.com"
-
带 Extra 启动: 启动一个应用并传递数据,启动一个分享界面。
am start -a android.intent.action.SEND -t text/plain --es "android.intent.extra.TEXT" "Hello from ADB!"
-a android.intent.action.SEND: 指定 Action 为 "分享"。-t text/plain: 指定数据类型为纯文本。--es "android.intent.extra.TEXT" "...": 传递一个字符串类型的 Extra,键为android.intent.extra.TEXT,值为Hello from ADB!。
-
等待启动并查看结果:
am start -W -n com.tencent.mm/.ui.LauncherUI
执行后会输出类似信息:
Starting: Intent { cmp=com.tencent.mm/.ui.LauncherUI } Status: ok Activity: com.tencent.mm/.ui.LauncherUI ThisTime: 320 TotalTime: 320 WaitTime: 325这里的
TotalTime就是启动耗时。
B. 启动 Service (startservice)
用于启动一个后台服务。
基本语法:
am startservice [options] <INTENT>
示例:
# 启动一个音乐播放服务 am startservice -n com.example.music/.service.MusicPlayerService
C. 发送广播 (broadcast)
向系统或应用发送一个广播消息。
基本语法:
am broadcast [options] <INTENT>
示例:
-
发送系统广播: 重启设备(需要 root 权限)。
am broadcast -a android.intent.action.REBOOT
-
发送自定义广播: 通知一个应用数据已更新。
am broadcast -a com.example.myapp.DATA_UPDATED --es "data_type" "user_profile"
D. 强制停止应用 (force-stop)
强制停止一个应用的所有组件(Activity, Service, BroadcastReceiver 等),这会清除该应用的所有任务。
基本语法:
am force-stop <PACKAGE_NAME>
示例:
# 强制停止微信 am force-stop com.tencent.mm
E. 清除应用数据 (clear)
清除应用的用户数据,如缓存、数据库、SharedPreferences 等。注意:此操作不可逆!
基本语法:
am clear <PACKAGE_NAME>
示例:
# 清除微信的所有用户数据 am clear com.tencent.mm
F. 获取任务列表 (stack list)
查看当前正在运行的任务(Activities)。
基本语法:
am stack list
示例:
am stack list
输出会显示所有任务栈的信息,包括最顶层的 Activity。
G. 移动任务到前台 (move-task)
将指定的任务移动到前台。
基本语法:
am move-task <task_id> to {top|bottom}
如何获取 task_id?
可以通过 am stack list 命令查看。
实用技巧与注意事项
-
获取包名和类名: 这是最常见的难题,可以使用以下方法:
adb shell dumpsys activity: 查看所有 Activity 信息,从中找到你需要的包名和类名,信息量很大,建议用grep过滤。adb shell dumpsys activity | grep -E 'mFocusedActivity|Hist'}
- 使用
aapt工具: 在你的 Android SDK 的build-tools目录下,使用aapt dump badging <你的apk文件.apk>可以解析出 APK 的所有信息,包括主 Activity。
-
Intent 的缩写:
-a:--action(指定 Action)-d:--data(指定 Data URI)-t:--type(指定 Data Type)-e:--es(传递 String Extra)--ez: (传递 boolean Extra)--ei: (传递 int Extra)-n:--name(指定 ComponentName 的类名部分)-p:--pkg(指定 ComponentName 的包名部分)
-
权限问题: 某些
am命令(如force-stop,reboot)需要shell用户或更高权限才能执行,在普通设备上可能会被拒绝。 -
Intent 过滤器: 当你只提供 Action 和 Data 启动 Activity 时,系统会寻找所有匹配该 Intent 过滤器的 Activity,并弹出一个选择对话框,为了避免这种情况,最好使用
-n选项直接指定完整的组件名。
am 命令是 Android 开发和测试的瑞士军刀,掌握它能让你高效地自动化测试流程、快速调试应用、手动触发特定功能,并深入理解 Android 的启动机制。
| 命令类别 | 常用命令 | 功能描述 |
|---|---|---|
| 启动组件 | am start -n <包名/类名> |
启动指定的 Activity |
am start -a <ACTION> -d <URI> |
通过 Action 和 Data 启动 Activity | |
am startservice -n <包名/类名> |
启动指定的 Service | |
| 系统交互 | am broadcast -a <ACTION> |
发送一个广播 |
am force-stop <包名> |
强制停止一个应用 | |
am clear <包名> |
清除一个应用的用户数据 | |
| 信息查看 | am stack list |
列出当前所有任务 |
am get-config |
获取当前设备的配置信息(如屏幕尺寸、密度等) |
希望这份详细的解释对你有帮助!
