getevent&sendevent 是android系统下的一个工具,可以 模拟 多种按键和触屏操作,产生的是raw event,raw event经过event hub处理产生最终的gesture事件。

这两个命令的源码在system/core/toolbox/下,sendevent.c getevent.c

关于event设备的获取,在 /proc/bus/input/devices 下面:

$ adb shell cat /proc/bus/input/devices

=========================

一、getevent 

获取getevent 的使用方法 : getevent -h 

getevent 监控当前的事件, 鼠标事件, 按键事件, 拖动滑动 以及其他类型的event事件;

使用getevent 获得/dev/input/eventX设备 汇报的事件,这个命令会输出所有event设备的 基本信息,如下:

shell@pc7625:/ $ getevent

add device 1: /dev/input/event6
  name:     "accel"
add device 2: /dev/input/event5
  name:     "goodix_ts"
add device 3: /dev/input/event0
  name:     "Power Button"
add device 4: /dev/input/event1
  name:     "Video Bus"
add device 5: /dev/input/event4
  name:     "baytrailaudio Intel MID Audio Jack"
add device 6: /dev/input/event2
  name:     "gpio-lesskey"
add device 7: /dev/input/event3
  name:     "dollar_cove_power_button"

表明系统有 7个event设备 ;

--------------------------------------------------------------------------------

在我的android设备里,event2 代表 音量加减按键;

shell@pc7625:/ $ getevent /dev/input/event2 &

点击 音量减按键 :

按键 按下的log :

0001 0072 00000001
0000 0000 00000000

按键 弹起的log :
0001 0072 00000000
0000 0000 00000000

其中/dev/input/event2 是device的名字 ;

0001 是type;

0072 是键码;

最后一个根据type不同而不同;

比如上面的 00000001 就是按下 音量键的keydown,00000000 是松开 音量键的keyup;

具体的type,code,value的定义 可以在源码/frameworks/base/core/java/android/view/KeyEvent.java中找到;

=============================

二、sendevent: 

命令格式 : sendevent [device] [type] [code] [value]

需要注意的是在 getevent 中code显示的是十六进制, 而sendevent 中需要用 十进制

1、模拟发送一个 音量加键:

按下 正真的 音量加 按键:

/dev/input/event3: 0001 0073 00000001
/dev/input/event3: 0000 0000 00000000

松开 正真的 音量加 按键:
/dev/input/event3: 0001 0073 00000000
/dev/input/event3: 0000 0000 00000000

------------- 模拟 按键 ------------

发送 按下 音量加 :

shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 1 115 1
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 0 0 0

发送 松开 音量加 :
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 1 115 0
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 0 0 0

-----------------------------------------------------------------------------------

type, code, value的定义可参看kernel/include/linux/input.h

type如下定义:

  1. /*
  2. * Event types
  3. */
  4. #define EV_SYN          0x00
  5. #define EV_KEY          0x01
  6. #define EV_REL          0x02
  7. #define EV_ABS          0x03
  8. #define EV_MSC          0x04
  9. #define EV_SW           0x05
  10. #define EV_LED          0x11
  11. #define EV_SND          0x12
  12. #define EV_REP          0x14
  13. #define EV_FF           0x15
  14. #define EV_PWR          0x16
  15. #define EV_FF_STATUS        0x17
  16. #define EV_MAX          0x1f
  17. #define EV_CNT          (EV_MAX+1)

一般来说,常用的是EV_KEY, EV_REL, EV_ABS, EV_SYN

分别对应keyboard, 相对坐标, 绝对坐标, 同步事件

EV_SYN则表示一组完整事件已经完成,需要处理,EV_SYN的code定义事件分发的类型

EV_SYN对应的code如下:

  1. /*
  2. * Synchronization events.
  3. */
  4. #define SYN_REPORT      0
  5. #define SYN_CONFIG      1
  6. #define SYN_MT_REPORT       2

EV_KEY的code比较多,这里就不列出来了,可参照input.h

