如何抓取 framework input 事件相关 log
出现事件输入相关的问题时, 建议先 followhttp://429564140.iteye.com/blog/2355405来检测对应的设备是否有响应输入
如果没有响应输入,则可能是 driver 或者输入设备模组问题,
如果有输入设备响应输入, 则需要打开以下 log 开关,抓取 mobile log 检查 framework 层的对事件的处理
[SOLUTION]
注意:
USER版本只能使用静态方式(修改代码)打开debug开关
ENG版本可以使用动态方式(命令)打开debug开关
App 层 (client) 适用于JB,KK,L,M版本:
动态开启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
需等待手机软重启后才能生效
静态修改请直接修改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开关
frameworks/base/core/java/android/view/view.java 中的 DBG_MOTION ,DBG_TOUCH开关
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java 中的 DBG_MOTION 开关
frameworks/base/core/java/android/view/KeyEvent.java 中的 DEBUG 开关
framework(server): 层
动态打开方法 (适用于KK,L,M. 其中KK只适用于eng build, L,M适用于eng build 和user build):
adb shell setprop sys.inputlog.enabled true
adb shell dumpsys input
不用重启手机就可以生效,重启手机后会失效。
静态开启方法:
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;
因为很多input无响应的问题,常常会跟window的focus扯上关系,如果有需要
可以用下面的命令打开ams和wms的LOG。
adb shell dumpsys activity log x on
adb shell dumpsys window -d enable a
如何抓取 framework input 事件相关 log的更多相关文章
- python3 - 通过BeautifulSoup 4抓取百度百科人物相关链接
导入需要的模块 需要安装BeautifulSoup from urllib.request import urlopen, HTTPError, URLError from bs4 import Be ...
- Dynamics CRM Form表单中通过javascript抓取触发change事件字段的属性名
通过下面这段代码可以抓取到change的事件源,从而判断出是哪个属性字段触发的事件, function change(pContext) {var fieldName=pContext.getEven ...
- fiddler抓取手机APP包相关的设置
一.设置手机的代理服务器 1.前提:手机与电脑用的是同一个网络 2.fiddler设置允许远程连接,并设置好端口 3.查询电脑所在网络的ip地址(windows下,命令行窗口使用:ipconfig进行 ...
- 如何在User版本开启串口(Uart),抓取上层Log,开启输入控制台
[原][FAQ03891] 如何在User版本开启串口(Uart),抓取上层Log,开启输入控制台 2014-11-26阅读1369 评论0 FAQ Content [Description]如何在U ...
- 「拉勾网」薪资调查的小爬虫,并将抓取结果保存到excel中
学习Python也有一段时间了,各种理论知识大体上也算略知一二了,今天就进入实战演练:通过Python来编写一个拉勾网薪资调查的小爬虫. 第一步:分析网站的请求过程 我们在查看拉勾网上的招聘信息的时候 ...
- python抓取历年特码开奖记录
背景: 小时候,有种游戏,两个主人公:白XX和曾XX,每个家庭把他俩像活菩萨一样供着,供他们吃,供他们穿 做生意的老板为了这两位活菩萨,关门大吉 农民为了这两位活菩萨卖牛卖田变卖家产 做官的为了这两位 ...
- 重构前的程序:通过rsync命令抓取日志文件
基本概况: 我有一台服务器每天每个小时都会生成一个日志文件,这些日志文件会被保留2天,超过2天会被一个程序压缩放到备份目录,日志文件的文件名是有命名要求的,例如:project_log.2013010 ...
- Web Scraper 翻页——控制链接批量抓取数据
 这是简易数据分析系列的第 5 ...
- 简易数据分析 07 | Web Scraper 抓取多条内容
这是简易数据分析系列的第 7 篇文章. 在第 4 篇文章里,我讲解了如何抓取单个网页里的单类信息: 在第 5 篇文章里,我讲解了如何抓取多个网页里的单类信息: 今天我们要讲的是,如何抓取多个网页里的多 ...
随机推荐
- gsoap使用
一. 安装gsoap 下载地址:http://sourceforge.net/projects/gsoap2/files/ 解压安装:./configure --prefix=/usr/local/g ...
- 微信SDK接入报undefined symbol错误
按照官方SDK接入 编译后报如下错误 是因为没有link libc++库导致的.
- 2019 AI Bootcamp Guangzhou 参会日记
2019年的全球AI训练营在北京.上海.广州.杭州.宁波五个地方同时举办! 12月14日,微软全球AI Bootcamp活动再次驾临广州,本次会议结合 ML.NET 和基于 SciSharp 社区介绍 ...
- 【Vuejs】350- 学习 Vue 源码的必要知识储备
前言 我最近在写 Vue 进阶的内容.在这个过程中,有些人问我看 Vue 源码需要有哪些准备吗?所以也就有了这篇计划之外的文章. 当你想学习 Vue 源码的时候,需要有扎实的 JavaScript 基 ...
- CSS3(2)--- 过渡(transition)
CSS3(2)--- 过渡(transition) 一.概念 1.什么是过渡 通俗理解 是从一个状态 渐渐的过渡到 另外一个状态. 比如一个盒子原先宽度为100px,当鼠标点击时盒子的宽度变成200p ...
- 递归的实际业务场景之MySQL 递归查询
喜欢就点个赞呗! 源码<--请点击此处查看 引入 当我看到一些评论时,例如下面的样子.我挺好奇这个功能是怎么样做出来的.进过查阅资料,发现这其实是 MySQL 的递归操作.下面就让我操作一下怎么 ...
- 关于页面打印window.print()的样式问题
当我们打印网页的时候.有时候会发现.打印出来的.跟网页上看到的样式的差别有点大.这其中可能有的问题是.样式问题. 当调用打印(window.print())方法时.打印机会在网页的样式中查找 @med ...
- Django模型层—ORM
目录 一.模型层(models) 1-1. 常用的字段类型 1-2. 字段参数 1-3. 自定义char字段 1-4. 外键关系 二.Django中测试脚本的使用 三.单表操作 3-1. 添加记录 3 ...
- 关于maven依赖关系的问题
maven可以非常方便的管理jar包依赖问题. 这几天遇到的问题是:使用maven在idea跑flink程序提示 java.lang.ClassNotFoundExceptionjava.lang.N ...
- Caffe源码-Solver类
Solver类简介 Net类中实现了网络的前向/反向计算和参数更新,而Solver类中则是对此进行进一步封装,包含可用于逐次训练网络的Step()函数,和用于求解网络的优化解的Solve()函数,同时 ...