在平时开发中,通过命令行有时候能够快速的帮我们实现一些功能,这里对常用的命令做一些总结。

1、AM命令用法

1.1、简单介绍

am指令是 activity manager的缩写,可以启动Service、Broadcast,杀进程,监控等功能,这些功能都非常便捷调试程序。

可以通过adb shell 进入Android 的Linux命令界面,输入am -help查看详细命令,先介绍几个简单用法,

//使用Action方式打开系统设置-输入法设置

am start -a android.settings.INPUT_METHOD_SETTINGS

//使用Action方式打开网站https://amberweather.com

am start -a android.intent.action.VIEW -d https://amberweather.com

//打开拨号界面,并传递一个DATA_URI数据给拨号界面

am start -a android.intent.action.CALL -d tel:10086

1.2、AM命令

命令格式如下

am [command] [options]

命令列表:

命令

功能

实现方法

am start [options]

启动Activity

startActivityAsUser

am startservice

启动Service

startService

am stopservice

停止Service

stopService

am broadcast

发送广播

broadcastIntent

am restart

重启

restart

am dumpheap

进程pid的堆信息输出到file

dumpheap

am send-trim-memory

收紧进程的内存

setProcessMemoryTrimLevel

am kill

杀指定后台进程

killBackgroundProcesses

am kill-all

杀所有后台进程

killAllBackgroundProcesses

am force-stop

强杀进程

forceStopPackage

am hang

系统卡住

hang

am monitor

监控

MyActivityController.run

原理分析:am命令实的实现方式在Am.java,最终几乎都是调用ActivityManagerService相应的方法来完成的,am monitor除外。比如前面概述中介绍的命令am start -a android.intent.action.VIEW -d https://amberweather.com, 启动Acitivty最终调用的是ActivityManagerService类的startActivityAsUser()方法来完成的。再比如am kill-all命令,最终的实现工作是由ActivityManagerService的killBackgroundProcesses()方法完成的。

下面说一下[options]和 参数的意义以及如何正确取值。

1.3、 Options

1.3.1 启动Activity

主要是启动Activity命令am start [options] 使用options参数,接下来列举Activity命令的[options]参数:

-D:开启debug模式

-W:等待启动完成

--start-profiler:将profiler中的结果输出到指定文件中

-P:和--start-profiler一样,区别在于,在app进入idle状态时profiler结束

-R : 重复启动Activity,但每次重复启动都会关闭掉最上面的Activity

-S:关闭Activity所属的App进程后再启动Activity

--opengl-trace:开启OpenGL tracing

--user :使用指定的用户来启动activity,如果不输入,则使用当前用户执行

启动Activity的实现原理: 存在-W参数则调用startActivityAndWait()方法来运行,否则startActivityAsUser()。

1.3.2 收紧内存

命令

am send-trim-memory

例如: 向pid=12345的进程,发出level=RUNNING_LOW的收紧内存命令

am send-trim-memory 12345 RUNNING_LOW。

level取值范围为: HIDDEN、RUNNING_MODERATE、BACKGROUND、RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE

1.3.3 其他

am的子命令,startservice, stopservice, broadcast, kill, profile start, profile stop, dumpheap的可选参数都允许设置--user 。目前市面上的绝大多数手机还是单用户模式,因此可以忽略该参数,默认为当前用户。

例如:启动id=10001的用户的指定service。

am startservice --user 10010 [Intent]

1.4 Intent

Intent的参数和flags较多,为了方便,这里分为3种类型参数,常用参数,Extra参数,Flags参数

1.4.1 常用参数

-a : 指定Intent action, 实现原理Intent.setAction();

-n : 指定组件名,格式为{包名}/.{主Activity名},实现原理Intent.setComponent();

-d : 指定Intent data URI

-t : 指定Intent MIME Type

-c [-c ] ...]:指定Intent category,实现原理Intent.addCategory()

-p : 指定包名,实现原理Intent.setPackage();

-f : 添加flags,实现原理Intent.setFlags(int ),紧接着的参数必须是int型;

实例

