使用ADB发送模拟touch的操作

本文介绍了如何使用ADB工具模拟手机屏幕触控操作,包括利用input命令进行点击、滑动及文字输入等操作,同时提供了getevent命令获取触摸事件信息的方法,并展示了通过sendevent模拟触摸事件的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候为了特殊的测试需求,我们需要使用ADB发送模拟touch的操作,就可以用到下面的方法,

1. 使用input工具里的tap参数模拟touch的操作 

adb shell input tap x y
十分简单,也不需要知道是哪个eventX;另外,input还有其他参数,功能很强大,help文档如下,

# input                                                        
Usage: input [<source>] <command> [<arg>...]

The sources are: 
      trackball
      joystick
      touchnavigation
      mouse
      keyboard
      gamepad
      touchpad
      dpad
      stylus
      touchscreen

The commands and default sources are:
      text <string> (Default: touchscreen)
      keyevent [--longpress] <key code number or name> ... (Default: keyboard)
      tap <x> <y> (Default: touchscreen)
      swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
      press (Default: trackball)
      roll <dx> <dy> (Default: trackball)
从上面的帮助文档,我们看到input还可以模拟文字输入(text)和滑动(swipe),十分好用。

2. 使用getevent获得事件信息

输入“adb shell getevent”,我们可以看到一直有信息吐出来,类似下面的信息,但他们是不是touch的event呢?

如果我们没有触碰touch,一直有event出来,那么这些event确定不是touch的event;touch的event只有当触摸touch的时候才会出来,这样,我们就知道如何录得正确的event了。

比如,当我们触碰touch的时候,有event1出来,则说明touch是通过event1发出的;我们可以使用命令“getevent | grep event1”只记录touch的event。

/dev/input/event1: 0003 0001 00000293
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0003 0039 ffffffff
/dev/input/event1: 0001 014a 00000000
/dev/input/event1: 0003 0018 00000000
/dev/input/event1: 0000 0000 00000000
3. 其他模拟touch event的方法

还可以通过sendevent来模拟touchevent,不过比较繁琐,方法如下,

a. 设置x/y坐标

adb shell sendevent /dev/input/event1 3 0 x
adb shell sendevent /dev/input/event1 3 1 y
b. 发送touch 事件(必须使用0 0 0配对)

adb shell sendevent /dev/input/event1 1 330 1
adb shell sendevent /dev/input/event1 0 0 0
c.  释放touch事件(必须使用0 0 0配对)

adb shell sendevent /dev/input/event1 1 330 0
adb shell sendevent /dev/input/event1 0 0 0 









### 使用 ADB 实现多点触控模拟 #### 方法一:`adb shell input tap` 这种方式适合简单的单指触摸操作,但对于复杂的多点触控效果有限。命令格式如下: ```bash adb shell input tap <x> <y> ``` 此方法仅适用于模拟单一手指的点击事件[^1]。 #### 方法二:`adb shell sendevent` 对于更复杂、真实的多点触控场景,则推荐采用 `sendevent` 命令来发送原始硬件事件序列。这允许精确控制多个接触点的行为模式。基本语法结构为: ```bash adb shell sendevent /dev/input/eventX type code value ``` 其中 `/dev/input/eventX` 是目标输入设备文件路径;type 表示事件类别(如绝对坐标ABS_MT_POSITION_X),code 定义特定属性而value 则赋予实际数值[^5]。 具体到实现两个及以上手指的同时滑动或缩放手势时,需连续发出一系列针对不同追踪ID(track ID) 的位置更新指令,并确保每次变动之间保持适当间隔以形成连贯动作轨迹。例如创建并执行包含以下内容的脚本可达成两点轻拂向上之效: ```bash #!/bin/bash # 设定初始参数 device="/dev/input/event3" id1=10 # 第一个触点跟踪编号 id2=11 # 第二个触点跟踪编号 start_x=500 start_y=1600 end_x=500 end_y=800 step=40 delay_ms=50 # 开始记录第一个触点 echo "Starting first touch..." for ((i=$start_y; i<=$end_y; i+=step)); do echo "$device 3 57 $id1" | sudo tee /proc/bus/input/devices >/dev/null echo "$device 3 53 ${start_x}" | sudo tee /proc/bus/input/devices >/dev/null echo "$device 3 54 ${i}" | sudo tee /proc/bus/input/devices >/dev/null echo "$device 0 2 0" | sudo tee /proc/bus/input/devices >/dev/null sleep $(bc <<< "scale=2;$delay_ms/1000") done # 同步处理第二个触点... echo "Synchronizing second touch with the first one..." for ((j=${start_y}; j>=${end_y}; j-=step));do : done # 结束所有触碰活动 echo "Ending touches." echo "${device} 3 57 -1"|sudo tee /proc/bus/input/devices>/dev/null echo "${device} 0 2 0" |sudo tee /proc/bus/input/devices>/dev/null ``` 上述代码片段展示了如何构建一个多点触控行为——即从屏幕底部向顶部平行移动两根虚拟的手指。需要注意的是,在真实环境中应用前应当调整设备节点名称(`/dev/input/event3`)以及具体的坐标范围等细节使之匹配待测装置特性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值