赞
踩
官方文档:
https://developer.android.google.cn/studio/command-line/dumpsys
我即将在这官方文档上画蛇添足了:
目录
dumpsys
是一种在 Android 设备上运行的工具,可提供有关系统服务的信息。您可以使用 Android 调试桥 (ADB) 从命令行调用 dumpsys
,获取在连接的设备上运行的所有系统服务的诊断输出。此输出的内容通常比您想要的更多,因此您可以使用下文所述的命令行选项仅获取您感兴趣的系统服务的输出。本文还介绍了如何使用 dumpsys
完成常见的任务,例如检查输入、RAM、电池或网络诊断。
当然,通过串口线连接,即使在非root用户下,输入dumpsys 也是可以用的。
使用 dumpsys
的一般语法如下:
adb shell dumpsys [-t timeout] [--help | -l | --skip services | service [arguments] | -c | -h]
要获得连接设备的所有系统服务的诊断输出,只需运行 adb shell dumpsys
。但是,这会输出比您通常想要的更多的信息(绝对多的多,咱就别尝试了)。要使输出的内容更加可控,请通过在命令中添加服务来指定要检查的服务。例如,下面的命令会提供输入组件(例如触摸屏或内置键盘)的系统数据:
adb shell dumpsys input
这里的input 就是语法中的service。 如需查看可与 dumpsys
配合使用的系统服务的完整列表,请使用以下命令:
adb shell dumpsys -l
或者使用
adb shell service list
从别处抄来一些服务种类,可见如下表:
服务名 | 类名 | 功能 |
---|---|---|
activity | ActivityManagerService | AMS相关信息 |
package | PackageManagerService | PMS相关信息 |
window | WindowManagerService | WMS相关信息 |
input | InputManagerService | IMS相关信息 |
power | PowerManagerService | PMS相关信息 |
batterystats | BatterystatsService | 电池统计信息 |
battery | BatteryService | 电池信息 |
alarm | AlarmManagerService | 闹钟信息 |
dropbox | DropboxManagerService | 调试相关 |
procstats | ProcessStatsService | 进程统计 |
cpuinfo | CpuBinder | CPU |
meminfo | MemBinder | 内存 |
gfxinfo | GraphicsBinder | 图像 |
dbinfo | DbBinder | 数据库 |
表二:
服务名 | 功能 |
---|---|
SurfaceFlinger | 图像相关 |
appops | app使用情况 |
permission | 权限 |
processinfo | 进程服务 |
batteryproperties | 电池相关 |
audio | 查看声音信息 |
netstats | 查看网络统计信息 |
diskstats | 查看空间free状态 |
jobscheduler | 查看任务计划 |
wifi | wifi信息 |
diskstats | 磁盘情况 |
usagestats | 用户使用情况 |
devicestoragemonitor | 设备信息 |
… | … |
下表列出了使用 dumpsys
时的可用选项。
选项 | 说明 |
---|---|
-t timeout | 指定超时期限(秒)。如果未指定,默认值为 10 秒。 |
--help | 输出 dumpsys 工具的帮助文本。 |
-l | 输出可与 dumpsys 配合使用的系统服务的完整列表。 |
--skip services | 指定您不想在输出中包含的服务。 |
service [arguments] | 指定您要包含在输出中的服务。某些服务可能允许您传递可选参数。您可以通过将 adb shell dumpsys procstats -h |
-c | 指定特定服务时,请附加此选项,以输出计算机可读取格式的数据。 |
-h | 对于某些服务,请附加此选项以查看该服务的帮助文本和其他选项。 |
指定 input
服务(如下所示)可转储系统输入设备(例如键盘和触摸屏)的状态以及输入事件的处理。 做电视的就会有遥控器按键的事件。
adb shell dumpsys input
输出因连接的设备上搭载的 Android 版本而异。下面几部分介绍了您通常会看到的信息类型。
以下是您在检查输入诊断的 Event Hub 状态时可能会看到的信息示例:
- INPUT MANAGER (dumpsys input)
-
- Event Hub State:
- BuiltInKeyboardId: -2
- Devices:
- -1: Virtual
- Classes: 0x40000023
- Path:
- Descriptor: a718a782d34bc767f4689c232d64d527998ea7fd
- Location:
- ControllerNumber: 0
- UniqueId:
- Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
- KeyLayoutFile: /system/usr/keylayout/Generic.kl
- KeyCharacterMapFile: /system/usr/keychars/Virtual.kcm
- ConfigurationFile:
- HaveKeyboardLayoutOverlay: false
- 1: msm8974-taiko-mtp-snd-card Headset Jack
- Classes: 0x00000080
- Path: /dev/input/event5
- Descriptor: c8e3782483b4837ead6602e20483c46ff801112c
- Location: ALSA
- ControllerNumber: 0
- UniqueId:
- Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
- KeyLayoutFile:
- KeyCharacterMapFile:
- ConfigurationFile:
- HaveKeyboardLayoutOverlay: false
- 2: msm8974-taiko-mtp-snd-card Button Jack
- Classes: 0x00000001
- Path: /dev/input/event4
- Descriptor: 96fe62b244c555351ec576b282232e787fb42bab
- Location: ALSA
- ControllerNumber: 0
- UniqueId:
- Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
- KeyLayoutFile: /system/usr/keylayout/msm8974-taiko-mtp-snd-card_Button_Jack.kl
- KeyCharacterMapFile: /system/usr/keychars/msm8974-taiko-mtp-snd-card_Button_Jack.kcm
- ConfigurationFile:
- HaveKeyboardLayoutOverlay: false
- 3: hs_detect
- Classes: 0x00000081
- Path: /dev/input/event3
- Descriptor: 485d69228e24f5e46da1598745890b214130dbc4
- Location:
- ControllerNumber: 0
- UniqueId:
- Identifier: bus=0x0000, vendor=0x0001, product=0x0001, version=0x0001
- KeyLayoutFile: /system/usr/keylayout/hs_detect.kl
- KeyCharacterMapFile: /system/usr/keychars/hs_detect.kcm
- ConfigurationFile:
- HaveKeyboardLayoutOverlay: false
- ...
InputReader
负责对来自内核的输入事件进行解码。其状态转储会显示各输入设备的配置信息以及最近发生的状态变化,如按下按键或轻触触摸屏等操作。
以下示例显示了触摸屏的输出。注意有关设备分辨率和所用校准参数的信息。
- Input Reader State
- ...
- Device 6: Melfas MMSxxx Touchscreen
- IsExternal: false
- Sources: 0x00001002
- KeyboardType: 0
- Motion Ranges:
- X: source=0x00001002, min=0.000, max=719.001, flat=0.000, fuzz=0.999
- Y: source=0x00001002, min=0.000, max=1279.001, flat=0.000, fuzz=0.999
- PRESSURE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
- SIZE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
- TOUCH_MAJOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
- TOUCH_MINOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
- TOOL_MAJOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
- TOOL_MINOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
- Touch Input Mapper:
- Parameters:
- GestureMode: spots
- DeviceType: touchScreen
- AssociatedDisplay: id=0, isExternal=false
- OrientationAware: true
- Raw Touch Axes:
- X: min=0, max=720, flat=0, fuzz=0, resolution=0
- Y: min=0, max=1280, flat=0, fuzz=0, resolution=0
- Pressure: min=0, max=255, flat=0, fuzz=0, resolution=0
- TouchMajor: min=0, max=30, flat=0, fuzz=0, resolution=0
- TouchMinor: unknown range
- ToolMajor: unknown range
- ToolMinor: unknown range
- Orientation: unknown range
- Distance: unknown range
- TiltX: unknown range
- TiltY: unknown range
- TrackingId: min=0, max=65535, flat=0, fuzz=0, resolution=0
- Slot: min=0, max=9, flat=0, fuzz=0, resolution=0
- Calibration:
- touch.size.calibration: diameter
- touch.size.scale: 10.000
- touch.size.bias: 0.000
- touch.size.isSummed: false
- touch.pressure.calibration: amplitude
- touch.pressure.scale: 0.005
- touch.orientation.calibration: none
- touch.distance.calibration: none
- SurfaceWidth: 720px
- SurfaceHeight: 1280px
- SurfaceOrientation: 0
- Translation and Scaling Factors:
- XScale: 0.999
- YScale: 0.999
- XPrecision: 1.001
- YPrecision: 1.001
- GeometricScale: 0.999
- PressureScale: 0.005
- SizeScale: 0.033
- OrientationCenter: 0.000
- OrientationScale: 0.000
- DistanceScale: 0.000
- HaveTilt: false
- TiltXCenter: 0.000
- TiltXScale: 0.000
- TiltYCenter: 0.000
- TiltYScale: 0.000
- Last Button State: 0x00000000
- Last Raw Touch: pointerCount=0
- Last Cooked Touch: pointerCount=0
在 Input Reader 状态转储的结尾部分,会显示一些关于全局配置参数的信息,例如点按时间间隔。
- Configuration:
- ExcludedDeviceNames: []
- VirtualKeyQuietTime: 0.0ms
- PointerVelocityControlParameters: scale=1.000, lowThreshold=500.000, highThreshold=3000.000, acceleration=3.000
- WheelVelocityControlParameters: scale=1.000, lowThreshold=15.000, highThreshold=50.000, acceleration=4.000
- PointerGesture:
- Enabled: true
- QuietInterval: 100.0ms
- DragMinSwitchSpeed: 50.0px/s
- TapInterval: 150.0ms
- TapDragInterval: 300.0ms
- TapSlop: 20.0px
- MultitouchSettleInterval: 100.0ms
- MultitouchMinDistance: 15.0px
- SwipeTransitionAngleCosine: 0.3
- SwipeMaxWidthRatio: 0.2
- MovementSpeedRatio: 0.8
- ZoomSpeedRatio: 0.3
InputDispatcher
负责向应用发送输入事件。如下面的输出示例所示,其状态转储显示了有关哪个窗口被轻触、输入队列的状态以及是否正在进行 ANR 等信息。
- Input Dispatcher State:
- DispatchEnabled: 1
- DispatchFrozen: 0
- FocusedApplication: <null>
- FocusedWindow: name='Window{3fb06dc3 u0 StatusBar}'
- TouchStates: <no displays touched>
- Windows:
- 0: name='Window{357bbbfe u0 SearchPanel}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01820100, type=0x000007e8, layer=211000, frame=[0,0][1080,1920], scale=1.000000, touchableRegion=[0,0][1080,1920], inputFeatures=0x00000000, ownerPid=22674, ownerUid=10020, dispatchingTimeout=5000.000ms
- 1: name='Window{3b14c0ca u0 NavigationBar}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01840068, type=0x000007e3, layer=201000, frame=[0,1776][1080,1920], scale=1.000000, touchableRegion=[0,1776][1080,1920], inputFeatures=0x00000000, ownerPid=22674, ownerUid=10020, dispatchingTimeout=5000.000ms
- 2: name='Window{2c7e849c u0 com.vito.lux}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=true, canReceiveKeys=false, flags=0x0089031a, type=0x000007d6, layer=191000, frame=[-495,-147][1575,1923], scale=1.000000, touchableRegion=[-495,-147][1575,1923], inputFeatures=0x00000000, ownerPid=4697, ownerUid=10084, dispatchingTimeout=5000.000ms
- ...
- MonitoringChannels:
- 0: 'WindowManager (server)'
- RecentQueue: length=10
- MotionEvent(deviceId=4, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (335.0, 1465.0)]), policyFlags=0x62000000, age=217264.0ms
- MotionEvent(deviceId=4, source=0x00001002, action=1, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (335.0, 1465.0)]), policyFlags=0x62000000, age=217255.7ms
- MotionEvent(deviceId=4, source=0x00001002, action=0, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (330.0, 1283.0)]), policyFlags=0x62000000, age=216805.0ms
- ...
- PendingEvent: <none>
- InboundQueue: <empty>
- ReplacedKeys: <empty>
- Connections:
- 0: channelName='WindowManager (server)', windowName='monitor', status=NORMAL, monitor=true, inputPublisherBlocked=false
- OutboundQueue: <empty>
- WaitQueue: <empty>
- 1: channelName='278c1d65 KeyguardScrim (server)', windowName='Window{278c1d65 u0 KeyguardScrim}', status=NORMAL, monitor=false, inputPublisherBlocked=false
- OutboundQueue: <empty>
- WaitQueue: <empty>
- 2: channelName='357bbbfe SearchPanel (server)', windowName='Window{357bbbfe u0 SearchPanel}', status=NORMAL, monitor=false, inputPublisherBlocked=false
- OutboundQueue: <empty>
- WaitQueue: <empty>
- ...
- AppSwitch: not pending
- 7: channelName='2280455f com.google.android.gm/com.google.android.gm.ConversationListActivityGmail (server)', windowName='Window{2280455f u0 com.google.android.gm/com.google.android.gm.ConversationListActivityGmail}', status=NORMAL, monitor=false, inputPublisherBlocked=false
- OutboundQueue: <empty>
- WaitQueue: <empty>
- 8: channelName='1a7be08a com.android.systemui/com.android.systemui.recents.RecentsActivity (server)', windowName='Window{1a7be08a u0 com.android.systemui/com.android.systemui.recents.RecentsActivity EXITING}', status=NORMAL, monitor=false, inputPublisherBlocked=false
- OutboundQueue: <empty>
- WaitQueue: <empty>
- 9: channelName='3b14c0ca NavigationBar (server)', windowName='Window{3b14c0ca u0 NavigationBar}', status=NORMAL, monitor=false, inputPublisherBlocked=false
- OutboundQueue: <empty>
- WaitQueue: <empty>
- ...
- Configuration:
- KeyRepeatDelay: 50.0ms
- KeyRepeatTimeout: 500.0ms
下面列出了在检查 input
服务的各项输出时要考虑的事项:
Event Hub 状态:
Classes
字段中的位是否对应 EventHub.h
中的标记,如 INPUT_DEVICE_CLASS_TOUCH_MT
。BuiltInKeyboardId
是否正确。若设备未配备内置键盘,则该 ID 必须为 -2
,否则应为内置键盘的 ID。
BuiltInKeyboardId
应该为 -2
,但却不是,则说明可能缺少某个特殊功能小键盘的按键字符映射文件。特殊功能小键盘设备应具有仅包含 type SPECIAL_FUNCTION
行(即我们在前述 tuna-gpio-keykad.kcm
文件中看到的内容)的按键字符映射文件。Input Reader 状态:
Input Dispatcher 状态:
dumpsys
后,TouchStates
行是否正确显示了您所轻触的窗口。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。