自己动手开发安卓版按键精灵

news/2024/11/29 20:31:09/

update:2022.04.30

时隔多年,以前觉得实现起来很麻烦的功能,趁着五一假期,花了几个小时简单实现了一下,代码链接:https://github.com/ITAnt/AutoTask/tree/master

有编译好的apk,直接戳这里下载

第一步. 获取(并记录)点击的位置

1.找出我们的安卓设备名称
adb shell
getevent -p
查看哪个设备包含event 体系里 宽(0035)和高(0036),那么这个设备就是我们的安卓手机,例如这里的设备名称为/dev/input/event8
这里写图片描述
计算比例:
rateW = 720(手机屏幕的宽) / 719(event里0035的max) ≈ 1
rateH = 1280(手机屏幕的高) / 1279(event里0036的max) ≈ 1

2.然后不断监听我们的设备被点击了哪些位置:
getevent /dev/input/event8 | grep -e “0035” -e “0036”
这里写图片描述
把0035和0036后面的位置数据从16进制转化为10进制
width = 0x14e = 11616 + 416 + 14 = 334
height = 0x2c1 = 2
1616 + 1216 + 1 = 705
这是在event体系里的位置,将其转化为屏幕位置
screenW = widthrateW = 3341 = 334
screenH = heightrateH = 7051 = 705
在这里,保存点击的位置及顺序。
第二步. 模拟发送事件

getevent/sendevent是android系统下的一个工具,可以模拟多种按键和触屏操作,产生的是raw event,raw event经过event hub处理产生最终的gesture事件。getevent用于获取当前系统input设备的一些参数和实时事件的数据;sendevent用于发送input事件,这俩命令的作用就是相当于解放了手,可以通过命令直接调用Linux底层来控制手机,工具的源码位于Android SDK的system/core/toolbox下(sendevent.c getevent.c)。

发送键盘事件
用法说明:
adb shell input keyevent “value”
input text
input keyevent
input tap
input swipe
如上,input后可以跟很多参数, text相当于输入内容,keyevent相当于手机物理或是屏幕按键,tap相当于touch事件,swipe相当于滑动~~是不是很赞?先列举 input keyevent 几个比较常用的code值:
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 菜单

附:input keyevent所对应全部key值:

KeyCode Keyevent Value

KEYCODE_MENU 1
KEYCODE_SOFT_RIGHT 2
KEYCODE_HOME 3
KEYCODE_BACK 4
KEYCODE_CALL 5
KEYCODE_ENDCALL 6
KEYCODE_0 7
KEYCODE_1 8
KEYCODE_2 9
KEYCODE_3 10
KEYCODE_4 11
KEYCODE_5 12
KEYCODE_6 13
KEYCODE_7 14
KEYCODE_8 15
KEYCODE_9 16
KEYCODE_STAR 17
KEYCODE_POUND 18
KEYCODE_DPAD_UP 19
KEYCODE_DPAD_DOWN 20
KEYCODE_DPAD_LEFT 21
KEYCODE_DPAD_RIGHT 22
KEYCODE_DPAD_CENTER 23
KEYCODE_VOLUME_UP 24
KEYCODE_VOLUME_DOWN 25
KEYCODE_POWER 26
KEYCODE_CAMERA 27
KEYCODE_CLEAR 28
KEYCODE_A 29
KEYCODE_B 30
KEYCODE_C 31
KEYCODE_D 32
KEYCODE_E 33
KEYCODE_F 34
KEYCODE_G 35
KEYCODE_H 36
KEYCODE_I 37
KEYCODE_J 38
KEYCODE_K 39
KEYCODE_L 40
KEYCODE_M 41
KEYCODE_N 42
KEYCODE_O 43
KEYCODE_P 44
KEYCODE_Q 45
KEYCODE_R 46
KEYCODE_S 47
KEYCODE_T 48
KEYCODE_U 49
KEYCODE_V 50
KEYCODE_W 51
KEYCODE_X 52
KEYCODE_Y 53
KEYCODE_Z 54
KEYCODE_COMMA 55
KEYCODE_PERIOD 56
KEYCODE_ALT_LEFT 57
KEYCODE_ALT_RIGHT 58
KEYCODE_SHIFT_LEFT 59
KEYCODE_SHIFT_RIGHT 60
KEYCODE_TAB 61
KEYCODE_SPACE 62
KEYCODE_SYM 63
KEYCODE_EXPLORER 64
KEYCODE_ENVELOPE 65
KEYCODE_ENTER 66
KEYCODE_DEL 67
KEYCODE_GRAVE 68
KEYCODE_MINUS 69
KEYCODE_EQUALS 70
KEYCODE_LEFT_BRACKET 71
KEYCODE_RIGHT_BRACKET 72
KEYCODE_BACKSLASH 73
KEYCODE_SEMICOLON 74
KEYCODE_APOSTROPHE 75
KEYCODE_SLASH 76
KEYCODE_AT 77
KEYCODE_NUM 78
KEYCODE_HEADSETHOOK 79
KEYCODE_FOCUS 80
KEYCODE_PLUS 81
KEYCODE_MENU 82
KEYCODE_NOTIFICATION 83
KEYCODE_SEARCH 84
TAG_LAST_KEYCODE 85

