当前位置:   article > 正文

Android 工具 dumpsys_android dumpsys input

android dumpsys input

官方文档:

https://developer.android.google.cn/studio/command-line/dumpsys

我即将在这官方文档上画蛇添足了:

目录

dumpsys

语法

命令行选项

检查输入诊断

Event Hub 状态

Input Reader 状态

Input Dispatcher 状态

要考虑的事项

测试界面性能


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

从别处抄来一些服务种类,可见如下表: 

服务名类名功能
activityActivityManagerServiceAMS相关信息
packagePackageManagerServicePMS相关信息
windowWindowManagerServiceWMS相关信息
inputInputManagerServiceIMS相关信息
powerPowerManagerServicePMS相关信息
batterystatsBatterystatsService电池统计信息
batteryBatteryService电池信息
alarmAlarmManagerService闹钟信息
dropboxDropboxManagerService调试相关
procstatsProcessStatsService进程统计
cpuinfoCpuBinderCPU
meminfoMemBinder内存
gfxinfoGraphicsBinder图像
dbinfoDbBinder数据库

表二:

服务名功能
SurfaceFlinger图像相关
appopsapp使用情况
permission权限
processinfo进程服务
batteryproperties电池相关
audio查看声音信息
netstats查看网络统计信息
diskstats查看空间free状态
jobscheduler查看任务计划
wifiwifi信息
diskstats磁盘情况
usagestats用户使用情况
devicestoragemonitor设备信息

命令行选项

下表列出了使用 dumpsys 时的可用选项。

选项说明
-t timeout指定超时期限(秒)。如果未指定,默认值为 10 秒。
--help输出 dumpsys 工具的帮助文本。
-l输出可与 dumpsys 配合使用的系统服务的完整列表。
--skip services指定您不想在输出中包含的服务。
service [arguments]

指定您要包含在输出中的服务。某些服务可能允许您传递可选参数。您可以通过将 -h 选项与服务名称一起传递来了解这些可选参数,如下所示:

    adb shell dumpsys procstats -h

-c指定特定服务时,请附加此选项,以输出计算机可读取格式的数据。
-h对于某些服务,请附加此选项以查看该服务的帮助文本和其他选项。

检查输入诊断

指定 input 服务(如下所示)可转储系统输入设备(例如键盘触摸屏)的状态以及输入事件的处理。 做电视的就会有遥控器按键的事件。

adb shell dumpsys input

输出因连接的设备上搭载的 Android 版本而异。下面几部分介绍了您通常会看到的信息类型。

Event Hub 状态

以下是您在检查输入诊断的 Event Hub 状态时可能会看到的信息示例:

  1. INPUT MANAGER (dumpsys input)
  2. Event Hub State:
  3. BuiltInKeyboardId: -2
  4. Devices:
  5. -1: Virtual
  6. Classes: 0x40000023
  7. Path:
  8. Descriptor: a718a782d34bc767f4689c232d64d527998ea7fd
  9. Location:
  10. ControllerNumber: 0
  11. UniqueId:
  12. Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
  13. KeyLayoutFile: /system/usr/keylayout/Generic.kl
  14. KeyCharacterMapFile: /system/usr/keychars/Virtual.kcm
  15. ConfigurationFile:
  16. HaveKeyboardLayoutOverlay: false
  17. 1: msm8974-taiko-mtp-snd-card Headset Jack
  18. Classes: 0x00000080
  19. Path: /dev/input/event5
  20. Descriptor: c8e3782483b4837ead6602e20483c46ff801112c
  21. Location: ALSA
  22. ControllerNumber: 0
  23. UniqueId:
  24. Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
  25. KeyLayoutFile:
  26. KeyCharacterMapFile:
  27. ConfigurationFile:
  28. HaveKeyboardLayoutOverlay: false
  29. 2: msm8974-taiko-mtp-snd-card Button Jack
  30. Classes: 0x00000001
  31. Path: /dev/input/event4
  32. Descriptor: 96fe62b244c555351ec576b282232e787fb42bab
  33. Location: ALSA
  34. ControllerNumber: 0
  35. UniqueId:
  36. Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
  37. KeyLayoutFile: /system/usr/keylayout/msm8974-taiko-mtp-snd-card_Button_Jack.kl
  38. KeyCharacterMapFile: /system/usr/keychars/msm8974-taiko-mtp-snd-card_Button_Jack.kcm
  39. ConfigurationFile:
  40. HaveKeyboardLayoutOverlay: false
  41. 3: hs_detect
  42. Classes: 0x00000081
  43. Path: /dev/input/event3
  44. Descriptor: 485d69228e24f5e46da1598745890b214130dbc4
  45. Location:
  46. ControllerNumber: 0
  47. UniqueId:
  48. Identifier: bus=0x0000, vendor=0x0001, product=0x0001, version=0x0001
  49. KeyLayoutFile: /system/usr/keylayout/hs_detect.kl
  50. KeyCharacterMapFile: /system/usr/keychars/hs_detect.kcm
  51. ConfigurationFile:
  52. HaveKeyboardLayoutOverlay: false
  53. ...

