AutoX
AutoX copied to clipboard
所有基于RootAutomator的操作都无效,以及解决办法
Autox.js 版本:7.0.3 Autox.js 下载渠道:https://github.com/kkevsekk1/AutoX/releases Android 版本:Android 9 Android 机型:Ausu ROG 3(逍遥模拟器) Android 系统类别:逍遥模拟器 VSCODE 扩展版本 Auto.js-Autox.js-VSCodeExt (可选,如果是连接电脑的问题需要填): 问题描述:所有基于RootAutomator的操作都无效。但是反而Tap是有效的。我希望实现多点同时按下并移动的功能,swipe无法实现,只能使用RootAutomator。代码是直接从教程文档复制的,但是无效。 无效代码如下: var ra = new RootAutomator(); ra.press(212,280, 1); ra.touchDown(212,280, 1); ra.touchMove(293, 569, 1); sleep(1000); ra.exit(); 报错日志(可选):无任何报错信息,看起来是正常运行的。但实际上没有点击。 屏幕截图(可选): ——————————————————————————分割线———————————————————————————— 目前已经发现问题原因,问题在于auto js自带的sendevent获取了错误的输入设备。我自己写了封装了几个命令来解决这个问题,代码如下,大家可以直接使用。本人是初学萌新,如有错误还望大佬指点。
注意:首先需需要使用adb shell getevent去获取具体的input event id,然后替换掉所有的event id。在我的设备中,运行这个命令后,再用鼠标去点击模拟器屏幕,就会看到类似以下的提示信息。这就说明我的event id是6,每个设备的event id都不一样。需要获取后修改代码再运行。 /dev/input/event6: 0003 0035 00000127 /dev/input/event6: 0003 0036 00000194 /dev/input/event6: 0003 0030 00000002 /dev/input/event6: 0003 0039 00000000
function touchDown(x, y, id) {
//判断是否横屏,如果是横屏的话就换算坐标。
//注意,按键精灵默认截图是竖屏截图,如果是横屏的话,需要使用横屏截图时的坐标
var result = shell('dumpsys display | grep "mCurrentOrientation"', true);
if (result.result.includes("mCurrentOrientation=1")) {
var temp_x = x,
temp_y = y;
y = temp_x;
x = 720 - temp_y;
}
shell(`sendevent /dev/input/event6 3 47 ${id}`, true); // Select touch slot (id)
shell(`sendevent /dev/input/event6 3 57 ${id}`, true); // Format id
shell(`sendevent /dev/input/event6 3 53 ${x}`, true); // Format x
shell(`sendevent /dev/input/event6 3 54 ${y}`, true); // Format y
shell("sendevent /dev/input/event6 3 48 5", true); // Fixed value
shell("sendevent /dev/input/event6 3 58 50", true); // Fixed value
shell("sendevent /dev/input/event6 0 0 0", true); // End of event
}
function touchMove(x, y, id) {
//判断是否横屏,如果是横屏的话就换算坐标。
//注意,按键精灵默认截图是竖屏截图,如果是横屏的话,需要使用横屏截图时的坐标
var result = shell('dumpsys display | grep "mCurrentOrientation"', true);
if (result.result.includes("mCurrentOrientation=1")) {
var temp_x = x,
temp_y = y;
y = temp_x;
x = 720 - temp_y;
}
shell(`sendevent /dev/input/event6 3 47 ${id}`, true); // Select touch slot (id)
shell(`sendevent /dev/input/event6 3 57 ${id}`, true); // Format id
shell(`sendevent /dev/input/event6 3 53 ${x}`, true); // Format x
shell(`sendevent /dev/input/event6 3 54 ${y}`, true); // Format y
shell("sendevent /dev/input/event6 0 0 0", true); // End of event
}
function touchUp(id) {
shell(`sendevent /dev/input/event6 3 47 ${id}`, true); // Select touch slot (id)
shell(`sendevent /dev/input/event6 3 57 ${id}`, true); // Format id
shell("sendevent /dev/input/event6 3 57 -1", true);
shell("sendevent /dev/input/event6 0 0 0", true); // End of event
}
//使用例子
touchDown(20, 205, 0); // 按下手指0,按下的坐标是x=20,y=205的位置
touchMove(5, 230, 0);//将手指0移动到x=5,y=230的位置
sleep(1000);
touchDown(193, 572, 1); // 按下手指1,按下的坐标是x=193,y=572的位置
touchMove(351, 572, 1);//移动手指1
sleep(1000);
touchUp(0); //松开手指0
touchUp(1); //松开手指1
//最高支持的多点触控数量和设备有关