$act
- 更新时间:2025-08-20 18:23:19
手势动作
$act是一个高度封装的框架,其中集成了无障碍、$root、$szk触摸方案,优先级为:$root>$szk>无障碍
$act中所有click、press、move函数都会优先判断是否有ROOT权限,如果有,则使用$root进行点击;之后判断是否有Shizuku权限,如果有,则使用$szk进行手势操作;之后判断是否有无障碍权限,如果有,则使用无障碍执行。
hasPermit()
无障碍服务是否开启
- 返回 : {boolean} 是否开启
- 版本 : 1.0.0
//判断是否有权限
let hasPermit = $act.hasPermit();
$tip.show("是否获得无障碍",hasPermit);
getPermit()
获得无障碍服务
如果有Root权限:则使用Root权限为本应用授权永久无障碍
如果有Shizuku权限:则使用Shizuku权限为本应用授权永久无障碍
如果没有Root和Shizuku:则进行普通权限申请(非永久有效,受系统限制)
该函数是一个阻塞式函数,请勿放在ui线程当中操作,如果你想在ui状态下申请无障碍,建议使用$permit.wza()函数。
注意:永久无障碍其实是每次启动软件时,会自动自我授权无障碍,它不会立即获得无障碍权限,一般需要等待1-5秒的时间,不过这些操作都会在应用后台进行操作,因此用户并不会感知到这一操作,只会莫名其妙的觉得自己开启的无障碍权限从未关闭过一样。 在授权无障碍期间,你最好还是使用 $act.hasPermit() 判断无障碍权限是否可用。
- 返回 : {boolean} 是否获得
- 版本 : 1.0.0
$act.getPermit();//获得权限
click(x, y)
点击
- 参数 : x {int} 点击位置x
- 参数 : y {int} 点击位置y
- 版本 : 1.0.0
//点击手势
$act.click(500,800);
click(x, y, dur)
点击
- 参数 : x {int} 点击位置x
- 参数 : y {int} 点击位置y
- 参数 : dur {int} 点击后延迟
- 版本 : 1.0.0
//设置点击时常(长按效果)
sleep(1000);
$act.click(135,344,1500);
click(x, y, dur, delay)
点击
- 参数 : x {int} 点击位置x
- 参数 : y {int} 点击位置y
- 参数 : dur {int} 点击后延迟
- 参数 : delay {int} 点击前延迟
- 版本 : 1.0.0
//点击手势(长按)(延迟一秒)
$act.click(500,800,1500,100);
click(index)
点击
- 参数 : index {int[]} 点击位置
- 版本 : 1.0.0
//点击
$act.click([500,800]);
click(index, dur)
点击
- 参数 : index {int[]} 点击位置
- 参数 : dur {int} 点击后延迟
- 版本 : 1.0.0
//点击手势(长按)
$act.click([135,347],1500);
click(index, dur, delay)
点击
- 参数 : index {int[]} 点击位置
- 参数 : dur {int} 点击后延迟
- 参数 : delay {int} 点击前延迟
- 版本 : 1.0.0
//点击手势(长按)(延迟一秒)
$act.click([136,347],1500,100);
click(index)
点击
- 参数 : index {Point} 点击位置
- 版本 : 1.0.0
//点击手势(点击opencv返参)
let point = new org.opencv.core.Point(136,347);
$act.click(point);
click(index, dur)
点击
- 参数 : index {Point} 点击位置
- 参数 : dur {int} 点击后延迟
- 版本 : 1.0.0
//点击手势(长按)(延迟一秒)
let point = new org.opencv.core.Point(136,347);
$act.click(point,1500);
click(index, dur, delay)
点击
- 参数 : index {Point} 点击位置
- 参数 : dur {int} 点击后延迟
- 参数 : delay {int} 点击前延迟
- 版本 : 1.0.0
//点击手势(长按)(延迟一秒)
let point = new org.opencv.core.Point(136,347);
$act.click(point,1500,100);
click(node)
点击节点
当传入的节点不可点击时使用手势点击,如果手机root则优先使用root手势点击,其次就是使用Shizuku执行手势
- 参数 : node {Node} 点击位置
- 版本 : 1.0.0
click(node, useAct)
点击节点
当传入的节点不可点击时使用手势点击,如果手机root则优先使用root手势点击,其次就是使用Shizuku执行手势
- 参数 : node {Node} 点击位置
- 参数 : useAct {boolean} 是否使用无障碍点击
- 版本 : 1.0.0
press(node)
长按节点
如果设备获得了root,将优先使用root来执行手势,如果没有root,则使用无障碍来执行手势
- 参数 : node {Node} 节点
- 版本 : 1.0.0
press(node, useAct)
长按节点
如果设备获得了root,将优先使用root来执行手势,如果没有root,则使用无障碍来执行手势
- 参数 : node {Node} 节点
- 参数 : useAct {boolean} 是否使用act点击
- 版本 : 1.0.0
press(x, y)
长按
- 参数 : x {int} 长按位置x
- 参数 : y {int} 长按位置y
- 版本 : 1.0.0
//点击手势(长按)(延迟一秒)
$act.press(136,347);
press(x, y, dur)
长按
- 参数 : x {int} 长按位置x
- 参数 : y {int} 长按位置y
- 参数 : dur {int} 长按后延迟
- 版本 : 1.0.0
//点击手势(长按)(延迟一秒)
$act.press(136,347,1500);
press(x, y, dur, delay)
长按
- 参数 : x {int} 长按位置x
- 参数 : y {int} 长按位置y
- 参数 : dur {int} 长按后延迟
- 参数 : delay {int} 长按前延迟
- 版本 : 1.0.0
//点击手势(长按)(延迟一秒)
$act.press(136,347,1500,100);
move(x1, y1, x2, y2)
滑动
- 参数 : x1 {int} 起点x
- 参数 : y1 {int} 起点y
- 参数 : x2 {int} 终点x
- 参数 : y2 {int} 终点y
- 版本 : 1.0.0
//滑动手势
$act.move(500,0,500,800);
move(x1, y1, x2, y2, dur)
滑动
- 参数 : x1 {int} 起点x
- 参数 : y1 {int} 起点y
- 参数 : x2 {int} 终点x
- 参数 : y2 {int} 终点y
- 参数 : dur {int} 滑动延迟
- 版本 : 1.0.0
//滑动手势
$act.move(500,0,500,800,500);
move(x1, y1, x2, y2, dur, delay)
滑动
- 参数 : x1 {int} 起点x
- 参数 : y1 {int} 起点y
- 参数 : x2 {int} 终点x
- 参数 : y2 {int} 终点y
- 参数 : dur {int} 滑动时间
- 参数 : delay {int} 滑动延迟
- 版本 : 1.0.0
//滑动手势
$act.move(500,0,500,800,500.1000);
move(node, dir)
滑动节点
仅无障碍可用
- 参数 : node {Node} 节点
- 参数 : dir {String} 方向(up|down|left|right)
- 版本 : 1.0.0
move(node, x2, y2, dur)
滑动
- 参数 : node {Node} 节点
- 参数 : x2 {int} 终点x
- 参数 : y2 {int} 终点y
- 参数 : dur {int} 滑动时间
- 版本 : 1.0.0
//滑动手势
$act.move(node,800,500,1000);
move(node, x2, y2, dur, delay)
滑动
- 参数 : node {Node} 节点
- 参数 : x2 {int} 终点x
- 参数 : y2 {int} 终点y
- 参数 : dur {int} 滑动时间
- 参数 : delay {int} 滑动延迟
- 版本 : 1.0.0
//滑动手势
$act.move(node,800,500,1000,100);
gesture(gesture)
多指手势
- 参数 : gesture {int[]} 动作数据数组[起点x,起点y,终点x,终点y,开始时间,时长]
- 版本 : 1.0.0
// 手势模拟向下滑动
$act.gesture([500,0,500,800,0,500]);
gesture(gesture1, gesture2)
双指手势
- 参数 : gesture1 {int[]} 动作数据数组[起点x,起点y,终点x,终点y,开始时间,时长]
- 参数 : gesture2 {int[]} 动作数据数组[起点x,起点y,终点x,终点y,开始时间,时长]
- 版本 : 1.0.0
// 双指放大
let centerX = 500;
let centerY = 800;
$act.gesture(
[centerX,centerY,centerX-400,centerY-400,0,500],
[centerX,centerY,centerX+400,centerY+400,0,500]
);
gesture(gesture1, gesture2, gesture3)
三指动作
- 参数 : gesture1 {int[]} 动作数据数组
- 参数 : gesture2 {int[]} 动作数据数组
- 参数 : gesture3 {int[]} 动作数据数组
- 版本 : 1.0.0
//三指滑动动作
$act.gesture( [500,0,500,800,500,0] ,
[550,0,550,800,500,0] ,
[600,0,600,800,500,0]
);
gesture(gesture1, gesture2, gesture3, gesture4)
四指动作
- 参数 : gesture1 {int[]} 动作数据数组
- 参数 : gesture2 {int[]} 动作数据数组
- 参数 : gesture3 {int[]} 动作数据数组
- 版本 : 1.0.0
//四指滑动动作
$act.gesture( [500,0,500,800,500,0] ,
[550,0,550,800,500,0] ,
[600,0,600,800,500,0] ,
[650,0,650,800,500,0]
);
createPath(paths)
通过路径来构建path对象(默认持续时间为1秒)
- 参数 : paths {[][]} 动作数据数组
- 返回 : {Path}
- 版本 : 1.0.0
createPath(paths, dur)
通过路径来构建path对象
- 参数 : paths {[][]} 动作数据数组
- 参数 : dur {int} 持续
- 返回 : {AgPath} 路径对象
- 版本 : 1.0.0
createPath(paths, delay, dur)
通过路径来构建path对象
- 参数 : paths {[][]} 动作数据数组
- 参数 : delay {int} 开始时间
- 参数 : dur {int} 延迟
- 返回 : {Path}
- 版本 : 1.0.0
path(paths)
执行路径
- 参数 : paths {AgPath...} 多路径
- 版本 : 1.0.0
path(paths)
构建一个路径并且执行(默认时间为1秒)
- 参数 : paths {int[][]} 动作数据数组
- 版本 : 1.0.0
path(paths, dur)
构建一个路径并且执行
- 参数 : paths {int[][]} 动作数据数组
- 参数 : dur {int} 延迟
- 版本 : 1.0.0
path(paths, startTime, dur)
构建一个路径并且执行
- 参数 : paths {int[][]} 动作数据数组
- 参数 : startTime {int} 开始时间
- 参数 : dur {int} 延迟
- 版本 : 1.0.0
home()
点击home键
如果有root则优先使用root执行 如果有Shizuku则优先使用shizuku执行 如果有无障碍则优先使用无障碍执行 如果以上都没有,则无效果
- 版本 : 1.0.0
$act.home();
back()
返回
如果有root则优先使用root执行 如果有Shizuku则优先使用shizuku执行 如果有无障碍则优先使用无障碍执行 如果以上都没有,则无效果
- 版本 : 1.0.0
$act.back();
menu()
返回
如果有root则优先使用root执行 如果有Shizuku则优先使用shizuku执行 如果有无障碍则优先使用无障碍执行 如果以上都没有,则无效果
- 版本 : 1.0.0
$act.menu();
recent()
近期任务
如果有root则优先使用root执行 如果有Shizuku则优先使用shizuku执行 如果有无障碍则优先使用无障碍执行 如果以上都没有,则无效果
- 版本 : 1.0.0
$act.recent();
power()
长按电源
如果有root则优先使用root执行 如果有Shizuku则优先使用shizuku执行 如果有无障碍则优先使用无障碍执行 如果以上都没有,则无效果
- 版本 : 1.0.0
$act.power();
lock()
锁屏
如果有root则优先使用root执行 如果有Shizuku则优先使用shizuku执行 如果有无障碍则优先使用无障碍执行 如果以上都没有,则无效果
- 版本 : 1.0.0
$act.lock();
unlock()
唤醒屏幕
如果有root则优先使用root执行 如果有Shizuku则优先使用shizuku执行 如果有无障碍则优先使用无障碍执行 如果以上都没有,则无效果
- 版本 : 1.0.0
$act.unlock();
splitScreen()
分屏
- 版本 : 1.0.0
$act.splitScreen();
settings()
设置
- 版本 : 1.0.0
$act.settings();
notifications()
通知
- 版本 : 1.0.0
$act.notifications();
screenshot()
截屏
唤起手机自带的截屏操作
- 版本 : 1.0.0
$act.screenshot();
input(text)
粘贴到文本框
如果有root则优先使用root执行 如果有Shizuku则优先使用shizuku执行 如果有无障碍则优先使用无障碍执行 如果以上都没有,则无效果
- 参数 : text {String} 需要输入的文字
- 版本 : 1.0.0
$act.input("我是要粘贴的内容");
input(node, text)
粘贴到文本框
无障碍专属的函数
- 参数 : node {AccessibilityNodeInfo} 指定节点
- 参数 : text {String} 需要输入的文字
- 版本 : 1.0.0
$act.input("我是要粘贴的内容");
input(node, text)
粘贴到文本框
无障碍专属的函数
- 参数 : node {Node} 指定节点
- 参数 : text {String} 需要输入的文字
- 版本 : 1.0.0
$act.input("我是要粘贴的内容");
activity()
获得activity类名
- 返回 : activity类名
- 版本 : 1.0.0
let name = $act.activity();
log("当前类名:"+name);
activity(callback)
设置窗口变化监听
- 参数 : callback {(name)=>{}} 回调
- 版本 : 1.0.0
//设置监听:
$act.activity((name)=> {
log("当前界面==>"+name);
});
selector()
创建一个ui选择器
- 返回 : {UiSelector} UI选择器
- 版本 : 1.0.0
setDevDensity(density)
设置开发环境的密度
注意:此函数用于全分辨率适配,需要配合 $act.setAdapt(true) 来使用。
- 参数 : density {float} 密度因子
- 版本 : 1.0.0
setAdapt(usable)
是否启动分辨率适配
我将根据屏幕密度来等比例计算出坐标的位置。
- 参数 : usable {boolean} 启用分辨率适配
- 版本 : 1.0.0
isOnlyAcc()
判断$act是否只使用无障碍服务
- 返回 : {boolean} 是否只使用无障碍服务
setOnlyAcc(onlyAcc)
设置$act只使用无障碍服务
在本应用中$act是一个高度封装的框架,很多动作都会优先判断是否有$root和$szk,如果有root则优先使用root来执行手势,如果有szk(Shizuku)则优先使用Shizuku执行手势,如果$touch可用,则使用$touch执行手势。
正因为$act是一个高度封装的框架,导致运行速度会比较慢,毕竟内部的执行逻辑稍微复杂一些。
然而有时候我们不需要用到$root、$szk、$touch来执行操作,故设计了这个函数,用来配置$act是否只使用无障碍来进行操作,以加快运行速度。
- 参数 : onlyAcc {boolean} 是否只使用无障碍进行操作
- 版本 : 1.4.3
setJitter(jitter)
设置抖动值
$act允许用户配置抖动值(默认是0),以实现随机点击,而抖动值其实就是随机值的范围,例如:点击坐标 X=10,抖动值为5时,实际上点击的位置将可能是 X=5到15之间。 假设:点击 X=5,抖动值设置为10,则实际上 X抖动之后在0-15之间(而不是-5到15之间),我要告诉你:抖动之后的坐标不会小于0。
不过我需要提醒:我并不会判断你的坐标在抖动之后是否处于屏幕的外部,因此,你需要合理的设置抖动值。
- 参数 : jitter {int} 抖动值
- 版本 : 1.4.3
enableRoot(enableRoot)
启用$root
$act是一个高度封装的框架,很多动作都会判断是否有$root,如果有$root则优先使用$root来执行手势。
默认情况下,$root是启用的,你可以通过此函数来禁用$root。
- 参数 : enableRoot {boolean} 是否启用$root
- 版本 : 1.4.7
isEnableRoot()
判断$root是否启用
- 返回 : {boolean} 是否启用$root
- 版本 : 1.4.7
enableSzk(enableSzk)
启用$szk
$act是一个高度封装的框架,很多动作都会判断是否有$szk,如果有$szk则优先使用$szk来执行手势。
默认情况下,$szk是启用的,你可以通过此函数来禁用$szk。
- 参数 : enableSzk {boolean} 是否启用$szk
isEnableSzk()
判断$szk是否启用
- 返回 : {boolean} 是否启用$szk
- 版本 : 1.4.7