EV_REL对应的code:

  1. /*
  2. * Relative axes
  3. */
  4. #define REL_X           0x00
  5. #define REL_Y           0x01
  6. #define REL_Z           0x02
  7. #define REL_RX          0x03
  8. #define REL_RY          0x04
  9. #define REL_RZ          0x05
  10. #define REL_HWHEEL      0x06
  11. #define REL_DIAL        0x07
  12. #define REL_WHEEL       0x08
  13. #define REL_MISC        0x09
  14. #define REL_MAX         0x0f
  15. #define REL_CNT         (REL_MAX+1)  

EV_ABS对应的code:

  1. /*
  2. * Absolute axes
  3. */
  4. #define ABS_X           0x00
  5. #define ABS_Y           0x01
  6. #define ABS_Z           0x02
  7. #define ABS_RX          0x03
  8. #define ABS_RY          0x04
  9. #define ABS_RZ          0x05
  10. #define ABS_THROTTLE        0x06
  11. #define ABS_RUDDER      0x07
  12. #define ABS_WHEEL       0x08
  13. #define ABS_GAS         0x09
  14. #define ABS_BRAKE       0x0a
  15. #define ABS_HAT0X       0x10
  16. #define ABS_HAT0Y       0x11
  17. #define ABS_HAT1X       0x12
  18. #define ABS_HAT1Y       0x13
  19. #define ABS_HAT2X       0x14
  20. #define ABS_HAT2Y       0x15
  21. #define ABS_HAT3X       0x16
  22. #define ABS_HAT3Y       0x17
  23. #define ABS_PRESSURE        0x18
  24. #define ABS_DISTANCE        0x19
  25. #define ABS_TILT_X      0x1a
  26. #define ABS_TILT_Y      0x1b
  27. #define ABS_TOOL_WIDTH      0x1c
  28. #define ABS_VOLUME      0x20
  29. #define ABS_MISC        0x28
  30. ###
  31. #define ABS_MT_TOUCH_MAJOR  0x30    /* Major axis of touching ellipse */
  32. #define ABS_MT_TOUCH_MINOR  0x31    /* Minor axis (omit if circular) */
  33. #define ABS_MT_WIDTH_MAJOR  0x32    /* Major axis of approaching ellipse */
  34. #define ABS_MT_WIDTH_MINOR  0x33    /* Minor axis (omit if circular) */
  35. #define ABS_MT_ORIENTATION  0x34    /* Ellipse orientation */
  36. #define ABS_MT_POSITION_X   0x35    /* Center X ellipse position */
  37. #define ABS_MT_POSITION_Y   0x36    /* Center Y ellipse position */
  38. #define ABS_MT_TOOL_TYPE    0x37    /* Type of touching device */
  39. #define ABS_MT_BLOB_ID      0x38    /* Group a set of packets as a blob */
  40. #define ABS_MT_TRACKING_ID  0x39    /* Unique ID of initiated contact */
  41. #define ABS_MT_PRESSURE     0x3a    /* Pressure on contact area */
  42. ###
  43. #define ABS_MAX         0x3f
  44. #define ABS_CNT         (ABS_MAX+1)

=====================================================================================

三、input keyevent

如果想模拟按键,send event用起来比较繁琐,可以用input keyevent代替

下面是input keyevent几个比较常用的用法:

input keyevent 3    // Home

input keyevent 4    // Back

input keyevent 19  //Up

input keyevent 20  //Down

input keyevent 21  //Left

input keyevent 22  //Right

input keyevent 23  //Select/Ok

input keyevent 24  //Volume+

input keyevent 25  // Volume-

input keyevent 82  // Menu 菜单

更多的按键事件keycode可参考:http://www.cnblogs.com/mgzc-1508873480/p/7826967.html

用senevent 模拟触屏事件

sendevent /dev/input/event1 0003 0000 0000015e    // ABS x 坐标

sendevent /dev/input/event1: 0003 0001 000000df    // ABS y 坐标

sendevent /dev/input/event1: 0001 014a 00000001   // BTN touch事件 值为1

sendevent /dev/input/event1: 0003 0018 00000000   // ABS pressure事件

sendevent /dev/input/event1: 0001 014a 00000000   // BTN touch事件 值为0