Input Reader 状态

InputReader 负责对来自内核的输入事件进行解码。其状态转储会显示各输入设备的配置信息以及最近发生的状态变化,如按下按键或轻触触摸屏等操作。

以下示例显示了触摸屏的输出。注意有关设备分辨率和所用校准参数的信息。

  1. Input Reader State
  2. ...
  3. Device 6: Melfas MMSxxx Touchscreen
  4. IsExternal: false
  5. Sources: 0x00001002
  6. KeyboardType: 0
  7. Motion Ranges:
  8. X: source=0x00001002, min=0.000, max=719.001, flat=0.000, fuzz=0.999
  9. Y: source=0x00001002, min=0.000, max=1279.001, flat=0.000, fuzz=0.999
  10. PRESSURE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
  11. SIZE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
  12. TOUCH_MAJOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
  13. TOUCH_MINOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
  14. TOOL_MAJOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
  15. TOOL_MINOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
  16. Touch Input Mapper:
  17. Parameters:
  18. GestureMode: spots
  19. DeviceType: touchScreen
  20. AssociatedDisplay: id=0, isExternal=false
  21. OrientationAware: true
  22. Raw Touch Axes:
  23. X: min=0, max=720, flat=0, fuzz=0, resolution=0
  24. Y: min=0, max=1280, flat=0, fuzz=0, resolution=0
  25. Pressure: min=0, max=255, flat=0, fuzz=0, resolution=0
  26. TouchMajor: min=0, max=30, flat=0, fuzz=0, resolution=0
  27. TouchMinor: unknown range
  28. ToolMajor: unknown range
  29. ToolMinor: unknown range
  30. Orientation: unknown range
  31. Distance: unknown range
  32. TiltX: unknown range
  33. TiltY: unknown range
  34. TrackingId: min=0, max=65535, flat=0, fuzz=0, resolution=0
  35. Slot: min=0, max=9, flat=0, fuzz=0, resolution=0
  36. Calibration:
  37. touch.size.calibration: diameter
  38. touch.size.scale: 10.000
  39. touch.size.bias: 0.000
  40. touch.size.isSummed: false
  41. touch.pressure.calibration: amplitude
  42. touch.pressure.scale: 0.005
  43. touch.orientation.calibration: none
  44. touch.distance.calibration: none
  45. SurfaceWidth: 720px
  46. SurfaceHeight: 1280px
  47. SurfaceOrientation: 0
  48. Translation and Scaling Factors:
  49. XScale: 0.999
  50. YScale: 0.999
  51. XPrecision: 1.001
  52. YPrecision: 1.001
  53. GeometricScale: 0.999
  54. PressureScale: 0.005
  55. SizeScale: 0.033
  56. OrientationCenter: 0.000
  57. OrientationScale: 0.000
  58. DistanceScale: 0.000
  59. HaveTilt: false
  60. TiltXCenter: 0.000
  61. TiltXScale: 0.000
  62. TiltYCenter: 0.000
  63. TiltYScale: 0.000
  64. Last Button State: 0x00000000
  65. Last Raw Touch: pointerCount=0
  66. Last Cooked Touch: pointerCount=0