am start -a android.intent.action.VIEW

am start -n mobi.infolife.ezweather.locker.locker_2/.LockerActivity

am start -d content://contacts/people/1

am start -t image/png

am start -c android.intent.category.APP_CONTACTS

1.4.2 Extra参数

(1). 基本类型

参数

-e/-es

-esn

-ez

-ei

-el

-ef

-eu

类型

String

(String)

boolean

int

long

float

uri

参数es是Extra String首字母简称,实例:

am start -n com.cnr.tlive/.MainActivity -es test

(2). 数组类型

参数

-esa

-eia

-ela

-efa

数组类型

String[]

int[]

long[]

float[]

参数eia,是Extra int array首字母简称,多个value值之间以逗号隔开,实例:

am start -n com.cnr.tlive/com.cnr.tlive.activity.MainActivity -ela day 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.cnr.tlive.activity.MainActivity-efal nums 1.2,2.2

2、PM命令用法

2.1、简单介绍

pm工具为包管理(package manager)的简称,可以使用pm工具来执行应用的安装和查询应用宝的信息、系统权限、控制应用,pm工具是Android开发与测试过程中必不可少的工具,shell命令格式如下:

pm

命令

功能

实现方法

list packages

列举app包信息

PMS.getInstalledPackages

install [options]

安装应用

PMS.installPackageAsUser

uninstall [options]

卸载应用

IPackageInstaller.uninstall

enable

enable

PMS.setEnabledSetting

disable

disable

PMS.setEnabledSetting

hide

隐藏应用

PMS.setApplicationHiddenSettingAsUser

unhide

显示应用

PMS.setApplicationHiddenSettingAsUser

get-install-location

获取安装位置

PMS.getInstallLocation

set-install-location

设置安装位置

PMS.setInstallLocation

path

查看App路径

PMS.getPackageInfo

clear

清空App数据

AMS.clearApplicationUserData

get-max-users

最大用户数

UserManager.getMaxSupportedUsers

force-dex-opt

dex优化

PMS.forceDexOpt

dump

dump信息

AM.dumpPackageStateStatic

trim-caches

紧缩cache目标大小

PMS.freeStorageAndNotify

原理分析:pm命令实的实现方式在Pm.java,最后大多数都是调用PackageManagerService相应的方法来完成的。disbale之后,在桌面和应用程序列表里边都看到不该app。

2.2、详细参数

2.2.1 list packages

查看所有的package,

list packages [options]

[options]参数:

-f: 显示包名所关联的文件;

-d: 只显示disabled包名;

-e: 只显示enabled包名;

-s: 只显示系统包名;

-3: 只显示第3方应用的包名;

-i: 包名所相应的installer;

-u: 包含uninstalled包名.

disabled + enabled = 总应用个数; 系统 + 第三方 = 总应用个数。

查看第3方应用:

pm list packages -3

查看已经被禁用的包名

pm list packages -d

参数

当FILTER为不为空时,则只会输出包名带有FILTER字段的应用;当FILTER为空时,则默认显示所有满足条件的应用。

例如,查看包名带有weather字段的包名

pm list packages weather

2.2.3 pm Install

pm install [options]

[options]参数:

-r: 覆盖安装已存在Apk,并保持原有数据;

-d: 运行安装低版本Apk;

-t: 运行安装测试Apk

-i : 指定Apk的安装器;

-s: 安装apk到共享快存储,比如sdcard;

-f: 安装apk到内部系统内存;

-l: 安装过程,持有转发锁

-g: 准许Apk manifest中的所有权限;

参数: 指的是需要安装的apk所在的路径

2.2.4其他参数

pm list users //查看当前手机用户

pm list libraries //查看当前设备所支持的库

pm list features //查看系统所有的features

pm list instrumentation //所有测试包的信息

pm list permission-groups //查看所有的权限组

pm list permissions [options] 查看权限

-g: 以组形式组织;

-f: 打印所有信息;

-s: 简要信息;

-d: 只列举危险权限;

-u: 只列举用户可见的权限。

