android am命令用法
原址
一、概述
作为一名开发者,相信对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
android am命令用法相关推荐
- android pm命令用法
原址 一.Pm命令 命令格式: pm <command> 命令列表: 命令 功能 实现方法 list packages 列举app包信息 PMS.getInstalledPackages ...
- Android中am命令用法详解
Android中am命令用法 位于frameworks/base/cmds/pm am命令作用:管理Activity usage: am [start|broadcast|instrument|pro ...
- android 系统(108)---Android getevent sendevent用法
Android getevent用法 getevent命令用法如下: Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [ ...
- android 系统(6)---Android ADB 命令大全
原文链接:https://github.com/mzlogin/awesome-adb ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也 ...
- linux下logcat命令,Android shell命令行中过滤adb logcat输出的几种方法
我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adb lo ...
- Android之Adapter用法总结
本文转自http://kb.cnblogs.com/a/2328334/,转载请注明原出处. Android之Adapter用法总结 作者:Devin Zhang 来源:博客园 发布时间:2012 ...
- Android的Adapter用法总结
Android之Adapter用法总结 1.Adapter概念 定义为将一个类的接口变换成客户端所期待的一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 在androi ...
- pm2常用的命令用法介绍
pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的,下面我们来看pm2常用的命令用法介绍吧 ...
- 7月11日任务 shell介绍、shell结构和执行 、date命令用法、shell脚本中的变量
2019独角兽企业重金招聘Python工程师标准>>> 20.1 Shell脚本介绍 • shell是一种脚本语言 aming_linux blog.lishiming.net ...
最新文章
- 【Deep Clustering】Improving Unsupervised Image Clustering With Robust Learning
- PostgreSQL 10.1 手册_部分 II. SQL 语言_第 10 章 类型转换_10.4. 值存储
- 冷热分离和直接使用大数据库_基于 MySQL 的热数据与冷数据分离设计与实现
- 限时免费!Cell旗下 Heliyon 多学科特刊征稿
- Eclipse下Maven工程多模块继承和聚合的创建
- 在Keil中利用AStyle插件格式化代码
- 关于IT测试中的一些问题。
- excel内容少却文件很大_Excel文件格式批量转换你会了吗?神操作!Excel文件转XPS格式...
- java自动化静态代码检查_Jenkins+findbugs对java代码进行静态代码分析
- win10开机推送的壁纸寻找
- Python期末考试题库
- 高斯消元法解线性方程组(C++实现)
- Qt操作Word文档
- 阿里、腾讯等大厂技术面试题目汇总
- html5道歉模板,给朋友的道歉信模板5篇2020
- SQL注入原理讲解,很不错!
- C++:STL教程从入门到精通
- 数字改中文小写(含思路,python)
- java web网络硬盘设计_基于JavaEE网络硬盘的设计与实现
- 在Ubuntu Linux 15.04安装Web云桌面eyeOS