整个思路是这样的:
录制过程:
点击“开始录制点击脚本”-- 选择应用 – 打开应用(记住所打开的应用的包名) – 按音量“加”开始监听,申请屏幕长亮,记录点击的坐标及顺序 – 按音量“加”停止监听,保存脚本,释放屏幕长亮。
运行过程:
点击某一个脚本 – 设置循环次数 – 设置每一次点击的时间间隔 – 设置每一次循环的时间间隔 – 打开目标应用 – 点击音量“减”开始运行 – 申请屏幕长亮 – 点击音量“减”停止运行,释放屏幕长亮。

供参考的文章:
http://blog.csdn.net/liu_zhen_wei/article/details/12559277
http://blog.csdn.net/hellowxwworld/article/details/10733567
https://zhidao.baidu.com/question/402614310.html
http://blog.csdn.net/mad1989/article/details/38109689


http://www.ppmy.cn/news/661090.html

相关文章

微信小程序canvas层级太高,与其他非原生组件层级冲突

官网已经提出新版本以支持同层渲染,但是实际项目中层级还是冲突的。 最后在文档中找到这样一段话,用真机打开,层级就正常了 。所以建议大家,多使用真机调试去测试!!!!

Vue状态管理工具pinia的简单使用

Vue状态管理工具pinia的简单使用 1. 介绍 Pinia 是一个 Vue 状态管理工具,它是 Vue 3 官方推荐的状态管理库之一。Pinia 的目标是提供一个简单、轻量级的状态管理解决方案,它基于 Vue 3 的新响应式 API 和新的组合式 API 构建,使用起来非常…

来点美图

很抱歉,我无法提供图片。但是我可以用中文为您回答问题。如果您有任何问题,请随时告诉我。

深度学习AI美颜系列---美图秀秀AI美图之跨次元相机特效

深度学习AI美颜系列---美图秀秀AI美图之跨次元相机特效算法解析 最近在做类似美图秀秀AI美图里的跨次元相机特效算法,美图跨次元相机特效举例如下: 原图 美…

java入门之 美图相机(原图、灰度、二值化、马赛克、融合、轮廓获取)

编写美图相机时&#xff0c;我们首先需要了解图片再计算机中的存储形式&#xff0c;详情可见http://t.csdn.cn/MgOfO 目录 <1>创建显示图片的主界面 1.添加窗体&#xff0c;用数列添加按钮&#xff0c;设置窗体可视化&#xff0c;添加主函数 2.先创建对象&#xff0c;…

使用cat EOF命令插入变量

有的时候在容器内修改配置文件比较麻烦&#xff0c;没有vi命令无法编辑文件 记录一下在没有vi的情况下常用的命令 例1&#xff1a; 往nginx服务配置文件追加配置&#xff0c;$host是变量的形式&#xff0c;只需要把第一个EOF加引号即不会被转义 cat << EOF >> d…

二层交换机有IP地址吗?

二层交换机本身不具有IP地址。它工作在数据链路层,主要进行MAC地址学习与转发。 但是,二层交换机上会存在一些有IP地址的网络设备,主要包括: 管理接口:二层交换机上会有一个用于管理交换机的接口,通常连接交换机的Console口或AUX口,该接口配置有IP地址,用于通过网络管理交换机…

《九》TypeScript 中的内置工具

TypeScript 内置了很多类型工具&#xff0c;来辅助进行类型转换。 Partial<Type>&#xff1a; Partial<Type>&#xff1a;用于构造一个所有属性都为可选属性的类型。 interface IPerson {name: stringage: number }// personOptional 类型的所有属性都是可选的 …