模拟Android多点触控

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Android多点触控

多点触控实现思路

  经过资料的查询,要在Android模拟器上实现多点触控,滑动等操作,主要有两种思路:

  • 一是通过adb shell input swipe 来模拟手指滑动,实现多点触控;
  • 二是先通过adb shell getevent来获取用户多点触控事件的event,进行解析之后,用adb shell sendevent 来模拟用户的操作;

第一种adb shell input方式

  对第一种方法进行试验,发现adb shell input 命令是阻塞式调用的,第一条命令开始执行后,等到命令执行完后返回,第二条命令才开始执行,比如,我们用两条adb命令:

adb shell input swipe 100 100 300 300 1000
adb shell input swipe 200 200 100 100 800

  则展示出来的结果是,用户先在坐标100 100到300 300上进行了一次1000ms的滑动,之后又在200 200到100 100上进行了一次800ms的滑动,因此,第一种方式不能很好地模拟多点触控方式。

第二种adb shell sendevent方式

  之后开始对第二种思路进行试验,这里采用的环境是Genymotion 2.5.2下的Android 4.2.2版本的nexus 4虚拟机。
  首先我们要用adb shell getevent来对目标虚拟机进行事件监听。在genymotion中,所有操作都被封装在 /dev/input/event7中,然后我对事件进行了解析,部分结果如下:

//按下
/dev/input/event7: 0001 014a 00000001
/dev/input/event7: 0003 003a 00000001
/dev/input/event7: 0003 0035 00000122
/dev/input/event7: 0003 0036 000001d5
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

//松开
/dev/input/event7: 0001 014a 00000000
/dev/input/event7: 0003 003a 00000000
/dev/input/event7: 0003 0035 00000122
/dev/input/event7: 0003 0036 000001d5
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

//滑动过程中
/dev/input/event7: 0003 0035 00000225
/dev/input/event7: 0003 0036 000003ba
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

/dev/input/event7: 0003 0035 00000225
/dev/input/event7: 0003 0036 000003bb
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

//松开
/dev/input/event7: 0001 014a 00000000
/dev/input/event7: 0003 003a 00000000
/dev/input/event7: 0003 0035 00000225
/dev/input/event7: 0003 0036 000003bb
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

//模拟双指缩放
//genymotion在mac下是通过摁下control然后拖动鼠标来模拟向外滑动,向内滑动等操作,用sendevent可以不用加上control的操作
//摁下control
/dev/input/event7: 0001 007d 00000001
/dev/input/event7: 0000 0000 00000000

//鼠标左键摁下
/dev/input/event7: 0001 014a 00000001
/dev/input/event7: 0003 003a 00000001

//一组
/dev/input/event7: 0003 0035 00000144
/dev/input/event7: 0003 0036 00000280
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0003 0035 00000000
/dev/input/event7: 0003 0036 00000280
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

/dev/input/event7: 0003 0035 00000001
/dev/input/event7: 0003 0036 00000280
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0003 0035 00000143
/dev/input/event7: 0003 0036 00000280
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

/dev/input/event7: 0003 0035 00000001
/dev/input/event7: 0003 0036 00000280
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0003 0035 00000143
/dev/input/event7: 0003 0036 00000280
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

/dev/input/event7: 0003 0035 00000001
/dev/input/event7: 0003 0036 0000027f
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0003 0035 00000143
/dev/input/event7: 0003 0036 0000027f
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

/dev/input/event7: 0003 0035 00000002
/dev/input/event7: 0003 0036 0000027f
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0003 0035 00000142
/dev/input/event7: 0003 0036 0000027f
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

/dev/input/event7: 0003 0035 00000003
/dev/input/event7: 0003 0036 0000027f
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0003 0035 00000141
/dev/input/event7: 0003 0036 0000027f
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

//松开鼠标左键
/dev/input/event7: 0001 014a 00000000
/dev/input/event7: 0003 003a 00000000
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

//松开control
/dev/input/event7: 0001 007d 00000000
/dev/input/event7: 0000 0000 00000000

  这里有个要注意的地方,首先,getevent得到的代码是十六进制的,但是用sendevent输入时要求使用十进制,需要对代码进行转换。

  其中,

/dev/input/event7: 0001 014a 
/dev/input/event7: 0003 003a 

