开发者模式控制手机
哔哩哔哩:https://www.bilibili.com/video/BV1TTfWYYEJk/
1、什么是ADB脚本
ADB脚本是指使用ADB(Android Debug Bridge)工具编写的脚本,用于与Android设备进行交互。
ADB是一个命令行工具,允许开发者与Android设备(如手机、平板等)进行调试和管理。
通过ADB,用户可以执行命令来安装和卸载应用、访问设备的文件系统、运行 shell 命令、获取设备信息等。
ADB脚本通常以批处理文件(例如在Windows上使用 .bat
文件)或Shell脚本(在Linux或MacOS上使用 .sh
文件)的形式存在,脚本中包含一系列ADB命令,可以自动化执行某些任务。
2、ADB环境搭建
- adb (scrcpy):https://www.litikj.com/12.html
- 手机开启开发者模式
- 能够正常投屏
3、使用ADB进行简单脚本开发
// 启动adb服务
adb start-server
// 关闭adb服务
adb kill-server
// 获取设备
adb devices
// 点击坐标
adb shell input tap x y
// 滑动坐标
adb shell input swipe x1 y1 x2 y2 time
// 输入文本
adb shell input text 英文文本
4、易语言调用ADB功能
运行 (“cmd /c adb start-server”, 假, 1)
cmd /c 命令行 :执行完毕后关闭窗口
cmd /k 命令行 :执行完毕后不关闭窗口
5、封装点击坐标函数
// 点击坐标
adb shell input tap x y
// 长按坐标
adb shell input swipe x y x y time
6、封装滑动操作函数
// 滑动坐标
adb shell input swipe x1 y1 x2 y2 time
7、模拟按键操作
keycode | 含义 |
---|---|
3 | HOME 键 |
4 | 返回键 |
5 | 打开拨号应用 |
6 | 挂断电话 |
24 | 增加音量 |
25 | 降低音量 |
26 | 电源键 |
27 | 拍照(需要在相机应用里) |
64 | 打开浏览器 |
82 | 菜单键 |
85 | 播放/暂停 |
86 | 停止播放 |
87 | 播放下一首 |
88 | 播放上一首 |
122 | 移动光标到行首或列表顶部 |
123 | 移动光标到行末或列表底部 |
126 | 恢复播放 |
127 | 暂停播放 |
164 | 静音 |
176 | 打开系统设置 |
187 | 切换应用 |
207 | 打开联系人 |
208 | 打开日历 |
209 | 打开音乐 |
210 | 打开计算器 |
220 | 降低屏幕亮度 |
221 | 提高屏幕亮度 |
223 | 系统休眠 |
224 | 点亮屏幕 |
231 | 打开语音助手 |
276 | 如果没有wakelock 则让系统休眠 |
adb shell input keyevent 键值
8、ADB基于控件的操作的原理
adb shell uiautomator dump /sdcard/ui.xml
9、获取控件文件
1、获取ui.xml
adb shell uiautomator dump /sdcard/ui.xml
2、拉取ui.xml到电脑
adb pull /sdcard/ui.xml <电脑路径>
10、读取解析XML
编码_utf8到gb2312 (到文本 (读入文件("ui.xml")))
正则表达式
<node index="(.*?)" text="(.*?)" resource-id="(.*?)" class="(.*?)" package="(.*?)" content-desc="(.*?)" checkable="(.*?)" checked="(.*?)" clickable="(.*?)" enabled="(.*?)" focusable="(.*?)" focused="(.*?)" scrollable="(.*?)" long-clickable="(.*?)" password="(.*?)" selected="(.*?)" bounds="(.*?)"
11、创建控件对象数据类型
.版本 2
.数据类型 控件对象, 公开
.成员 id, 文本型
.成员 text, 文本型
.成员 desc, 文本型
.成员 class, 文本型
.成员 clickable, 文本型
.成员 bounds, 文本型
12、查找控件
.版本 2
.支持库 spec
.子程序 查找控件, 整数型
.参数 控件数组, 控件对象, 数组
.参数 选择器, 文本型, , id text desc class clickable
.参数 值, 文本型
.参数 返回控件, 控件对象
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (控件数组), i)
调试输出 (控件数组 [i].text)
.判断开始 (选择器 = “id” 且 控件数组 [i].id = 值)
返回控件 = 控件数组 [i]
返回 (1)
.判断 (选择器 = “text” 且 控件数组 [i].text = 值)
返回控件 = 控件数组 [i]
返回 (1)
.判断 (选择器 = “desc” 且 控件数组 [i].desc = 值)
返回控件 = 控件数组 [i]
返回 (1)
.判断 (选择器 = “class” 且 控件数组 [i].class = 值)
返回控件 = 控件数组 [i]
返回 (1)
.判断 (选择器 = “clickable” 且 控件数组 [i].clickable = 值)
返回控件 = 控件数组 [i]
返回 (1)
.默认
.判断结束
.计次循环尾 ()
返回 (0)
13、获取控件坐标
[346,648][539,689]
正则
局_正则.创建 (“\[(.*?),(.*?)\]\[(.*?),(.*?)\]”, bounds)
局_left = 局_正则.取子匹配文本 (1, 1)
局_top = 局_正则.取子匹配文本 (1, 2)
局_right = 局_正则.取子匹配文本 (1, 3)
局_bottom = 局_正则.取子匹配文本 (1, 4)
14、查找点击控件坐标
.版本 2
.支持库 spec
获取xml ()
拉取xml ()
解析xml (控件数组)
.如果真 (查找控件 (控件数组, “text”, “微信”, 指定控件) = 1)
局_控件坐标 = 获取坐标 (指定控件.bounds)
调试输出 (局_控件坐标.x)
调试输出 (局_控件坐标.y)
15、获取adb执行结果
// 阻塞函数
系统_取DOS执行结果()
16、查找控件并点击
17、自动开启无障碍服务
.版本 2
查找点击 (“text”, “设置”, , -50)
程序_延时 (3000)
查找点击 (“text”, “更多设置”)
查找点击 (“text”, “无障碍”)
查找点击 (“text”, “已下载的应用”)
查找点击 (“text”, “Auto.js”)
查找点击 (“text”, “使用Auto.js”)
查找点击 (“text”, “我已知晓可能存在的风险,并自愿承担可能导致的后果”)
程序_延时 (10000)
查找点击 (“text”, “确定”)