 | |  |  | 安卓HID贝塞尔曲线手势操作示例
- /*
- 🍎===============================================================
- 🍎 安卓HID贝塞尔曲线手势操作示例
- 🍎===============================================================
- 🍎 本文件演示如何使用HID实现贝塞尔曲线路径的手势操作
- 🍎 可用于模拟人工滑动轨迹,绕过轨迹检测等场景
- 🍎===============================================================
- */
- // 📌示例1:基础贝塞尔曲线手势演示
- function basicBezierGestureDemo() {
- print.log("=== 基础贝塞尔曲线手势演示 ===");
-
- // 检查HID是否开启
- if (!hid.isOn()) {
- print.log("HID未开启,请先开启HID功能");
- return;
- }
-
- // 获取设备信息
- var deviceName = hid.getName();
- var deviceID = hid.getDeviceID();
- print.log("HID设备名称:", deviceName);
- print.log("设备型号:", deviceID);
-
- // 执行基础贝塞尔曲线手势
- print.log("执行基础贝塞尔曲线手势...");
- runCustomGesture(161, 1434, 720, 900);
- sleep.millisecond(1000);
- }
- // 📌示例2:多轨迹贝塞尔曲线手势演示
- function multiBezierGestureDemo() {
- print.log("=== 多轨迹贝塞尔曲线手势演示 ===");
-
- // 检查HID是否开启
- if (!hid.isOn()) {
- print.log("HID未开启,请先开启HID功能");
- return;
- }
-
- // 执行多个不同的贝塞尔曲线手势
- print.log("执行多个贝塞尔曲线手势...");
-
- // 手势1: 从(161, 1434)到(720, 900)
- runCustomGesture(161, 1434, 720, 900);
- sleep.millisecond(1000);
-
- // 手势2: 从(100, 1000)到(800, 500)
- runCustomGesture(100, 1000, 800, 500);
- sleep.millisecond(1000);
-
- // 手势3: 从(300, 1200)到(600, 700)
- runCustomGesture(300, 1200, 600, 700);
- sleep.millisecond(1000);
-
- print.log("多轨迹贝塞尔曲线手势演示完成");
- }
- /**
- * 生成指定范围内的随机数
- * @param a {number} 最小值
- * @param b {number} 最大值
- * @return {number} 随机数
- */
- function random(a, b) {
- return rand.randNumber(a, b);
- }
- /**
- * 贝塞尔曲线手势执行函数 - 基于HID实现
- * @param time_ms {number} 执行时间 ms 例如 3000
- * @param t {number} 间隔系数 0-1 间, 越小线条越圆润,计算量越大, 例如 0.005
- * @param pt {number[][]} 控制点坐标的二维数组 例如 [[137,169],[140,283]]
- */
- function bezierHID(time_ms, t, pt) {
- print.log("开始执行贝塞尔曲线手势,预计时间: " + time_ms + "ms");
-
- // 检查参数
- if (!pt || pt.length < 2) {
- print.log("错误:控制点数量不足,至少需要2个点");
- return;
- }
-
- // 检查HID是否开启
- if (!hid.isOn()) {
- print.log("错误:HID未开启,请先开启HID功能");
- return;
- }
-
- // 计算总步数
- var fps = 1 / t;
- var stepTime = time_ms / fps; // 每步的时间间隔
- print.log("总步数: " + fps + ", 每步时间: " + stepTime + "ms");
-
- // 计算第一个点并按下
- var firstPoint = calculateBezier(0, JSON.parse(JSON.stringify(pt)));
- print.log("起始点: [" + firstPoint[0] + ", " + firstPoint[1] + "]");
- hid.touchDown(0, firstPoint[0], firstPoint[1]);
- sleep.millisecond(stepTime);
-
- // 移动到中间各点
- for (var i = 1; i < fps; i++) {
- var copyArr = JSON.parse(JSON.stringify(pt)); // 拷贝一份 js的数组是引用传递
- var xy = calculateBezier(i * t, copyArr);
- hid.touchMove(0, xy[0], xy[1]);
- sleep.millisecond(stepTime);
- }
-
- // 计算最后一个点并抬起
- var lastPoint = calculateBezier(1, JSON.parse(JSON.stringify(pt)));
- print.log("结束点: [" + lastPoint[0] + ", " + lastPoint[1] + "]");
- hid.touchMove(0, lastPoint[0], lastPoint[1]);
- sleep.millisecond(stepTime);
- hid.touchUp(0);
-
- print.log("贝塞尔曲线手势执行完成");
- }
- /**
- * 计算贝塞尔曲线上的点
- * @param t {number} 0 ~ 1的时间参数
- * @param point2Fs {number[][]} 贝塞尔点集合
- * @return {number[]} 返回当前时间下的贝塞尔点
- */
- function calculateBezier(t, point2Fs) {
- var len = point2Fs.length;
- for (var i = len - 1; i > 0; i--) {
- for (var j = 0; j < i; j++) {
- point2Fs[j][0] = point2Fs[j][0] + (point2Fs[j + 1][0] - point2Fs[j][0]) * t;
- point2Fs[j][1] = point2Fs[j][1] + (point2Fs[j + 1][1] - point2Fs[j][1]) * t;
- }
- }
- return [parseInt(point2Fs[0][0]), parseInt(point2Fs[0][1])];
- }
- /**
- * 示例:自定义贝塞尔曲线手势
- * @param startX {number} 起点X坐标
- * @param startY {number} 起点Y坐标
- * @param endX {number} 终点X坐标
- * @param endY {number} 终点Y坐标
- */
- function runCustomGesture(startX, startY, endX, endY) {
- // 生成一个随机的控制点
- var ctrlX = random(Math.min(startX, endX), Math.max(startX, endX));
- var ctrlY = random(Math.min(startY, endY), Math.max(startY, endY));
-
- // 构造控制点数组 (4个点的贝塞尔曲线)
- var points = [
- [startX, startY],
- [ctrlX, ctrlY],
- [ctrlX, ctrlY],
- [endX, endY]
- ];
-
- print.log("执行自定义手势: 从(" + startX + "," + startY + ")到(" + endX + "," + endY + ")");
- bezierHID(2000, 0.01, points);
- }
- // 📌工具函数:安全执行贝塞尔曲线手势
- function safeBezierGesture(startX, startY, endX, endY, retries) {
- if (typeof retries === 'undefined') retries = 3;
-
- for (var i = 0; i < retries; i++) {
- try {
- runCustomGesture(startX, startY, endX, endY);
- print.log("贝塞尔曲线手势执行成功");
- return true;
- } catch (error) {
- print.log("手势执行失败,重试第 " + (i + 1) + " 次:" + error);
- sleep.millisecond(500);
- }
- }
- print.log("贝塞尔曲线手势最终执行失败");
- return false;
- }
- // 📌主函数:运行所有演示
- function runAllBezierGestureDemos() {
- print.log("\n🍎===========================================");
- print.log("🍎 HID 贝塞尔曲线手势演示开始");
- print.log("🍎===========================================");
-
- // 运行各个演示
- basicBezierGestureDemo();
- sleep.millisecond(2000);
-
- multiBezierGestureDemo();
- sleep.millisecond(2000);
-
- print.log("\n🍎===========================================");
- print.log("🍎 HID 贝塞尔曲线手势演示结束");
- print.log("🍎===========================================");
- }
- // 📌快速测试函数
- function quickBezierTest() {
- print.log("=== HID 贝塞尔曲线手势快速测试 ===");
-
- if (!hid.isOn()) {
- print.log("❌ HID未开启");
- return;
- }
-
- print.log("✅ HID已开启");
- print.log("📱 设备:", hid.getDeviceID());
- print.log("🏷️ 名称:", hid.getName());
-
- // 简单手势测试
- runCustomGesture(161, 1434, 720, 900);
- sleep.millisecond(1000);
- print.log("✅ 贝塞尔曲线手势测试完成");
-
- print.log("🎉 快速测试全部完成");
- }
- /*
- 🍎使用方法:
- 1. 确保HID设备已正确连接并开启
- 2. 根据需要调用相应的演示函数:
- - basicBezierGestureDemo() // 基础贝塞尔曲线手势演示
- - multiBezierGestureDemo() // 多轨迹贝塞尔曲线手势演示
- - runCustomGesture() // 自定义贝塞尔曲线手势
- - safeBezierGesture() // 安全贝塞尔曲线手势
- - runAllBezierGestureDemos() // 运行全部演示
- - quickBezierTest() // 快速测试
- 🍎注意事项:
- 1. 运行前请确保目标设备屏幕解锁
- 2. 坐标和时间延迟可根据实际情况调整
- 3. 建议在测试环境下运行,避免误操作
- 🍎技术支持:
- QQ群:711841924 (群一)
- QQ群:528816639 (苹果内测群)
- */
- // 自动启动快速测试
- print.log("🍎 安卓HID贝塞尔曲线手势示例自动运行开始...");
- sleep.millisecond(1000);
- // 快速测试
- quickBezierTest();
- sleep.millisecond(2000);
- print.log("🍎 贝塞尔曲线手势示例运行完成!");
复制代码
| |  | |  |
|