是代表摁下的事件代码,后面是1时代表摁下,是0时代表松开;

/dev/input/event7: 0003 0035 
/dev/input/event7: 0003 0036 

是代表时间坐标的代码,0x 0003 0035对应的是x坐标,0x 0003 0036对应的是y坐标;

/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

0000 0002 00000000是代表同步操作,我的理解是将本次事件放入事件队列中,开始执行,0000 0000 00000000是代表一次输入结束,我认为也代表了一次事件的结束;

所以将上述代码转换为十进制后,长摁可以用以下代码进行模拟:

adb shell sendevent /dev/input/event7 0001 0330 00000001
adb shell sendevent /dev/input/event7 0003 0058 00000001
adb shell sendevent /dev/input/event7 0003 0053 00000290
adb shell sendevent /dev/input/event7 0003 0054 00000469
adb shell sendevent /dev/input/event7 0000 0002 00000000
adb shell sendevent /dev/input/event7 0000 0000 00000000

  之后,我们可以看一下模拟双指缩放的事件代码:

/dev/input/event7: 0003 0035 00000144
/dev/input/event7: 0003 0036 00000280
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0003 0035 00000000
/dev/input/event7: 0003 0036 00000280
/dev/input/event7: 0000 0002 00000000
/dev/input/event7: 0000 0000 00000000

这是左键摁下之后的代码,我们可以看出,主要分为三个部分:

/dev/input/event7: 0003 0035 00000144
/dev/input/event7: 0003 0036 00000280
/dev/input/event7: 0000 0002 00000000
以及
/dev/input/event7: 0003 0035 00000000
/dev/input/event7: 0003 0036 00000280
/dev/input/event7: 0000 0002 00000000
以及
/dev/input/event7: 0000 0000 00000000

所以,我们可以看到两点触控的操作需要两个点的输入操作以及同步操作,在结束后加上终止操作来完成整个事件,因此,加入多个点的坐标输入和同步操作,保持一个终止操作就可以得到三点、四点等多点操作的方式。

于是,我们可以这样模拟一个简单的双指滑动:

adb shell sendevent /dev/input/event7 0001 0330 00000001
adb shell sendevent /dev/input/event7 0003 0058 00000001
adb shell sendevent /dev/input/event7 0003 0053 00000290
adb shell sendevent /dev/input/event7 0003 0054 00000469
adb shell sendevent /dev/input/event7 0000 0002 00000000
adb shell sendevent /dev/input/event7 0003 0053 00000490
adb shell sendevent /dev/input/event7 0003 0054 00000290
adb shell sendevent /dev/input/event7 0000 0002 00000000
adb shell sendevent /dev/input/event7 0000 0000 00000000
adb shell sendevent /dev/input/event7 0003 0053 00000292
adb shell sendevent /dev/input/event7 0003 0054 00000470
adb shell sendevent /dev/input/event7 0000 0002 00000000
adb shell sendevent /dev/input/event7 0003 0053 00000487
adb shell sendevent /dev/input/event7 0003 0054 00000289
adb shell sendevent /dev/input/event7 0000 0002 00000000
adb shell sendevent /dev/input/event7 0000 0000 00000000

同理,多点长摁,多点滑动等操作也可以这样拓展出来。

使用Go语言解析多点摸协议(MIT)TypeB由ADB调试产生的数据 前言 我们在使用安卓手机的时候,已经很少有人会不借助摸操作来操作手机了,也就是说对手机的摸操作已经是我们使用手机时最常见的方式了。那么我们究竟是如何使用这种方式操手机的呢?手机又是如何处理这些信息的呢? 我们对于手机的摸操作产生的信息,由Linux/Android多点摸协议规定了如何进行组织和传输。而对于不同的手机设备,多点摸协议又分为TypeA和TypeB两种,我的新手机(嘿嘿嘿开心... 阅读详情

相关推荐

ADB 模拟摸和按键

解锁adb shell input keyevent 82查看设备与与event的对应关系cat /proc/bus/input/devicesgetevent获取屏幕输入事件,通过input tap命令模拟摸屏幕input tap 600 800模拟的是滑动事件input swipe input swipe 100 800 700 800

pan0755的博客 2959

adb模拟按键操作

Androidadb模拟按键,操作手机

Android13 adb input 调试命令使用和源码解析

本章重点Android13 adb input 调试命令的使用和源码分析 通过命令来模拟用户在设备上的各种操作,从而进行测试、调试或其他目的。通过阅读源码来深入了解Android 13系统的输入事件管理机制。

我其实什么都不会 6789

解放双手!ADB模拟按键与制全攻略

你是否还在为重复的手机操作感到厌烦?想要自动化测试应用却不知从何入手?本文将带你掌握ADBAndroid Debug Bridge,安卓调试桥)的设备制技巧,通过简单命令实现按键模拟摸操作,让手机操作效率提升10倍!读完本文,你将学会如何用一行代码制手机按键、模拟滑动解锁、输入文本,甚至实现简单的自动化操作。 ## ADB设备制基础 ADB是连接电脑与Android设备的强大工具,...