3、dumpsys

3.1 dumpsys原理简介

dumpsys是Android自带的强大debug工具,从名字就可以看出,主要是用于dump 当前android system的一些信息,是一项分析手机问题,运行状态,使用情况等十分有效的手段。

实现原理

dumpsys的源码结构其实很简单,只有一个dumpsys.cpp

/frameworks/native/cmds/dumpsys/dumpsys.cpp

int main(int argc, char* const argv[])

{

...

//获取defaultServiceManager

sp sm = defaultServiceManager();

...

Vector services;

...

services = sm->listServices();

...

const size_t N = services.size();

for (size_t i=0; i

sp service = sm->checkService(services[i]);

...

int err = service->dump(STDOUT_FILENO, args);

...

}

return 0;

}

先通过defaultServiceManager()函数获得ServiceManager对象,然后根据dumpsys传进来的参数通过函数checkService来找到具体的service, 并执行该service的dump方法,达到dump service的目的。

3.2 dumpsy命令

3.2.1 服务列表

不同的Android系统版本支持的命令有所不同,可通过下面命令查看当前手机所支持的dump服务,先进入adb shell,再执行如下命令:dumpsys -l。 这些服务名可能并看不出其调用的哪个服务,可以通过下面指令:service list。

服务列表有很多,这里简单介绍几种

服务名

类名

功能

activity

ActivityManagerService

AMS相关信息

package

PackageManagerService

PMS相关信息

window

WindowManagerService

WMS相关信息

input

InputManagerService

IMS相关信息

power

PowerManagerService

PMS相关信息

battery

BatteryService

电池信息

dropbox

DropboxManagerService

调试相关

cpuinfo

CpuBinder

CPU

meminfo

MemBinder

内存

dbinfo

DbBinder

数据库

3.2.2 查询服务

通过下面命令可打印具体某一项服务:dumpsys ,其中service便是前面表格中的服务名

dumpsys cpuinfo //打印一段时间进程的CPU使用百分比排行榜

dumpsys meminfo -h //查看dump内存的帮助信息

dumpsys package //查看指定包的信息

接下来主要说下dumpsys activity 用法

3.3 Activity

命令

dumpsys activity [options] [cmd]

options可选值

-a:dump所有;

-c:dump客户端;

-p [package]:dump指定的包名;

-h:输出帮助信息;

dumpsys activity等价于依次输出下面7条指令:

dumpsys activity intents

dumpsys activity broadcasts

dumpsys activity providers

dumpsys activity services

dumpsys activity recents

dumpsys activity activities

dumpsys activity processes

cmd可选值

cmd

说明

缩写

activities

activity状态

a

broadcasts

广播

b

intents

pending intent状态

i

processes

进程

p

oom

内存溢出

o

services

Service状态

s

providers

ContentProvider状态

prov

provider

ContentProvider状态(Client端)

package

package相关信息

all

所有的activities信息

recents

recent activity状态

top

top activity信息

注:

cmd:上表加粗项是指直接跟包名,另外services和providers还可以跟组件名;

缩写:基本都是cmd首字母或者前几个字母,用cmd和缩写是等效: dumpsys activity broadcasts 和 dumpsys activity b 等效

3.4 dumpsys meminfo

命令

dumpsys meminfo

返回结果

Total PSS by process://以process来划分

122677 kB: com.android.browser (pid 5807 / activities)

96473 kB: system (pid 661)

93999 kB: com.android.systemui (pid 745)

90564 kB: mobi.infolife.ezweather.locker.locker_2 (pid 1115 / activities)

56021 kB: mobi.infolife.ezweather.widget.soccer_season (pid 1745)

50044 kB: mobi.infolife.ezweather.widget.gcolour (pid 5147)

40171 kB: com.android.launcher3 (pid 887 / activities)

...

Total PSS by OOM adjustment: //以oom来划分.

112247 kB: Native

34819 kB: local_opengl (pid 231)

24076 kB: zygote (pid 342)

17226 kB: mediaserver (pid 340)

9041 kB: genybaseband (pid 138)

