am(Activity Manager)是 Android 系统里负责「四大组件」运行调度的管理器:Activity、Service、BroadcastReceiver、ContentProvider。通过 am 命令,你可以直接在 Shell 里启动应用、跳转页面、发广播、调服务、管理多用户,是自动化测试与日常折腾的神器。

基本语法

1
am <command> [options]
1
2
3
adb shell am <command>
# 或
su -c "am <command>"

启动 Activity(打开应用 / 页面)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 打开指定包名的默认入口
am start -n 包名/.MainActivity

# 打开指定完整组件
am start -n 包名/全类名

# 打开应用详情设置页
am start -a android.settings.APPLICATION_DETAILS_SETTINGS -d package:包名

# 打开网址
am start -a android.intent.action.VIEW -d https://www.example.com

# 强制停止后再启动(冷启动)
am force-stop 包名
am start -n 包名/.MainActivity

-n 指定组件(包名/类名),-a 指定 Action,-d 指定数据 URI,-t 指定 MIME 类型。若参数含 / 则视为组件名,否则视为包名。

常用 Intent 参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 指定类型
am start -a android.intent.action.VIEW -t image/* -d file:///sdcard/a.jpg

# 附加字符串 extra
am start -n 包名/.MainActivity --es key value

# 附加整数 / 布尔 / 长整型 extra
am start -n 包名/.MainActivity --ei count 10
am start -n 包名/.MainActivity --ez flag true
am start -n 包名/.MainActivity --el time 1700000000000

# 指定 MIME 类型
am start -a android.intent.action.SEND -t text/plain --es android.intent.extra.TEXT "hello"

# 以 root 权限 / 指定用户启动
am start -n 包名/.MainActivity --user 0

启动 Service

1
2
3
4
5
6
7
8
# 启动服务(Android 8.0+ 有后台限制)
am start-service 包名/服务类名

# Android 8.0+ 前台服务推荐用法
am start-foreground-service 包名/服务类名

# 停止服务
am stop-service 包名/服务类名

发送广播

1
2
3
4
5
6
7
8
9
10
11
# 发送普通广播
am broadcast -a 自定义广播.Action

# 带 extra
am broadcast -a 包名.ACTION -e key value

# 指定目标包
am broadcast -a 包名.ACTION -p 目标包名

# 显式指定接收组件
am broadcast -n 包名/接收类

内容提供者

1
2
3
4
5
6
7
# 查询 ContentProvider
am content query --uri content://authority/table

# 插入 / 更新 / 删除
am content insert --uri content://authority/table --bind 列名:s:值
am content update --uri content://authority/table --bind 列名:s:值
am content delete --uri content://authority/table

进程管理

1
2
3
4
5
6
7
8
9
10
11
# 强制停止应用(最彻底,清后台)
am force-stop 包名

# 杀死进程(保留后台服务)
am kill 包名

# 杀死所有后台进程
am kill-all

# 发送内存压力(0 低 / 15 高,配合杀后台)
am send-trim-memory 包名 5

多用户操作(重点)

am 负责多用户的「运行」,与 pm(负责多用户的「创建与安装」)配合使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 启用用户(加载其后台服务与通知)
am start-user 10

# 停止用户(冻结其全部后台)
am stop-user 10

# 切换到某个用户(类似手机切换账户)
am switch-user 10

# 查看当前前台用户
am get-current-user

# 查看指定用户状态(RUNNING / STOPPED 等)
am get-user-state 10

# 查询包对应的 UID
am get-uid 包名

# 用指定用户身份启动应用(多开 / 分身的本质)
am start --user 10 -n 包名/.MainActivity

# 强制停止某用户下的应用
am force-stop --user 10 包名

搭配流程:先用 pm create-user --user-type ... 创建分身用户 → 用 pm install --user 10 装应用 → 再用 am start-user 10 启用并 am start --user 10 启动。

调试与任务栈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看当前焦点 Activity
am task list

# 查看 Activity 栈
am stack list

# 移动任务到指定栈(分屏 / 多窗口)
am stack move-task 任务ID 栈ID

# 记录 Activity 启动 TRACE
am profile start 包名
am profile stop 包名

# 监控启动时间
am start --start-profiler /sdcard/trace.perf -n 包名/.MainActivity

系统配置与杂项

1
2
3
4
5
6
7
8
9
10
11
12
# 查看当前系统配置
am get-config

# 指定应用的待机模式(standby bucket)
am set-standby-bucket 包名 active
am clear-standby-bucket 包名

# 设置应用不活跃(配合 Doze)
am set-inactive 包名 true

# 附加调试 agent(Android 11+)
am attach-agent 包名 agent.jar

实战:一键冷启动应用并等待

1
2
3
4
# 脚本示例:冷启动微信
adb shell am force-stop com.tencent.mm
sleep 1
adb shell am start -n com.tencent.mm/.ui.LauncherUI

版本变更历史

Android 版本 API am 新增能力
1.0 1 am 诞生:start / startservice / broadcast / force-stop
4.0 14 am kill、am get-uid、am --user
4.2 17 多用户:am start-user / stop-user / switch-user / get-current-user
5.0 21 am task list、am stack list、am get-config
6.0 23 am monitor、am profile 增强
7.0 24 am send-trim-memory、am set-inactive
8.0 26 后台服务限制:推荐 am start-foreground-service(start-service 开始受限)
9.0 28 am get-user-state;start-service 显式报错警告
10 29 am start-foreground-service 取代 start-service;--user 全面支持
11 30 am attach-agent;am kill-all
12 31 am stack 多窗口完善;前台服务超时管理
13 33 start-service 从后台调用被彻底限制;am set-standby-bucket
14 34 前台服务类型强制声明;am 对 FGS 规则增强
15 35 前台服务超时/限制细化;多用户运行管理完善

注意事项

  • am start 的组件类名必须以 包名. 开头,完整路径可用 dumpsys package 查看。
  • 部分命令(--user 指定非当前用户、am profile)需要 Root 权限。
  • Android 8.0 起后台 Service 受限,能用 start-foreground-service 就别用 start-service。
  • am start-service 在 Android 13+ 基本废弃,系统会直接拒绝后台场景调用。

am 是四大组件的「遥控器」,配合 pm 和 appops,你能在 Shell 里完成大部分系统级操作。