2019-03-01 10:18:41 +08:00
|
|
|
|
# [Android 调试系列之 dumpsys 命令](https://blog.csdn.net/goodlixueyong/article/details/51119326)
|
2019-03-01 10:17:07 +08:00
|
|
|
|
|
2021-10-28 14:04:48 +08:00
|
|
|
|
Android 提供了 dumpsys 工具,可以用于查看很多系统服务信息。我们可以直接执行 dumpsys 命令,会将所有服务信息都列出来。但是这样得到的结果太多,不容易拿到有效的信息,可以在命令后面加上相应的参数来得到具体的服务信息。使用方法为:
|
2019-03-01 10:17:07 +08:00
|
|
|
|
|
|
|
|
|
dumpsys [service]
|
|
|
|
|
|
2021-10-28 14:04:48 +08:00
|
|
|
|
下面简单列出了常用的 service:
|
2019-03-01 10:17:07 +08:00
|
|
|
|
|
|
|
|
|
meminfo 显示内存信息
|
2021-10-28 14:04:48 +08:00
|
|
|
|
activity 显示 activitiy 信息
|
|
|
|
|
cpuinfo 显示 CPU 信息
|
2019-03-01 10:17:07 +08:00
|
|
|
|
package packagename 获取安装包信息
|
|
|
|
|
batterystats 显示电量信息
|
|
|
|
|
window 显示键盘,窗口和它们的关系
|
|
|
|
|
|
|
|
|
|
使用下面的命令来查看可以 dump 出的所有 service:
|
|
|
|
|
|
|
|
|
|
$adb shell dumpsys | grep DUMP
|
|
|
|
|
|
|
|
|
|
由于 dumpsys 的功能很强大,这里只介绍 App 开发中用的比较多功能,meminfo 和 activity,另外简单提一下查看 package 信息。
|
|
|
|
|
|
|
|
|
|
## dumpsys meminfo
|
|
|
|
|
|
2021-10-28 14:04:48 +08:00
|
|
|
|
可以查看系统所有 App 的内存使用概况:
|
2019-03-01 10:17:07 +08:00
|
|
|
|
|
|
|
|
|
$adb shell dumpsys meminfo
|
|
|
|
|
|
2021-10-28 14:04:48 +08:00
|
|
|
|
也可以在命令后面跟程序的包名或进程 id 来查看某个程序的内存使用情况:
|
2019-03-01 10:17:07 +08:00
|
|
|
|
|
2019-03-01 10:17:50 +08:00
|
|
|
|
$adb shell dumpsys meminfo <package_name or pid>
|
2019-03-01 10:17:07 +08:00
|
|
|
|
|
|
|
|
|
meminfo 信息中主要看 Native Heap 和 Dalvik Heap 两行。我们知道 Android 应用的内存分为两部分:dalvik 部分和 native 部分,dalvik 部分就是在 java 中创建对象时在堆中分配的内存,native 部分通常是指 c 实现部分分配的内存,像 bitmap 对象的分配就是在 native 堆上,虚拟机对引用内存进行了限制,dalvik 堆和 native 堆不能超过指定的阈值,否则就容易发生 OOM。
|
|
|
|
|
|
|
|
|
|
Heap 内存有三列,Heap Size、Heap Alloc 和 Heap Free,分别对应于可用的最大内存、已经分配的内存和剩余可用内存值,第一个等于后面两个的和。如果 Heap Free 变得很小,很可能就会发生 OOM。
|
|
|
|
|
|
|
|
|
|
## dumpsys activity
|
|
|
|
|
|
|
|
|
|
执行这个命令后,会显示很多内容,我们直接找到对我们有用的信息。
|
|
|
|
|
|
|
|
|
|
ACTIVITY MANAGER RECENT TASKS 列出了最近打开的 Task 的信息,最上面的一行是最新打开的 Task 信息,下面依次为更早时候打开的 Task 的信息。
|
|
|
|
|
|
|
|
|
|
$dumpsys activity |grep Run
|
|
|
|
|
|
2021-10-28 14:04:48 +08:00
|
|
|
|
可以查看最近打开过的 activity 信息,按照时间倒序列出。另外,如果想要查看当前打开的是哪个 Activity,也可以通过下面的命令来查看:
|
2019-03-01 10:17:07 +08:00
|
|
|
|
|
|
|
|
|
$adb logcat -s ActivityManager
|
|
|
|
|
|
|
|
|
|
## dumpsys package
|
|
|
|
|
|
|
|
|
|
Activity Resolver Table、Receiver Resolver Table、Service Resolver Table、Registered ContentProviders、ContentProvider Authorities 中会列出不同类别的应用一些基本组件的信息。
|
|
|
|
|
|
|
|
|
|
Packages 项中列出了应用的一些基本信息,如:
|
|
|
|
|
|
|
|
|
|
versionCode=1 targetSdk=21 版本号为 1,目标 sdk 为 21
|
|
|
|
|
|
|
|
|
|
grantedPermissions 表示当前应用申请的系统权限。
|