在 Input Reader 状态转储的结尾部分,会显示一些关于全局配置参数的信息,例如点按时间间隔。

  1. Configuration:
  2. ExcludedDeviceNames: []
  3. VirtualKeyQuietTime: 0.0ms
  4. PointerVelocityControlParameters: scale=1.000, lowThreshold=500.000, highThreshold=3000.000, acceleration=3.000
  5. WheelVelocityControlParameters: scale=1.000, lowThreshold=15.000, highThreshold=50.000, acceleration=4.000
  6. PointerGesture:
  7. Enabled: true
  8. QuietInterval: 100.0ms
  9. DragMinSwitchSpeed: 50.0px/s
  10. TapInterval: 150.0ms
  11. TapDragInterval: 300.0ms
  12. TapSlop: 20.0px
  13. MultitouchSettleInterval: 100.0ms
  14. MultitouchMinDistance: 15.0px
  15. SwipeTransitionAngleCosine: 0.3
  16. SwipeMaxWidthRatio: 0.2
  17. MovementSpeedRatio: 0.8
  18. ZoomSpeedRatio: 0.3

Input Dispatcher 状态

InputDispatcher 负责向应用发送输入事件。如下面的输出示例所示,其状态转储显示了有关哪个窗口被轻触、输入队列的状态以及是否正在进行 ANR 等信息。

  1. Input Dispatcher State:
  2. DispatchEnabled: 1
  3. DispatchFrozen: 0
  4. FocusedApplication: <null>
  5. FocusedWindow: name='Window{3fb06dc3 u0 StatusBar}'
  6. TouchStates: <no displays touched>
  7. Windows:
  8. 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
  9. 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
  10. 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
  11. ...
  12. MonitoringChannels:
  13. 0: 'WindowManager (server)'
  14. RecentQueue: length=10
  15. 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
  16. 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
  17. 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
  18. ...
  19. PendingEvent: <none>
  20. InboundQueue: <empty>
  21. ReplacedKeys: <empty>
  22. Connections:
  23. 0: channelName='WindowManager (server)', windowName='monitor', status=NORMAL, monitor=true, inputPublisherBlocked=false
  24. OutboundQueue: <empty>
  25. WaitQueue: <empty>
  26. 1: channelName='278c1d65 KeyguardScrim (server)', windowName='Window{278c1d65 u0 KeyguardScrim}', status=NORMAL, monitor=false, inputPublisherBlocked=false
  27. OutboundQueue: <empty>
  28. WaitQueue: <empty>
  29. 2: channelName='357bbbfe SearchPanel (server)', windowName='Window{357bbbfe u0 SearchPanel}', status=NORMAL, monitor=false, inputPublisherBlocked=false
  30. OutboundQueue: <empty>
  31. WaitQueue: <empty>
  32. ...
  33. AppSwitch: not pending
  34. 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
  35. OutboundQueue: <empty>
  36. WaitQueue: <empty>
  37. 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
  38. OutboundQueue: <empty>
  39. WaitQueue: <empty>
  40. 9: channelName='3b14c0ca NavigationBar (server)', windowName='Window{3b14c0ca u0 NavigationBar}', status=NORMAL, monitor=false, inputPublisherBlocked=false
  41. OutboundQueue: <empty>
  42. WaitQueue: <empty>
  43. ...
  44. Configuration:
  45. KeyRepeatDelay: 50.0ms
  46. 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 行是否正确显示了您所轻触的窗口。

测试界面性能

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/865949
推荐阅读
相关标签
  

闽ICP备14008679号