3881 kB: logd (pid 115)

2071 kB: wpa_supplicant (pid 872)

1976 kB: genyd (pid 132)

1678 kB: drmserver (pid 238)

1648 kB: surfaceflinger (pid 339)

1444 kB: vold (pid 122)

1330 kB: sdcard (pid 736)

1118 kB: netd (pid 338)

864 kB: adbd (pid 136)

768 kB: debuggerd (pid 236)

763 kB: keystore (pid 241)

724 kB: /init (pid 1)

Total PSS by category:// 以category划分

216031 kB: Native

169950 kB: Dalvik

121137 kB: .dex mmap

73616 kB: Ashmem

68426 kB: Unknown

64952 kB: .apk mmap

63304 kB: .so mmap

53932 kB: .oat mmap

27704 kB: .art mmap

15919 kB: Other mmap

14777 kB: Dalvik Other

9222 kB: .ttf mmap

8548 kB: Stack

148 kB: Other dev

0 kB: Cursor

0 kB: Gfx dev

0 kB: .jar mmap

0 kB: EGL mtrack

0 kB: GL mtrack

0 kB: Other mtrack

Total RAM: 4049068 kB (status normal)//整体情况

Free RAM: 3105215 kB (65839 cached pss + 503700 cached kernel + 2535676 free)

Used RAM: 1020031 kB (841827 used pss + 178204 kernel)

Lost RAM: -76178 kB

Tuning: 96 (large 256), oom 184320 kB, restore limit 61440 kB (high-end-gfx)

上面的输出结果可以分为以下四个部分

PSS- Proportional Size 实际使用的物理内存(比例分配共享库占用的内存)

按比例包含共享库所占用的内存,比如有9k的共享库被3个进程使用,那个当前进程所占用的大小被计算为9/3k,也就是3k

-序列

划分类型

排序

解释

1

process

PSS

以进程的PSS从大到小依次排序显示,每行显示一个进程;

2

OOM adj

PSS

Native/System/Persistent/Foreground/Visible/Perceptible/A Services/Home/B Services/Cached,分别显示每类的进程情况

3

category

PSS

以Dalvik/Native/.art mmap/.dex map等划分的各类进程的总PSS情况

4

total

-

总内存、剩余内存、可用内存、其他内存

也可以只输出某个pid或package的进程信息:

dumpsys meminfo // 输出指定pid的某一进程

dumpsys meminfo --package // 输出指定包名的进程,可能包含多个进程

3.4 使用场景

下面以AmberLocker作为实例进行分析

场景1:查询某个App所有的Service状态

dumpsys activity s mobi.infolife.ezweather.locker.locker_2

