一、驅動層
檢查是否有點上報
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更細一些,還可以劃分更多關鍵點出來,但是根據我目前的調試經驗,這幾點基本夠用了。希望這個能給大家在調試的時候提供一些幫助!