安卓ADB shell的"dumpsys"工具是什么以及它有哪些好处?

154

我正在寻找ADB shell的全部dumpsys命令列表,并对所有命令进行全面解释。

请问我在哪里可以找到这些信息?

4个回答

260

什么是dumpsys以及它的好处

dumpsys是一种在设备上运行的Android工具,可以转储有关系统服务状态的有趣信息。

明显的优点:

  1. 能够以简单的字符串表示轻松获取系统信息。
  2. 可以使用已转储的CPU、RAM、电池、存储统计数据生成漂亮的图表,这将使您能够检查您的应用程序如何影响整个设备!

从dumpsys shell命令中我们可以检索到什么信息以及如何使用它

如果您运行dumpsys,则会看到大量的系统信息。 但是,您只能使用此大型转储的某些部分。

要查看dumpsys的所有“子命令”,请执行以下操作:

dumpsys | grep "DUMP OF SERVICE"

输出:

DUMP OF SERVICE SurfaceFlinger:
DUMP OF SERVICE accessibility:
DUMP OF SERVICE account:
DUMP OF SERVICE activity:
DUMP OF SERVICE alarm:
DUMP OF SERVICE appwidget:
DUMP OF SERVICE audio:
DUMP OF SERVICE backup:
DUMP OF SERVICE battery:
DUMP OF SERVICE batteryinfo:
DUMP OF SERVICE clipboard:
DUMP OF SERVICE connectivity:
DUMP OF SERVICE content:
DUMP OF SERVICE cpuinfo:
DUMP OF SERVICE device_policy:
DUMP OF SERVICE devicestoragemonitor:
DUMP OF SERVICE diskstats:
DUMP OF SERVICE dropbox:
DUMP OF SERVICE entropy:
DUMP OF SERVICE hardware:
DUMP OF SERVICE input_method:
DUMP OF SERVICE iphonesubinfo:
DUMP OF SERVICE isms:
DUMP OF SERVICE location:
DUMP OF SERVICE media.audio_flinger:
DUMP OF SERVICE media.audio_policy:
DUMP OF SERVICE media.player:
DUMP OF SERVICE meminfo:
DUMP OF SERVICE mount:
DUMP OF SERVICE netstat:
DUMP OF SERVICE network_management:
DUMP OF SERVICE notification:
DUMP OF SERVICE package:
DUMP OF SERVICE permission:
DUMP OF SERVICE phone:
DUMP OF SERVICE power:
DUMP OF SERVICE reboot:
DUMP OF SERVICE screenshot:
DUMP OF SERVICE search:
DUMP OF SERVICE sensor:
DUMP OF SERVICE simphonebook:
DUMP OF SERVICE statusbar:
DUMP OF SERVICE telephony.registry:
DUMP OF SERVICE throttle:
DUMP OF SERVICE usagestats:
DUMP OF SERVICE vibrator:
DUMP OF SERVICE wallpaper:
DUMP OF SERVICE wifi:
DUMP OF SERVICE window:

一些转储示例和输出

1)获取所有可能的电池统计信息:

$~ adb shell dumpsys battery

你将获得输出:

Current Battery Service state:
AC powered: false
AC capacity: 500000
USB powered: true
status: 5
health: 2
present: true
level: 100
scale: 100
voltage:4201
temperature: 271 <---------- Battery temperature! %)
technology: Li-poly <---------- Battery technology! %)

2)获取WiFi信息

~$ adb shell dumpsys wifi

输出:

Wi-Fi is enabled
Stay-awake conditions: 3

Internal state:
interface tiwlan0 runState=Running
SSID: XXXXXXX BSSID: xx:xx:xx:xx:xx:xx, MAC: xx:xx:xx:xx:xx:xx, Supplicant state: COMPLETED, RSSI: -60, Link speed: 54, Net ID: 2, security: 0, idStr: null
ipaddr 192.168.1.xxx gateway 192.168.x.x netmask 255.255.255.0 dns1 192.168.x.x dns2 8.8.8.8 DHCP server 192.168.x.x lease 604800 seconds
haveIpAddress=true, obtainingIpAddress=false, scanModeActive=false
lastSignalLevel=2, explicitlyDisabled=false

Latest scan results:

Locks acquired: 28 full, 0 scan
Locks released: 28 full, 0 scan

Locks held:

3) 获取CPU信息

~$ adb shell dumpsys cpuinfo

输出:

Load: 0.08 / 0.4 / 0.64
CPU usage from 42816ms to 34683ms ago:
system_server: 1% = 1% user + 0% kernel / faults: 16 minor
kdebuglog.sh: 0% = 0% user + 0% kernel / faults: 160 minor
tiwlan_wq: 0% = 0% user + 0% kernel
usb_mass_storag: 0% = 0% user + 0% kernel
pvr_workqueue: 0% = 0% user + 0% kernel
+sleep: 0% = 0% user + 0% kernel
+sleep: 0% = 0% user + 0% kernel
TOTAL: 6% = 1% user + 3% kernel + 0% irq

4)获取内存使用信息

~$ adb shell dumpsys meminfo 'your apps package name'

输出:

** MEMINFO in pid 5527 [com.sec.android.widgetapp.weatherclock] **
                    native   dalvik    other    total
            size:     2868     5767      N/A     8635
       allocated:     2861     2891      N/A     5752
            free:        6     2876      N/A     2882
           (Pss):      532       80     2479     3091
  (shared dirty):      932     2004     6060     8996
    (priv dirty):      512       36     1872     2420

 Objects
           Views:        0        ViewRoots:        0
     AppContexts:        0       Activities:        0
          Assets:        3    AssetManagers:        3
   Local Binders:        2    Proxy Binders:        8
Death Recipients:        0
 OpenSSL Sockets:        0


 SQL
               heap:        0         MEMORY_USED:        0
 PAGECACHE_OVERFLOW:        0         MALLOC_SIZE:        0

如果您想查看所有进程的信息,请使用~$ adb shell dumpsys meminfo

enter image description here

dumpsys 是一款非常灵活和实用的工具!

如果您想使用此工具,请不要忘记在您的 Android 清单中自动添加权限 android.permission.DUMP

尝试测试所有命令以了解有关 dumpsys 的更多信息。愉快地转储吧!


6
这是来自某个文件还是你自己的实验? - brianestey
12
非常好的是:adb shell dumpsys activity broadcasts,可以显示所有广播。 - joecks
从Kitkat开始(我想),"batteryinfo"被替换为"batterystats",它的输出和使用方式也似乎有所不同。 - android developer
1
dumpsys非常强大。它报告核心Android服务的私有值,这些通常是您无法获得的。 - Kevin Mark
1
不幸的是,它需要在Java程序中使用root或系统级权限。 - umesh

62

查看dumpsysservice的源代码,您可以通过执行以下命令获取可用服务列表:

adb shell service -l

你可以向dumpsys提供感兴趣的服务名称,以获取特定信息。例如(请注意,并非所有服务都提供转储信息):
adb shell dumpsys activity
adb shell dumpsys cpuinfo
adb shell dumpsys battery

正如您在代码(以及K_Anas的答案)中所看到的,如果您调用dumpsys而没有任何服务名称,则会将所有服务的信息一次性转储:

adb shell dumpsys

一些服务可以接收额外的参数来指定要显示的内容,通常在提供-h参数时会有解释,例如:

adb shell dumpsys activity -h
adb shell dumpsys window -h
adb shell dumpsys meminfo -h
adb shell dumpsys package -h
adb shell dumpsys batteryinfo -h

13
根据官方Android关于dumpsys的信息dumpsys工具在设备上运行,提供有关系统服务状态的信息。
要获取可用服务列表,请使用:
adb shell dumpsys -l

1
我不明白为什么这个被踩了 - 它是一个有用的链接。可用服务列表 -l 在我的棒棒糖上可以工作,但在我的果冻豆上却不能。 - starfry
1
这个答案实际上有指向实际文档的指针。我相信这就是OP所寻找的。 - Robert R Evans
它可能被downvote了,因为与三年前给出的回答相比,没有新信息。 - topher217

3

我使用 dumpsys 来捕获应用程序崩溃并保持进程处于活动状态。我使用它的情况是查找远程机器上的应用程序是否崩溃。

dumpsys | grep myapp | grep "Application Error" 

或者

adb shell dumpsys | grep myapp | grep Error

如果应用程序没有运行,您将得不到任何结果。 当应用程序停止时,Android 会在屏幕上显示一条消息,进程仍处于活动状态,如果您通过“ps”命令或其他方式进行检查,您将看到进程状态未显示任何错误或崩溃意味着。但是,当您单击关闭消息的按钮时,应用程序进程将从进程列表中清除。因此,在应用程序中没有任何代码的情况下捕获崩溃状态很难找到。 但dumpsys可以帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接