解读:Service类名为com.amber.lockscreen.LockerHeartService,包名为mobi.infolife.ezweather.locker.locker_2,baseDir(apk路径)为/data/app/mobi.infolife.ezweather.locker.locker_2-2/base.apk,dataDir((apk数据路径)

运行在进程pid=1115,进程名为进程名为mobi.infolife.ezweather.locker.locker_2,,uid=10060,还有创建时间等信息

场景2:查询某个App所有的广播状态

dumpsys activity b mobi.infolife.ezweather.locker.locker_2

场景3:查询某个App所有的Activity状态

dumpsys activity a mobi.infolife.ezweather.locker.locker_2

场景4:查询某个App的进程状态

dumpsys activity p mobi.infolife.ezweather.locker.locker_2

格式:ProcessRecord{Hashcode pid:进程名/uid},进程pid=941,进程名为mobi.infolife.ezweather.locker.locker_2:live,uid=10060.

该进程中还有Services,Connections, Providers, Receivers,

场景5:查询栈顶Activity

dumpsys activity | grep mFocusedActivity

dumpsys 的命令还有很多,这里就不一一列举了。

android工具am的用法,Android中AM、PM、dumpsys命令使用总结相关推荐

  1. android工具am的用法,Android am/pm命令用法

    am命令的参数介绍: usage: am [subcommand] [options] start an Activity: am start [-D] -D: enable debugging se ...

  2. Android工具修复属性,Broken Android Data Extraction(安卓数据修复工具) V3.0.20 官方版

    其他相关 Broken,Android,Data,Extraction_百度搜索if(window.bds&&bds.util&&bds.util.setContain ...

  3. Android携程高级用法,Android真正仿携程首页view实现

    一 需求:实现view的点击缩放效果,类似于携程首页. 二 需求分析:对于单纯的view的缩放还是比较简单的,我们使用单纯的android缩放动画就可以实现.但是按照携程首页的view来做的话,里面是 ...

  4. Android实战技巧之十六:getprop与dumpsys命令

    Android设备连接PC后,我们可以通过adb命令完成绝大多数工作.下面借助getprop.dumpsys来了解一些系统相关信息. 一.getprop 此命令的原理很简单,就是从系统的各种配置文件中 ...

  5. android五大布局的用法,android:stretchColumns用法

    TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但实际上,会经常在代码里使用TableLayout,例如做出表格的效果.本文主要介绍TableLayout的基本使用 ...

  6. android 工具类放哪里,android开发工具类——Constants(存放全局变量)

    具体参照代码: 这是个人项目中常用到的一些全局变量. package com.imeibi.constants; import android.os.Environment; /** * Create ...

  7. linux rsh用法,Linux中rsh远程shell命令的使用技巧解析

    rsh有两种使用模式: rsh $host : 远程登录,启动交互式进程. rsh $host $command :远程执行命令,并显示输出. rsh hosthostcommand rsh $hos ...

  8. matlab 图中的legend,matlab中legend加图示命令的使用

    matlab中legend什么意思 matlab中的legend是图例的意思. legend()使用格式:legend(string1,string2,string3, ...,n) string1- ...

  9. Android命令行工具logcat详细用法!

    logcat是Android中一个命令行工具,可以用于得到程序的log信息. 见板凳详细说明!      本贴内容来自网络,引用网址为:http://hi.baidu.com/%C9%C1%D2%AB ...

最新文章

  1. 左滑右滑,在VS Code里滑个妹纸给你写喜欢的代码?
  2. 《UNIXLinux程序设计教程》一第2章-2.0 标准输入输出
  3. 几道web题简单总结
  4. PHP 是最糟糕编程语言?
  5. 虚拟化与Docker
  6. PSOLA基音同步叠加算法
  7. 关于mysql查询_关于mysql的查询
  8. 关于大型网站技术演进的思考(六)-存储的瓶颈6
  9. Java——TCP/IP超详细总结
  10. 远程文件下载/小电影下载
  11. VS安装包下载和环境配置
  12. Android App瘦身实战
  13. 项目开发中遇到接收串口数据时序混乱的问题
  14. mongoDB 高级查询(一)
  15. iic的SDA引脚偶尔有毛刺(尖峰)是怎么回事。
  16. 信号与系统--连续时间系统分析
  17. Android双屏异显
  18. 十二时辰和人体经络图文
  19. 加油站收银软件提高油站运营管理效率?
  20. 【论文简介】CLIP:图像与自然语言配对预训练可迁移模型:Learning Transferable Visual Models From Natural Language Supervision

热门文章

  1. wordpress linux 目录,Linux系统二级目录无法安装Wordpress解决办法 | 无忧主机
  2. 哪家建站系统的模板比较好?
  3. 【PPT+套图】iFeve沙龙
  4. ABAP中FIELD-SYMBOLS的详细用法
  5. 台式计算机是第几代,台式机内存条怎么辨别是几代的?
  6. 【嵌入式AI周报20210430期】Xilinx推出K26视觉AI核心板、黑芝麻智能发布196TOPS华山A1000
  7. 论文阅读:人机情绪的趋同、循环与溢出——基于 Twitter 涉中议题的数据分析
  8. OpenCV+VTK 读书笔记
  9. matlab关闭文本,matlab parpool 关闭
  10. 小米note2不上Android9吗,小米note2和华为g9哪个好?小米note2和华为G9青春版详细区别对比评测...