天天看點

Android Input裝置debug技巧

一、驅動層

        檢查是否有點上報

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

繼續閱讀