gitblog_01169的博客 1280

uinput模拟摸屏双指放大与缩小

uinput模拟摸屏双指放大与缩小前言创建虚拟设备并配置属性写入单个事件创建事件序列程序运行过程后记 前言 有时为了获取某种事件,需要使用uinput来创建一个虚拟的设备,通过先配置好设备属性,将预定好的input event序列写入/dev/uinput设备文件,便可在没有硬件设备的情况下获得所需设备的某个事件。 本文主要以分析代码的方式讲解如何利用uinput模拟摸屏的双指放大与缩小,涉及...

初夏夕空的博客 4691

Android多点触控详解

Android多点触控详解

silencefly的博客 3062

如何使用Minitouch轻松模拟Android多点触控事件?5分钟快速上手教程

Minitouch是一款轻量级的Android多点触控事件生成工具,它通过Socket接口实现对Android设备的模拟,无需Root权限即可在大多数Android设备上运行。无论是自动化测试还是开发调试,Minitouch都能提供精准的多点触控支持,尤其适合HTML5多点触控事件的测试场景。 ## 📋 准备工作:环境搭建与依赖安装 要开始使用Minitouch,你需要准备以下工具: -

gitblog_00730的博客 895

mac上android一个模拟器多点触控的方法

Genymotion Multi Touch On MacOSX 在 Mac 版的 Genymotion 的多點觸用法為 縮放:放大 Ctrl + 左鍵按下往左拖,縮小 Ctrl + 左鍵按下往右拖 Zoom In:Ctrl + Mouse Drag LeftZoom Out:Ctrl + Mouse Drag Right 俯角:前傾 Ctrl +

NOHACKCC的专栏 4699

Android Uiautomator2 Python Wrapper多点触控操作:模拟双指手势的实现方法

在移动应用测试中,您是否遇到过这些痛点? - 图片缩放功能在自动化测试中无法验证 - 地图应用的双指平移操作难以模拟 - 游戏中的多指操作场景无法覆盖 - 手势解锁功能的自动化测试卡壳 本文将系统讲解如何使用Android Uiautomator2 Python Wrapper实现专业级多点触控操作,读完后您将掌握: - 双指缩放、旋转、平移的核心原理 - Minitouch协议的Python实...

gitblog_00708的博客 760

如何用TUIOSimulator轻松实现跨平台多点触控开发?

TUIOSimulator是一个基于Unity/C#的开源TUIO v1.1模拟器,专为开发者提供跨平台的多点触控交互解决方案。这款工具能够模拟发送和接收TUIO数据,支持OS X、Windows、iOS和Android等多个平台,极大地简化了TUIO协议应用的开发和测试流程。 ## 为什么需要TUIO模拟器?解决真实设备依赖痛点 在多点触控和交互式应用开发中,开发者经常面临一个棘手问题:缺乏

gitblog_00328的博客 182

VysorPro在Windows上的全方位Android设备制体验

VysorPro 是一款先进的工具,它能够使开发者和用户在Windows平台上无线制连接的Android设备。借助此工具,可以轻松地进行调试、测试和演示,从而极大提高了工作效率和体验的便捷性。

weixin_42103128的博客 1172

海马玩android模拟器哪个好用,海马玩模拟器好用吗?用电脑怎么玩手机APP?海马玩模拟器评测-太平洋电脑网...

