如何抓取 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 翻页——控制链接批量抓取数据
![](https://image-1255652541.cos.ap-shanghai.myqcloud.com/images/20190708214014.png) 这是简易数据分析系列的第 5 ...
- 简易数据分析 07 | Web Scraper 抓取多条内容
这是简易数据分析系列的第 7 篇文章. 在第 4 篇文章里,我讲解了如何抓取单个网页里的单类信息: 在第 5 篇文章里,我讲解了如何抓取多个网页里的单类信息: 今天我们要讲的是,如何抓取多个网页里的多 ...
随机推荐
- Mybatis整合spring详细教程(适合小白童鞋)
目录 1.整合思路 2.整合需要的jar包 3.整合的步骤 4.Dao的开发的两种实现方式 6.Dao的开发的实现方式总结图 @ Mybatis整合spring其实就是SSM框架中SM的整合集成. 1 ...
- Redis面试热点之底层实现篇(续)
0.题外话 接着昨天的[决战西二旗]|Redis面试热点之底层实现篇继续来了解一下ziplist压缩列表这个数据结构. 你可能会抱有疑问:我只是使用Redis的功能并且公司的运维同事都已经搭建好了平台 ...
- JSSDK制作思路
需求:对外提供一个js的SDK.相当于在原有的原生SDK基础上包装一层方法. SDK原生的方法通过JSExport 协议可以让js调用到原生的方法.你可以写一个协议继承JSExport ,将需要对js ...
- iOS 音频开发之CoreAudio
转自:http://www.cnblogs.com/javawebsoa/archive/2013/05/20/3089511.html 接 触过IOS音频开发的同学都知道,Core Audio 是I ...
- HYSBZ-2002弹飞绵羊
某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当 ...
- Koa - 使用koa-multer上传文件(上传限制、错误处理)
前言 上传文件在开发中是很常见的操作,今天我选择使用koa-multer中间件来实现这一功能,除了上传文件外,我还会对文件上传进行限制,以及发生上传错误时的处理. 由于原来的 koa-multer 已 ...
- JS系列:js数据类型的转换
数据类型的转换[基本数据类型]数字 number字符串 string布尔 boolean空 null未定义 undefined[引用数据类型]对象 object普通对象 {}数组对象 [](Array ...
- 【CSS】323- 深度解析 CSS 中的“浮动”
对于浮动这篇文章解析的狠透彻 ~ 写在最前 习惯性去谷歌翻译看了看 float 的解释: 其中有一句这样写的: she relaxed, floating gently in the water 瞬间 ...
- Java_输入整数求阶乘
import java.util.Scanner;public class Work4{ public static void main(String[] args){ // 创建Scanner对象 ...
- Elasticsearch系列---初识搜索
概要 本篇主要介绍搜索的报文结构含义.搜索超时时间的处理过程,提及了一下多索引搜索和轻量搜索,最后将精确搜索与全文搜索做了简单的对比. 空搜索 搜索API最简单的形式是不指定索引和类型的空搜索,它将返 ...