一、驅動層
檢查是否有點上報
adb shell getevent -l /dev/input/eventX
檢查input設備支持的屬性值
adb shell getevent -i /dev/input/eventX
二、Native層
檢查驅動上報的點是否被InputReader轉發給上層
在TouchInputMapper::sync(nsecs_t when)函數中,打印相關的變量值,檢查報點路徑是否正常。驅動已經報點,但是上層收不到點的情況大致有以下幾種:
a. 設備模式被設爲禁用模式,mDeviceMode == DEVICE_MODE_DISABLED
引起此問題的原因是,在註冊input device時,有些屬性值設置不合法,導致在configure階段,走了異常流程;
b. 設備類型不正確,走了其他路徑
三、Java層
在ViewRootImpl.java文件的onInputEvent( )函數中添加打印信息,檢查底層上報的點,是否通過Framework層成功上報了。
一般來講,如果onInputEvent能收到點,報點基本上是OK的。
有些特殊情況除外,報點的消息類型不正確或者TP的橫豎座標搞反了,會出現上層收點了,但是TP仍然無法正常使用。
以上是debug input子系統的幾個關鍵地方,如果想debug更細一些,還可以劃分更多關鍵點出來,但是根據我目前的調試經驗,這幾點基本夠用了。希望這個能給大家在調試的時候提供一些幫助!