android模拟点击 您所在的位置:网站首页 iqoo7usb模拟点击 android模拟点击

android模拟点击

2023-12-19 19:22| 来源: 网络整理| 查看: 265

android模拟点击 写前思考如何实现方式1:模拟MotionEvent方式2:adb shell input tap x y方式3:adb shell sendevent方式4:Instrumentation方式5:GestureDescription 写后总结

写前思考

在互联网鸿飞腾达的今日,作为一名Android 开发者很庆幸、智慧让人懒惰说的一点都没错; 伴随着各种节日的到来,各大电商网站开始了他们各自的“活动”,内容简单且不失趣味,但长时间下去作为消费者的我也忍受不了这种机械化的,点击—>浏览—>返回—>点击—>浏览… 不想参加吧却不想与时代脱轨(顺便赚红包),那有没有办法直接让手机自动去完成这一系列的事情呢? 初级程序员:有吧??!! 资深程序员:没有、但是我可以搞定。

到这里有的小伙伴可能开始质疑,这种有啥用?除了多掉两根头发没卵用,那我就笑了,举个例子:

当前风靡一时的淘宝盖楼浏览活动;过年浏览商品集五福浏览活动;刺激战场、全军出击类模拟行走,开火等(当然这里除了模拟还需要监听,监听内容暂且不在本文中提及)……

以下内容均为闲暇时刻对技术的专研,如有雷同之处,还望告知。

如何实现

整体上分为四种实现方式: 方式1:模拟MotionEvent 方式2:adb shell input tap 方式3:adb shell sendevent 方式4:Instrumentation 方式5:GestureDescription 接下来就针对上面各种方法依次做下测试: 测试之前我找来了我自己写的一个小Demo,当屏幕上有触摸事件时、屏幕上会有一个红色view 跟随移动;

方式1:模拟MotionEvent

方式2:adb shell input tap x y

该方法属于 cmd命令方式,可用于任何界面,任何情况: 通过usb 或者adb连接 手机后直接可以使用该命令;

在这里插入图片描述 除此之外还有相关连的其他方法(跳转查看):

adb shell text Eg : adb shell input text “hello,world”// 模拟输入了 hello,world

adb input keyevent Eg : adb shell input keyevent 26 or adb shell input keyevent “KEYCODE_POWER” // 模拟摁了一下 电源键

input swipe [duration(ms)] Eg:adb shell input swipe 100 100 200 200 300 //从 100 100 经历300毫秒滑动到 200 200; Eg:adb shell input swipe 100 100 100 100 1000 //在 100 100 位置长按 1000毫秒

方式3:adb shell sendevent

除了上面 input tap 方式还有另一种 cmd下的方式;

获取点击数据

当用户点击操作手机时(这里我点击TestDemo 打开了一个软件) 通过getevent 可以看到一些手机发出的操作指令: 在这里插入图片描述 /dev/input/event5: 0003 0039 00000001 /dev/input/event5: 0001 014a 00000001 /dev/input/event5: 0003 0035 000001b5 /dev/input/event5: 0003 0036 00000154 /dev/input/event5: 0000 0000 00000000 /dev/input/event5: 0003 0039 ffffffff /dev/input/event5: 0001 014a 00000000 /dev/input/event5: 0000 0000 00000000 上面这些指令就相当于 android 收到的用户操作;

编辑命令

上面这些指令后两列都是16进制的,接下来转成10进制的; /dev/input/event5: 0003 0057 00000001 /dev/input/event5: 0001 0330 00000001 /dev/input/event5: 0003 0053 00000437 /dev/input/event5: 0003 0054 00000340 /dev/input/event5: 0000 0000 00000000 /dev/input/event5: 0003 0057 4294967295 /dev/input/event5: 0001 0330 00000000 /dev/input/event5: 0000 0000 00000000 编辑一下命令: 主要就是 在每行前面加入 sendevent 然后把里面的冒号删掉 sendevent /dev/input/event5 0003 0057 00000001 sendevent /dev/input/event5 0001 0330 00000001 sendevent /dev/input/event5 0003 0053 00000437 sendevent /dev/input/event5 0003 0054 00000340 sendevent /dev/input/event5 0000 0000 00000000 sendevent /dev/input/event5 0003 0057 4294967295 sendevent /dev/input/event5 0001 0330 00000000 sendevent /dev/input/event5 0000 0000 00000000

这里转换方式可自行百度,也可以使用我提供的工具类

//把需要转换的内容通关 list.add()即可 private void change() { List list = new ArrayList(); list.add("00000001"); for (int i = 0; i int buqiNum = s.length() - afterStr.length(); for (int o = 0; o indexI = "0" + indexI;// 由于有时候在相同结果时会折叠log } Log.d("转换完成", indexI + "change: " + afterStr); } } 模拟点击事件:

在这里插入图片描述 跟我们通过触摸屏幕方式一样,打开了这个TestDemo; 这里需要注意的是:编辑命令和 粘贴在dos 中后要快速的敲一下回车键,不然会进入长恩状态,细心的同学应该看得出来我的我gif中第一次就是敲慢了,进入长恩状态了,第二次快速敲击回车就ok了。

方式4:Instrumentation

方式5:GestureDescription

这里直接跳转 另一篇文章 Android 模拟点击、滑动、返回

写后总结

各个方法的优缺点; 一千个人可以有一千种写法,同样的一件事情,可能做起来有很多种思路,就像这里提到的各种方法,可能用于不同的场景之中。

ps:这篇文章草稿箱中存了一年了,今天终于发出去了,还是略有遗憾,希望能够帮到有需要的小伙伴



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有