触摸屏 adb调试
1、adb shell cat /proc/kmsg
这条命令肯定是要放在第一位的,可以打印内核信息,对应于驱动程序中的printk语句。
如果出现以下提示,说明权限不够,可以通过adb root获取root权限。/system/bin/sh: cat: /proc/kmsg: Permission denied
另外,也可以将kmsg的内容重定向写入一个log文件中。可以依次执行下面命令
adb shell
cat /proc/kmsg > /mnt/sdcard/log可将kmsg的内容重定向到 /mnt/sdcard/ 路径下的log文件。
2、adb pull
当我们将log保存在 /mnt/sdcard/ 路径下的时候,可以通过adb pull命令取出来放到指定路径。
adb pull /mnt/sdcard/log C:\Users\Administrator\Desktop
有的样机会提示不可读写,那么可以在pull或者push之前加上adb remount的命令。
3、adb push
如果我们某个APP应用需要某个.so文件,那么可以通过adb push将指定的.so文件推送到指定的路径。
adb push C:\Users\Administrator\Desktop\sensors.sc8830.so /system/lib/hw
adb push C:\Users\Administrator\Desktop\sensors.sc8830.so /system/lib/hw
4、查看tp驱动是否加载成功
tp驱动实际上是i2c设备驱动,通过查看i2c设备节点可以查看到驱动的相关信息。
adb shell
ll /sys/bus/i2c/drivers
如果像是列表中有对应名字的目录,那说明驱动加载成功。此时可以进入到对应的目录中list可以查看当前驱动的信息。如下:
从上面的信息中可以知道当前设备是挂接到i2c-0上面,其i2c的设备地址是0x20(七位地址),驱动的名字为”tcm1680”。
5、调试触摸tp有无反应
使用adb shell getevent 指令,如果手指触摸tp,会有相应的event打印出来,如下面的格式:
/dev/input/event5: 0003 0039 00000053
/dev/input/event5: 0003 0039 00000000
/dev/input/event5: 0003 0035 00000228
/dev/input/event5: 0003 0036 00000159
/dev/input/event5: 0000 0000 00000000
/dev/input/event4: 0003 0002 fffffc0d
/dev/input/event4: 0000 0000 00000000
/dev/input/event5: 0003 0036 00000157
/dev/input/event5: 0000 0000 00000000
/dev/input/event5: 0003 0035 00000229
/dev/input/event5: 0003 0036 00000155
/dev/input/event5: 0000 0000 00000000
/dev/input/event5: 0003 0035 0000022a
/dev/input/event5: 0003 0036 00000153
/dev/input/event5: 0000 0000 00000000
/dev/input/event5: 0003 0035 0000022b
/dev/input/event5: 0003 0036 00000151
/dev/input/event5: 0000 0000 00000000
这就是说明tp已经有反应了,进一步说明tp驱动加载成功且中断以及i2c都正常。
6、使用adb shell getevent指令
该指令有如下用法:
Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device]
-t: show time stamps
-n: don’t print newlines
-s: print switch states for given bits
-S: print all switch states
-v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32, props=64)
-d: show HID descriptor, if available
-p: show possible events (errs, dev, name, pos. events)
-i: show all device info and possible events
-l: label event types and names in plain text
-q: quiet (clear verbosity mask)
-c: print given number of events then exit
-r: print rate events are received
7、查看当前的input设备
在驱动程序中我们都要注册一个input设备,可以通过以下指令查看所有的input设备,并看是否注册成功:
adb shell getevent -i
执行结果为:
add device 1: /dev/input/event5
bus: 0018
vendor dead
product beef
version 0101
name: “chm_ts”
location: “input/ts”
id: “”
version: 1.0.1
events:
ABS (0003): 002f : value 0, min 0, max 10, fuzz 0, flat 0, resolution 0
0030 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0032 : value 0, min 0, max 200, fuzz 0, flat 0, resolution 0
0035 : value 0, min 0, max 800, fuzz 0, flat 0, resolution 0
0036 : value 0, min 0, max 480, fuzz 0, flat 0, resolution 0
0039 : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0
input props:
INPUT_PROP_DIRECT
add device 2: /dev/input/event4
bus: 0018
vendor 0000
product 0000
version 0000
name: “mir3da”
location: “”
id: “”
version: 1.0.1
events:
ABS (0003): 0000 : value 28, min -16384, max 16383, fuzz 0, flat 0, resolution 0
0001 : value 71, min -16384, max 16383, fuzz 0, flat 0, resolution 0
0002 : value -1012, min -16384, max 16383, fuzz 0, flat 0, resolution 0
input props:add device 3: /dev/input/event3
bus: 0019
vendor 0001
product 0001
version 0100
name: “sunxi-keyboard”
location: “sunxikbd/input0”
id: “”
version: 1.0.1
events:
KEY (0001): 001c 0066 0072 0073 008b
input props:add device 4: /dev/input/event0
bus: 0019
vendor 0001
product 0001
version 0100
name: “axp22-supplyer”
location: “m1kbd/input2”
id: “”
version: 1.0.1
events:
KEY (0001): 0074
input props:add device 5: /dev/input/event2
bus: 0019
vendor 0001
product 0001
version 0100
name: “sunxi-ths”
location: “sunxiths/input0”
id: “”
version: 1.0.1
events:
ABS (0003): 0028 : value 0, min -50, max 180, fuzz 0, flat 0, resolution 0
input props:add device 6: /dev/input/event1
bus: 0019
vendor 0001
product ffff
version 0100
name: “headset”
location: “headset/input0”
id: “”
version: 1.0.1
events:
KEY (0001): 0072 0073 00e2
input props:could not get driver version for /dev/input/mice, Not a typewriter
其中/dev/input/event5是我们注册的input设备,名字为”chm_ts”,其中
ABS (0003): 002f : value 0, min 0, max 10, fuzz 0, flat 0, resolution 0
0030 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0032 : value 0, min 0, max 200, fuzz 0, flat 0, resolution 0
0035 : value 0, min 0, max 800, fuzz 0, flat 0, resolution 0
0036 : value 0, min 0, max 480, fuzz 0, flat 0, resolution 0
0039 : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0
这里面的内容对应于驱动中申请input设备对其初始化的内容,包括:
最大支持手指数 ABS_MT_TRACKING_ID 为 10;
手指压力范围 ABS_MT_TOUCH_MAJOR 为 255;
手指按压宽度 ABS_MT_WIDTH_MAJOR 为 200;
X方向的最大触摸范围 ABS_MT_POSITION_X 为 800;
Y方向的最大触摸范围 ABS_MT_POSITION_Y 为 480;
8、查看报点率
这个问题一般是客户比较关注了,报点率决定了触摸的响应速度,报点率过低直接会影响到体验。可通过以下指令查看报点率:
adb shell getevent -r /dev/input/event5
9、查看详细的报点
adb shell getevent -l /dev/input/event5
假设我手指连续在(0xd8, 16f)即(216, 367)坐标附近触摸三次,得到的信息如下:
可见,一次触摸抬起的动作对应的报告格式是:
EV_ABS ABS_MT_TRACKING_ID
当前触摸的ID,这个会一直累加上去的;
EV_ABS ABS_MT_POSITION_X
EV_ABS ABS_MT_POSITION_Y
当前触摸的X和Y的坐标;
EV_KEY BTN_TOUCH
标记是按下或者抬起的动作;
EV_SYN SYN_REPORT
标记一次上报结束;
EV_ABS ABS_MT_TRACKING_ID
如果这个值为0xffffffff,那么说明当前是抬起动作,后面跟上的BTN_TOUCH要为UP;
EV_KEY BTN_TOUCH
标记是按下或者抬起的动作;
EV_SYN SYN_REPORT
标记一次上报结束;
10、sendevent
sendevent的作用与getevent相反,可以往input设备中写入值。
网上有很多用例,不过需要注意的是一定要符合input上报的协议才能成功。
11、发送特定按键的信息
手机上通常有几个特定的功能按键,比如返回键、home键、设置键等。可以使用
adb shell input keyevent key_code
进行特殊的操作,比如输入下面的指令就相当于按下返回键
adb shell input keyevent 3
具体的key_code可以参照以下两篇文章:
ADB Shell Input Events
KeyEvent
12、setenforce
在调试展讯平台的tp驱动,有时候我们调试用的APK无法正常使用,内核会有如下提示信息:
<36>[ 93.437866] c0 type=1400 audit(1325376121.928:24): avc: denied { write } for pid=2502 comm=”com.chm.tstools” name
=”chm_ts” dev=”proc” ino=4026533105 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:proc:s0 tclass=file permissive=0
即当前应用程序”com.chm.tstools”无法往名为”chm_ts”的proc设备节点上写入数据,因此可见是一个权限的为。可以使用以下命令解决:
adb shell setenforce 0
13、查看虚拟按键的坐标
Android framework中,对于虚拟按键的处理实际上是将驱动中上报的坐标判断是否在按键区域中的坐标范围之内,如果在那范围内,那么就当做按键处理。
在 /sys/board_properties/ 目录下,会有一个设备文件,这个设备文件的内容里面包含按键的信息。
adb shell cat /sys/board_properties/virtualkeys.focaltech_ts
我手上的一台展讯平台样机,不包含按键区域的分辨率是480x800,采用的是focaltech的触控IC。上述命令得到的结果如下:
0x01:139:80:900:80:65:0x01:172:240:900:80:65:0x01:158:400:900:80:65
里面各个参数的意义如下:
0x01: A version code. Must always be 0x01.
139: The Linux key code of the virtual key.
80: The X pixel coordinate of the center of the virtual key.
900: The Y pixel coordinate of the center of the virtual key.
80: The width of the virtual key in pixels.
65: The height of the virtual key in pixels.
具体的内容可以参照Android tp的虚拟按键(virtual key)处理
14、输入配置文件
有时候在调试tp驱动碰到这么一种情况,就是触摸的时候屏幕上一直有个小白点,且滑动的时候看起来像是滑动触摸板,怎么解释呢?就是tp驱动上报应该按照绝对坐标的方式而不是触摸板按照相对坐标的方式上报的。此时可以怀疑是idc文件没有添加。
可以在 /system/usr/idc 目录下添加一个与input设备同样名字的idc文件。
15、屏幕截图
如果有screencap命令,则可以使用该命令截图
adb shell /system/bin/screencap -p /sdcard/screenshot.png
adb pull /sdcard/screenshot.png d:/screenshot.png
触摸屏 adb调试的更多相关文章
- [转] Android实时抓包分析 : 善用adb调试桥
Android实时抓包分析 : 善用adb调试桥 谈到android网络抓包,很多人都能想到牛逼轰轰的神器tcpdump.方法就是在android机器上面安装tcpdump,然后通过-w参数把抓包 ...
- ADB调试桥安装(方式二)
想使用ADB工具可以通过安装安卓SDK套件,然后通过SDK里面的adb工具连接手机进行调试, 然而这种方式安装起来多多少少还是有点麻烦,ADB调试桥安装(方式一). 另一种方式来的就更为舒服一些了,即 ...
- WIFI无线adb调试android
有个需求需要支持android插上键盘,鼠标等外设,但是这样就不能使用microusb口进行adb调试了. 研究了一番,发现可以利用wifi进行adb无线调试(adb应该本身已经支持无线调试). WI ...
- adb这点小事——远程adb调试
欢迎转载.转载请注明:http://blog.csdn.net/zhgxhuaa 1. 前言 1.1. 写在前面的话 在之前的一篇文章<360电视助手实现研究>中介绍了在局域网内直接 ...
- 如何通过网络连接进行ADB调试
点击打开链接 大家在使用adb调试Android系统时可能会遇到麻烦,比如usb端口只有一个,如果用作adb调试,就不能通过usb连接其它器件,或者usb端口不能使用时也没法进行adb调试. Andr ...
- adb调试
adb usb调试,adb网络调试是非常实用的工具,通过电脑连接手机达到文件传输.电脑端安装app刷机等功能材料: 材料: 1.电脑端安装号对应手机的驱动程序 2.电脑端下载好adb调试工具 3.手机 ...
- android默认开启adb调试方法分析
用adb调试android时,每次接入usb线,都会提示一个确认打开usb调试功能的窗口,有时候,我们需要默认打开usb调试功能.或者无需弹出对话框,直接默认开启.这个我们需要分析adb的流程了. a ...
- adb调试android设备 说的比较清楚的一篇文章
ADB支持两种连接Android系统的方式,USB方式及网络方式.一般手机及平板默认会设置为USB方式.android系统底层运行着一个服务(adbd),用于相应和管理大家在电脑端的adb命令连接,这 ...
- android判断adb调试是否打开及代码跳转到开发者选项界面
boolean enableAdb = (Settings.Secure.getInt(getContentResolver(), Settings.Secure.ADB_ENABLED, 0) &g ...
随机推荐
- 一分钟了解mongodb(转)
mongo的由来 截取自英文俚语humongous,意为”巨大的”,是否表明mongodb在设计之初就是为大数据量处理而生呢? mongodb是个啥 mongodb是个可扩展.高性能.开源.面向文档( ...
- js继承的几种类型
首先提供构造函数 1. 构造函数实现继承 原理:改变函数上下文实现继承(call,apply,return,bind) return {}/function(){} 如果返回值是对象 那么this ...
- vue路由传值方式
打印this.$route显示结果: 跳转路由传递参数如下 this.$router.push({ name: 'Page', query/params: { key: value }) <ro ...
- Android Studio 使用入门
Android Studio 快捷键 Action Mac OSX Win/Linux 注释代码(//) Cmd + / Ctrl + / 注释代码(/**/) Cmd + Option + / Ct ...
- c# 24种设计模式5原型模式(Prototype)
前言 原型模式其实C# Object中已经提供了一个Clone( )方法,平时很少用到,最近读Retrofit源码时候看到有这种使用方式. 定义 原型模式就是在系统clone()标记的基础上,对Clo ...
- poj 1088 (dfs+记忆化) 滑雪
题目;http://poj.org/problem?id=1088 感觉对深搜还不太熟练,所以练习一下,类似于连连看的那题,注意的是所求的是最大达长度,并不是从最大的或者最小的点出发得到的就是最长的路 ...
- Eclipse.Error.gen already exists but is not a source folder.
在Eclipse ADT来开发Android App时会遇到以下问题:"myproject/gen already exists but is not a source folder. Co ...
- fedora25的免密码rsync服务配置
目标:实现免密同步数据: 1.安装rsync包: 2.手工添加配置文件: cat /etc/rsyncd.conf # See rsyncd.conf man page for more opt ...
- NOI导刊 2018河南郑州游记
前言 本蒟蒻来自浙江的弱市弱校,因为不想两年\(OI\)一场空,以及想出去玩,所以与同届大佬一起报了\(NOI\)导刊,希望能留下点不错的记忆吧. \(Day\ 0\) \(10\)月\(1\)日 经 ...
- C++变量存储类别和内存四区
变量存储类别 变量声明/定义的一般形式: 存储类别 数据类型 变量名 存储类别指的是数据在内存中存储的方法.存储方法分为静态存储和动态存储两大类.标准C语言为变量.常量和函数定义了4种存储类型:ext ...