am全称Activity Manager,即活动管理器,在进行安卓应用调试、测试等工作时可以通过该命令集去调用各种系统操作。本文旨在对一些日常工作中常用的am命令进行收集和整理。
一、package name 与activity name的获取
am命令通常需要对包或者指定活动进行操作,因此我们需要做的第一步就是获取到目标包名和activity。
#获取launcher activity,当需要通过am来启动应用时,通常需要拿到启动活动,可以通过pm命令查询包信息的方式来查询
adb shell pm dump packageName

通过查询启动分类,可以得到这个launcher activity 所属的intent类型名,然后可以通过这个分类名去定位到dump输出里面的launcher activity,如下图所示。(PS:这个dump输出指的是 adb shell pm dump packageName 命令执行的输出内容,上图中的输出只会定位到分类名。)

另外通过图中的信息,我们还会发现一个其他定位的方式,标记的Actions下应用启动的action通用是MAIN标志,比如上图的android.intent.action.Main,也可以通过这个查找这个参数来定位launcher activity。当然查询的方式并不只是这一种,其他方式请自行查询。
#通过cmd定位当前窗口运行的应用包和活动名
adb shell dumpsys window | findstr Current

图中蓝色部分为package name,红色部分为 activity name
#也可以选择更为精准的参数获取,在上图中我们会发现有一个指向性的参数mCurrentFocus,我们可以通过这个参数做到更为准确的获取
adb shell dumpsys window | findstr mCurrentFocus

二、常用的参数
am命令基本都是基于intent来实现行为操作,这里列举一些较常见的的参数和使用说明。
#通用的命令格式
adb shell am [options] intent
常用options参数说明
- -a:指定intent action,调用指定的操作行为,比如广播、拨号、网页打开等等
- -n < COMPONENT>: 指定组件名,格式为{包名}/.{主Activity名}
- -d < DATA_URI>: 指定Intent data URI,主要作为动作的传参用途
- -t < MIME_TYPE>: 指定Intent MIME Type
- -c < CATEGORY> [-c < CATEGORY>] …]:指定Intent category
- -p < PACKAGE>: 指定包名
- -f < FLAGS>: 添加flags,后续参数必须是int型
常用的intent参数(action)说明
启动应用程序或 Activity:
- android.intent.action.MAIN: 通常与 Category.LAUNCHER 结合使用来启动应用的主入口。
- android.intent.action.VIEW: 用于查看特定类型的数据,常用于网页链接或文件。
- android.intent.action.DIAL: 显示拨号界面。
- android.intent.action.CALL: 直接拨打号码(需要权限)。
- android.intent.action.SEND: 发送文本或数据
系统设置相关
- android.settings.WIFI_SETTINGS: 打开 WiFi 设置。
- android.settings.BLUETOOTH_SETTINGS: 打开蓝牙设置。
- android.settings.ACTION_DATA_ROAMING_SETTINGS: 打开数据漫游设置。
- android.settings.ACTION_DATE_SETTINGS: 打开日期和时间设置。
设备管理
- android.intent.action.REBOOT: 重启设备
- android.intent.action.POWER_OFF: 关闭设备。
- android.intent.action.MASTER_CLEAR: 恢复出厂设置。
媒体控制
- android.media.action.MEDIA_PLAY: 开始播放媒体。
- android.media.action.MEDIA_PAUSE: 暂停播放媒体。
位置和地图
- android.intent.action.VIEW 结合地理坐标 URI (geo:,) 可以打开地图应用并定位到特定地点。
浏览器动作
- android.intent.action.VIEW 结合 URL 数据 URI (http:// 或 https://) 可以打开网页。
#启动网页并打开指定的网站
adb shell am start -a android.intent.action.VIEW -d http://www.example.com
广播通知
- android.intent.action.BOOT_COMPLETED: 当系统启动完成后发送。
- android.net.conn.CONNECTIVITY_CHANGE: 网络连接状态改变时发送。
- android.intent.action.SCREEN_ON 和 android.intent.action.SCREEN_OFF: 屏幕开启或关闭时发送。
- android.intent.action.LOW_MEMORY: 系统内存低时发送。
- android.intent.action.NETWORK_TRAFFIC: 当网络流量达到一定阈值时发送。
- android.intent.action.PHONE_STATE: 电话状态改变时发送。
#可以通过broadcast模拟发送系统广播,比如开机完成的广播
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
#同时也支持自定义的广播,但需要注意的是,自定义的广播同样需要自定义的广播接收和触发,通常需要增加额外参数比如数据(-d),类型(-t),类别(-c)或者额外参数(--es)(--ei)等
adb shell am broadcast -a com.example.MY_CUSTOM_BROADCAST --es message "hello world"
三、常用指令
启动:start
当想要启动 Android 设备上的一个特定应用或应用内的特定活动(Activity)时,可以使用以下格式的命令
#这里的<package>/<activity>请参考第一部分的内容,如果是需要启动应用的话,这里的activity需要用到launcher activity
adb shell am start -n <package>/<activity>
#另外还可以通过补充参数来满足应用需求
#-W:等待启动完成,启动过程为点击应用图标到应用
另外还可以通过补充参数来满足应用需求:
-W:等待启动完成,启动过程为点击应用图标到应用加载完成,会输出应用启动相关的信息,可用于查看启动耗时。
adb shell am start -n com.alipay.hulu/.activity.SplashActivity -W

-S:在启动 activity 前,强行停止目标应用
adb shell am start -S com.alipay.hulu/.activity.SplashActivity
-D:启用调试功能
-R count:重复启动 activity count 次。在每次重复前,将完成顶层 activity。
进程停止:force-stop、kill、kill-all
#强行停止与package相关的所有进程
adb shell am force-stop package
#终止与package关联的所有进程,仅限于可安全终止的进程,提供option选项,可指定目标进程,未指定则终止所有
adb shell am kill [options] package
#终止所有后台进程,无差别杀死
adb shell am kill-all
进程监控:monitor
#监控crash和ANR,提供一个选项 --gdb:在崩溃/ANR 时,在给定的端口上启动 gdbserver,可通过ctrl+c停止监控
adb shell am monitor [option]
性能分析:profile start、profile stop
#启动 process 的性能分析器,将结果写入 file
profile start process file
#停止 process 的性能分析器
profile stop process

222

被折叠的 条评论
为什么被折叠?