sendevent /dev/input/event1: 0000 0000 00000000   // sync事件

Android自动化 -- sendevent/getevent 用法的更多相关文章

  1. Android sendevent/getevent 用法

    前言:最近在弄一个模拟用户点击屏幕的功能,并且不需要用户点击屏幕,后台自动给输入框赋值,类似pc端按键精灵的功能,在网上找了很多人的资料,写的都不是太详细,一知半解.还要自己慢慢研究.于是我这边写一篇 ...

  2. Android自动化压力测试图解教程——Monkey工具

    [置顶] Android自动化压力测试图解教程--Monkey工具 标签: 测试androidprofiling工具测试工具文档 2012-04-01 10:16 38185人阅读 评论(10) 收藏 ...

  3. android的logcat详细用法

    Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命 令来查看和使用. 使用logcat命令 你可以用 logc ...

  4. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  5. Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例

    ---------------------------------------------------------------------------------------------------- ...

  6. Android自动化测试之Monkeyrunner学习笔记(一)

    Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...

  7. 怎么通过activity里面的一个按钮跳转到另一个fragment(android FragmentTransaction.replace的用法介绍)

    即:android FragmentTransaction.replace的用法介绍 Fragment的生命周期和它的宿主Activity密切相关,几乎和宿主Activity的生命周期一致,他们之间最 ...

  8. Android开发中Bundle用法包裹数据(转)

    Android开发中Bundle用法包裹数据 Bundle的经典用法,包裹数据放入Intent中,目的在于传输数据. SDK 里是这样描述: A mapping from String values ...

  9. 【转】Android各种Adapter的用法

    转自:http://my.oschina.net/u/658933/blog/372151 Android各种Adapter的用法 发表于5个月前(2015-01-27 10:56)   阅读(143 ...

随机推荐

  1. 计算机专业C语言编程学习重点:指针化难为易

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  2. 20155212 2016-2017-2 《Java程序设计》第1周学习总结

    20155212 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 Chapter 1 Java平台概论 Java一开始就是为了有着有限内存与运算资源的消费型数 ...

  3. 20155239《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    实验内容及步骤 使用JDK编译.运行简单的java程序 2.使用IDEA编辑.编译.运行.调试Java程序 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 先建立一个文件夹命名为Co ...

  4. 20155318 2016-2017-2 《Java程序设计》第一周学习总结

    20155318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 上周总结 上周学习了一些大学的学习方法,比如知识分为为三种:元知识.软知识和硬知识,讲述技能 ...

  5. Popup 解决置顶显示问题

    原文:Popup 解决置顶显示问题 前言 Popup显示时会置顶显示.尤其是 Popup设置了StayOpen=true时,会一直置顶显示,问题更明显. 置顶显示问题现象: 解决方案 怎么解决问题? ...

  6. Struts2知识点总结

    2 Struts2 1 Struts2 简化Servlet编写 2 Struts2使用步骤 1 添加第三方包 2 在web.xml当中配置核心过滤器 <filter> <filter ...

  7. 【Loj10222】佳佳的Fibonacci

    题面 题解 可以发现\(T(n)\)无法用递推式表示. 于是我们做如下变形: \[ T(n) = \sum _ {i = 1} ^ n i \times f_i \\ S(n) = \sum _ {i ...

  8. mybatis逆向工程 mbg运行java代码时提示找不到MBG.xml的解决方法

    这里要写全路径才能找到文件

  9. Android开发笔记——图片缓存、手势及OOM分析

    把图片缓存.手势及OOM三个主题放在一起,是因为在Android应用开发过程中,这三个问题经常是联系在一起的.首先,预览大图需要支持手势缩放,旋转,平移等操作:其次,图片在本地需要进行缓存,避免频繁访 ...

  10. 世界杯足彩怎么买划算?机器学习AI告诉你答案(含预测)

    本文首发于InfoQ公众号头条. 四年一度的世界杯又来了,作为没什么时间看球的码农,跟大家一样,靠买买足彩给自己点看球动力和乐趣, 然而总是买错球队,面对各种赔率也不知道怎么买才划算,足彩是不是碰大运 ...