用电脑怎么玩手机上的游戏或者工具等APP?或许你已经试过BlueStacks这个口碑不错的安卓模拟器,但这回要推荐的是另一款更好用的的安卓模拟器——海马玩模拟器。海马玩模拟器(英文名为:Droid4X)是一款完全国产的安卓模拟器,是在Virtualbox虚拟机的基础上研发出来的。海马玩模拟器的可玩性超级高,不但支持Windows和Mac双平台,而且对APP的兼容性超高,能兼容超过99%的安卓app...

weixin_39777019的博客 973

海马玩安卓模拟器linux,Droid4X 0.8.4 海马玩安卓模拟器 安卓的福音

Droid4X 0.8.4 海马玩安卓模拟器安卓的福音海马玩安卓模拟器—Droid4X是迄今为止在性能,兼容性和使用体验方面最好的安卓模拟器。通过Droid4X,可以在PC上享受百万移动应用和游戏带来的全新体验。它相当于一部超级高性能的Android平板。Droid4X,全球最好的Android模拟器!特色功能:截图、摇一摇、GPS模拟、四种高清分辨率,支持拖拉调整窗口,支持开启VT更流畅,适...

weixin_33978451的博客 855

android模拟器 gpu,Android模拟器新版升级,新增GPU支持、多点摸等功能【视频】...

对于Android开发者来说,Android模拟器是开发和测试应用中最重要的一个工具。但由于Android系统版本和设备日益增多,之前的模拟器已经完全不能满足开发者的要求了。今天,Android开发者博客官方宣布对Android模拟器进行了升级,其中有多项重大改进,包括CPU性能的明显提升和更多硬件特征的支持,以及传感器和多点摸输入等。添加GPU支持Android 4.0.3 r2模拟器已经内置...

weixin_35964171的博客 544

如何构建跨平台的多点触控交互模拟解决方案

在现代交互式应用开发中,**实时多点触控模拟**已成为增强用户体验的关键技术。TUIOSimulator作为一款基于Unity/C#开发的TUIO v1.1协议模拟器,为开发者提供了高效、跨平台的交互模拟解决方案。该项目支持OS X、Windows、iOS和Android等多个平台,通过**轻量级架构**和**实时数据传输**机制,帮助开发者快速构建和测试复杂的交互应用。 ## 项目背景与交互模

gitblog_00697的博客 63

KotlinAutomation,使用Kotlin实现root后多点触控

本项目通过Kotlin+Root权限,实现了多点触控模拟,可用于自动化测试、交互研究等场景。若有疑问或建议,欢迎讨论!

Azikabans的博客 778

Android 【真机】与【模拟器摸屏事件的模拟差异分析

    Android 真机和模拟器的差异问题,是永恒的话题,问不完的为什么,解不完的迷。模拟器的存在,有它的作用,但不要什么都相信模拟器。除非你是Android纯上层应用开发人员或者爱好者,否则我建议你扔掉模拟器。它理想化的引导给我们添了不少麻烦。当然,这也是件好事。最起码,让我有兴趣去寻求答案,让我收获了更多。      问题的缘由是有个自动化测试的需求,我需要写脚本模拟点击摸屏的一系列

程序人生 479

android模拟器

android模拟器android模拟器 开发环境搭建注意 adb连接droid4x adb模拟对设备的简单操作 截屏 保存到SDCard 保存到电脑 模拟输入 adb对设备的复杂操作 多点触控 其他关于修改deviceIDIMEI 面临的问题开发环境搭建注意: 先以win环境为例 最好将adb加入环境变量参考链接:adb环境变量配置 在模拟器中打开开发者模式及usb调试 adb连接droid4xd

Kodoo的专栏 1300

安卓模拟器Android SDK 4.0.3 R2安装完整图文教程

在最新的Android 4.0.3 R2模拟器中,已经加入了GPU支持,可以支持OpenGL ES 2.0标准,让开发者可以借助模拟器来测试自己的OpenGL游戏。在去年新增了摄像头支持之后,现在的新版模拟器也加入了包括多点摸输入设备的支持,未来还将加入蓝牙和NFC支持…… QVGA (240x320, low density, small screen) WQVGA400 (240x4

fancychendong的专栏 8184
上一篇: android模拟器
下一篇: Multi-label learning 第一周
Kodoo
博客等级 码龄12年 9粉丝 9原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值