如何用getevent查看TouchPanel上报数据和如何抓取framework层input事件相关的日志

31 篇文章 3 订阅
10 篇文章 2 订阅

我们在Android系统开发的时候经常遇到界面点击没作用,或点击有飘逸的情况,这个时候我们需要通过查看TP是否有上报数据以及Framework层input事件日志进一步的分析,是否是TP在上报数据异常导致还是上层APP本身引起的问题,具体如下:

1、  如何用getevent查看TouchPanel上报数据? 
[SOLUTION] 
步骤如下: 
1)先使用adb shell连接手机。 
2)在命令行输入命令" cat /proc/bus/input/devices",查看"Name="mtk-tpd"“项中的”Handlers=“对应哪个event? 
3)在命令行输入命令" getevent /dev/input/event?

如下所示: 
cat /proc/bus/input/devices 
输出: 
I: Bus=0000 Vendor=0000 Product=0000 Version=0000 
N: Name="mtk-tpd" 
P: Phys= 
S: Sysfs=/devices/virtual/input/input3 
U: Uniq= 
H: Handlers=mouse0 event3 -----即鼠标对应的event为event3 
B: PROP=2 
B: EV=b 
B: KEY=400 0 0 0 0 1000 40000800 0 0 0 0 
B: ABS=2630000 1000003 
然后输入命令: 
getevent /dev/input/event3

2、如何抓取framework层input事件相关的日志

出现事件输入相关的问题时, 首先通过第一章节来检测对应的设备是否有响应输入,如果没有响应输入,则可能是 driver 或者输入设备模组问题,如果有输入设备响应输入, 则需要打开以下 log 开关,抓取mtklog 检查 framework 层的对事件的处理 ,方法如下:

注意:
 USER版本只能使用静态方式(修改代码)打开debug开关 
 ENG版本可以使用动态方式(命令)打开debug开关 

1、App 层 (client) 适用于JB,KK,L,M版本: 
1.1)动态开启APP层LOG方法如下:
adb shell setprop debug.viewroot.enable 7000 
adb shell setprop debug.view.keylog true 
adb shell setprop debug.view.touchlog true 
adb shell setprop debug.view.motionlog true 

adb shell stop 
adb shell start 

需等待机器软件重启后才能生效 

1.2)静态修改请直接修改DEBUG的值:
开启ViewRootImpl/View/ViewGroup中input event的处理过程的log开关: 
frameworks/base/core/java/android/view/viewrootimpl.java 中的 DEBUG_INPUT 开关(设置为 true); 
frameworks/base/core/java/android/view/viewgroup.java 中的 DBG_MOTION ,DBG_TOUCH开关 (设置为 true);
frameworks/base/core/java/android/view/view.java 中的 DBG_MOTION ,DBG_TOUCH开关 (设置为 true);
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java 中的 DBG_MOTION 开关 (设置为 true);
frameworks/base/core/java/android/view/KeyEvent.java 中的 DEBUG 开关 (设置为 true);

2、framework(server): 
2.1 动态打开方法 (适用于KK,L,M. 其中KK只适用于eng build, L,M适用于eng build 和user build):
adb shell setprop sys.inputlog.enabled true 
adb shell dumpsys input 
不用重启手机就可以生效,重启手机后会失效。

2.2 静态开启方法: 
frameworks/base/services/input/inputReader.cpp (for ICS & JBx ,KK版本) 
frameworks/native/services/inputFlinger/inputReader.cpp (for L ,M版本) 
找到以下宏定义, 并将其值改为如下 
#define DEBUG_RAW_EVENTS 1 
#define DEBUG_HACKS 1 
#define DEBUG_VIRTUAL_KEYS 1 
#define DEBUG_POINTERS 1 
#define DEBUG_POINTER_ASSIGNMENT 1 
#define DEBUG_GESTURES 1 
#define DEBUG_VIBRATOR 1 

frameworks/base/services/input/inputDispatcher.cpp (for ICS & JBx ,KK版本) 
frameworks/native/services/inputFlinger/inputDispatcher.cpp (for L, M 版本) 
找到以下宏或变量定义, 并将其值改为如下 
#else // 改 else 分支中的定义 
#define DEBUG_INBOUND_EVENT_DETAILS 1 
#define DEBUG_OUTBOUND_EVENT_DETAILS 1 
#define DEBUG_DISPATCH_CYCLE 1 
#define DEBUG_REGISTRATION 1 
#define DEBUG_INJECTION 1 
#define DEBUG_FOCUS 1 
#define DEBUG_APP_SWITCH 1 
#define DEBUG_HOVER 1 

#endif 
bool gInputLogEnabled = true; 

frameworks/base/libs/androidfw/inputTransport.cpp (for ICS & JBx 版本) 
找到以下宏或变量定义, 并将其值改为如下 
#else // 改 else 分支中的定义 
#define DEBUG_CHANNEL_MESSAGES 1 
#define DEBUG_CHANNEL_LIFECYCLE 1 
#define DEBUG_TRANSPORT_ACTIONS 1 
#define DEBUG_RESAMPLING 1 

#endif 
static bool gInputLogEnabled = true; 

frameworks/native/libs/input/inputTransport.cpp (for KK,L ,M版本) 
找到以下变量定义, 并将其值改为如下 
static bool gInputLogEnabled = true; 

3、因为很多input无响应的问题,常常会跟window的focus扯上关系,如果有需要 
可以用下面的命令打开ams和wms的LOG。 
adb shell dumpsys activity log x on 
adb shell dumpsys window -d enable a

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值