B2BÍøÂçÈí¼þ

 ÕÒ»ØÃÜÂë
 Á¢¼´×¢²á ÉóºËÍøÕ¾ºÅ:QQ:896757558
ËÑË÷
²é¿´: 7|»Ø¸´: 0
´òÓ¡ ÉÏÒ»Ö÷Ìâ ÏÂÒ»Ö÷Ìâ

´¥ÃþÊÖÊÆÊ¶±ðÐü¸¡»­°å×Ô¶¯Ö´ÐÐÖúÊÖ

[¸´ÖÆÁ´½Ó]

1179

Ö÷Ìâ

1184

Ìû×Ó

7993

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

»ý·Ö
7993
Ìø×ªµ½Ö¸¶¨Â¥²ã
Â¥Ö÷

´¥ÃþÊÖÊÆÊ¶±ðÐü¸¡»­°å×Ô¶¯Ö´ÐÐÖúÊÖ


´¥ÃþÊÖÊÆÊ¶±ðÐü¸¡»­°å×Ô¶¯Ö´ÐÐÖúÊÖ B2BÍøÂçÈí¼þ

´¥ÃþÊÖÊÆÊ¶±ðÐü¸¡»­°å×Ô¶¯Ö´ÐÐÖúÊÖ B2BÍøÂçÈí¼þ

´¥ÃþÊÖÊÆÊ¶±ðÐü¸¡»­°å×Ô¶¯Ö´ÐÐÖúÊÖ B2BÍøÂçÈí¼þ


  1. /**
  2. * ¨X¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨[
  3. * ¨U   AIWROK ´¥ÃþÊÖÊÆÊ¶±ð + Ðü¸¡»­°å + ×Ô¶¯Ö´ÐÐÖúÊÖ            ¨U
  4. * ¨U                                                          ¨U
  5. * ¨U   ¹¦ÄÜ£º                                                  ¨U
  6. * ¨U     ¢Ù ¼àÌýÕæÊµÆÁÄ»´¥Ãþʼþ (root + getevent)             ¨U
  7. * ¨U     ¢Ú ÔÚ floatUI Ðü¸¡´°ÉÏʵʱ»­³öÊÖÖ¸¹ì¼£                 ¨U
  8. * ¨U     ¢Û ×Ô¶¯Ê¶±ðÊÖÊÆ£ºÉÏ»¬/Ï»¬/×ó»¬/ÓÒ»¬/Ë«»÷/³¤°´/V×Ö      ¨U
  9. * ¨U     ¢Ü ÊÖÊÆ´¥·¢×Ô¶¯»¯¶¯×÷£º                                ¨U
  10. * ¨U          ÓÒ»¬ ¡ú »Ø×ÀÃæ                                     ¨U
  11. * ¨U          ×ó»¬ ¡ú ½ØÍ¼±£´æµ½Ïà²á                              ¨U
  12. * ¨U          ÉÏ»¬ ¡ú ÒôÁ¿+                                      ¨U
  13. * ¨U          Ï»¬ ¡ú ÒôÁ¿-                                      ¨U
  14. * ¨U          Ë«»÷ ¡ú ´ò¿ªÉèÖà                                   ¨U
  15. * ¨U          ³¤°´ ¡ú Æô¶¯/Í£Ö¹½Å±¾                               ¨U
  16. * ¨U          V×Ö  ¡ú ´ò¿ªÎ¢ÐÅ                                    ¨U
  17. * ¨U                                                          ¨U
  18. * ¨U   ÒÀÀµ£ºroot ȨÏÞ£¨À×µç/Ò¹Éñ/åÐÒ£/À¶µþ ĬÈÏ×Ô´ø root£©     ¨U
  19. * ¨U   ÒýÇæ£ºRhino ES5                                         ¨U
  20. * ¨^¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨a
  21. */

  22. // ==============================================================
  23. // µÚÒ»²¿·Ö£ºobserveTouch ºËÐÄ£¨´ÓÔ­Îļþ¾«¼ò²¢ÔöÇ¿£©
  24. // ==============================================================

  25. function shellExec(cmd) {
  26.     if (typeof agent !== "undefined" && typeof agent.shell === "function") {
  27.         try {
  28.             var ret = agent.shell(cmd);
  29.             return ret === null ? "" : ret.toString();
  30.         } catch (e) {}
  31.     }
  32.     try {
  33.         var proc = java.lang.Runtime.getRuntime().exec(cmd);
  34.         var reader = new java.io.BufferedReader(
  35.             new java.io.InputStreamReader(proc.getInputStream())
  36.         );
  37.         var sb = new java.lang.StringBuilder();
  38.         var line;
  39.         while ((line = reader.readLine()) !== null) {
  40.             sb.append(line).append("\n");
  41.         }
  42.         proc.waitFor();
  43.         return sb.toString().trim();
  44.     } catch (e) { return ""; }
  45. }

  46. function findTouchEventDevice() {
  47.     var allDev = shellExec("getevent -lp");
  48.     var re = /add device \d+: \/dev\/input\/(event\d+)\s+name:\s*"([^"]*)"([\s\S]*?)(?=add device|$)/g;
  49.     var m;
  50.     while ((m = re.exec(allDev)) !== null) {
  51.         var evtName = m[1];
  52.         var devName = m[2].toLowerCase();
  53.         var eventsInfo = m[3];

  54.         if (devName.indexOf("touch") >= 0 || devName.indexOf("tsp") >= 0 ||
  55.             devName.indexOf("goodix") >= 0 || devName.indexOf("synaptics") >= 0) {
  56.             return evtName;
  57.         }
  58.         if (eventsInfo.indexOf("ABS_MT_POSITION_X") >= 0 &&
  59.             eventsInfo.indexOf("ABS_MT_POSITION_Y") >= 0) {
  60.             return evtName;
  61.         }
  62.         if (eventsInfo.indexOf("BTN_TOUCH") >= 0 &&
  63.             eventsInfo.indexOf("ABS_X") >= 0 && eventsInfo.indexOf("ABS_Y") >= 0) {
  64.             return evtName;
  65.         }
  66.         if ((devName.indexOf("hid") >= 0 || devName.indexOf("mouse") >= 0) &&
  67.             eventsInfo.indexOf("BTN_TOUCH") >= 0) {
  68.             return evtName;
  69.         }
  70.     }
  71.     return null;
  72. }

  73. function TouchObserver(eventDevice) {
  74.     this.device = eventDevice;
  75.     this.running = false;
  76.     this.listeners = { down: [], move: [], up: [] };
  77.     this.currentX = -1;
  78.     this.currentY = -1;
  79.     this.pointerDown = false;
  80.     this._downFired = false;
  81. }

  82. TouchObserver.prototype.onDown = function (fn) { this.listeners.down.push(fn); };
  83. TouchObserver.prototype.onMove = function (fn) { this.listeners.move.push(fn); };
  84. TouchObserver.prototype.onUp   = function (fn) { this.listeners.up.push(fn);   };

  85. TouchObserver.prototype._emit = function (type, ev) {
  86.     var arr = this.listeners[type];
  87.     for (var i = 0; i < arr.length; i++) {
  88.         try { arr[i](ev); } catch (e) {}
  89.     }
  90. };

  91. TouchObserver.prototype.start = function () {
  92.     if (this.running) return;
  93.     this.running = true;
  94.     var target = this;

  95.     var t = new thread();
  96.     t.runJsCode(function () {
  97.         try {
  98.             var dev = target.device;
  99.             var tmpFile = "/sdcard/aiwrok_gesture_events.log";

  100.             try { agent.shell("su -c 'pkill -9 -f getevent'"); } catch (e) {}
  101.             java.lang.Thread.sleep(200);
  102.             try { agent.shell("su -c 'rm -f " + tmpFile + "'"); } catch (e) {}

  103.             var bgCmd = "su -c 'getevent -lt /dev/input/" + dev + " > " + tmpFile + " 2>&1 &'";
  104.             agent.shell(bgCmd);
  105.             java.lang.Thread.sleep(500);

  106.             var raf = new java.io.RandomAccessFile(tmpFile, "r");
  107.             var lastPos = 0;

  108.             while (target.running) {
  109.                 var curLen = raf.length();
  110.                 if (curLen > lastPos) {
  111.                     raf.seek(lastPos);
  112.                     var line;
  113.                     while ((line = raf.readLine()) !== null) {
  114.                         target._parseLine(line);
  115.                         lastPos = raf.getFilePointer();
  116.                     }
  117.                 }
  118.                 java.lang.Thread.sleep(25);
  119.             }
  120.             try { raf.close(); } catch (e) {}
  121.         } catch (e) {}
  122.     }, "ÊÖÊÆ¼àÌý");
  123. };

  124. TouchObserver.prototype._parseLine = function (line) {
  125.     if (!line) return;
  126.     var self = this;

  127.     var xIdx = line.indexOf("ABS_MT_POSITION_X");
  128.     if (xIdx >= 0) {
  129.         var v = parseInt(line.substring(xIdx + "ABS_MT_POSITION_X".length).trim(), 16);
  130.         if (v >= 0 && v < 5000) self.currentX = v;
  131.         return;
  132.     }
  133.     var yIdx = line.indexOf("ABS_MT_POSITION_Y");
  134.     if (yIdx >= 0) {
  135.         var v2 = parseInt(line.substring(yIdx + "ABS_MT_POSITION_Y".length).trim(), 16);
  136.         if (v2 >= 0 && v2 < 5000) self.currentY = v2;
  137.         return;
  138.     }
  139.     var tIdx = line.indexOf("ABS_MT_TRACKING_ID");
  140.     if (tIdx >= 0) {
  141.         var tidHex = line.substring(tIdx + "ABS_MT_TRACKING_ID".length).trim();
  142.         if (tidHex.indexOf("ffffffff") >= 0 || parseInt(tidHex, 16) < 0) {
  143.             if (self.pointerDown) {
  144.                 self.pointerDown = false;
  145.                 self._downFired = false;
  146.                 self._emit("up", { x: self.currentX, y: self.currentY,
  147.                     timestamp: java.lang.System.currentTimeMillis() });
  148.             }
  149.         } else {
  150.             self.pointerDown = true;
  151.             self._downFired = false;
  152.         }
  153.         return;
  154.     }
  155.     if (line.indexOf("BTN_TOUCH") >= 0 && line.indexOf("DOWN") >= 0) {
  156.         self.pointerDown = true;
  157.         self._downFired = false;
  158.         return;
  159.     }
  160.     if (line.indexOf("BTN_TOUCH") >= 0 && line.indexOf("UP") >= 0) {
  161.         if (self.pointerDown) {
  162.             self.pointerDown = false;
  163.             self._downFired = false;
  164.             self._emit("up", { x: self.currentX, y: self.currentY,
  165.                 timestamp: java.lang.System.currentTimeMillis() });
  166.         }
  167.         return;
  168.     }
  169.     if (line.indexOf("SYN_REPORT") >= 0) {
  170.         if (self.pointerDown && self.currentX >= 0 && self.currentY >= 0) {
  171.             if (!self._downFired) {
  172.                 self._downFired = true;
  173.                 self._emit("down", { x: self.currentX, y: self.currentY,
  174.                     timestamp: java.lang.System.currentTimeMillis() });
  175.             } else {
  176.                 self._emit("move", { x: self.currentX, y: self.currentY,
  177.                     timestamp: java.lang.System.currentTimeMillis() });
  178.             }
  179.         }
  180.         return;
  181.     }
  182. };

  183. TouchObserver.prototype.stop = function () {
  184.     this.running = false;
  185.     try { agent.shell("su -c 'pkill -f getevent'"); } catch (e) {}
  186.     try { agent.shell("su -c 'rm -f /sdcard/aiwrok_gesture_events.log'"); } catch (e) {}
  187.     printl("✓ ´¥Ãþ¼àÌýÒÑÍ£Ö¹");
  188. };

  189. // ==============================================================
  190. // µÚ¶þ²¿·Ö£ºÊÖÊÆÊ¶±ðÒýÇæ
  191. // ==============================================================

  192. /**
  193. * ÊÖÊÆÊ¶±ðÆ÷
  194. * ¼Ç¼һÕû´Î´¥Ãþ¹ý³ÌµÄ¹ì¼£µãÁÐ±í£¬Ì§Æðʱ·ÖÎö³öÊÇʲôÊÖÊÆ
  195. */
  196. function GestureRecognizer(callback) {
  197.     this.callback = callback;  // ʶ±ðÍê³É»Øµ÷ function(gestureType, points)
  198.     this.points = [];
  199.     this.isTracking = false;
  200.     this.lastDownTime = 0;      // Éϴΰ´ÏÂʱ¼ä£¨¼ì²âË«»÷£©
  201.     this.lastUpTime = 0;        // ÉÏ´Î̧Æðʱ¼ä
  202.     this.lastUpX = 0;
  203.     this.lastUpY = 0;
  204.     this.longPressTimer = null; // ³¤°´¶¨Ê±Æ÷
  205. }

  206. GestureRecognizer.prototype.onDown = function (e) {
  207.     this.isTracking = true;
  208.     this.points = [{ x: e.x, y: e.y, t: e.timestamp, type: "down" }];

  209.     // ³¤°´¼ì²â£º°´Ï 800ms »¹Ã»Ì§Æð¾ÍË㳤°´
  210.     var self = this;
  211.     this.longPressTimer = setTimeout(function () {
  212.         if (self.isTracking && self.points.length > 0) {
  213.             var p = self.points[0];
  214.             self.callback("longpress", self.points);
  215.             self.isTracking = false;
  216.             self.points = [];
  217.         }
  218.     }, 800);
  219. };

  220. GestureRecognizer.prototype.onMove = function (e) {
  221.     if (!this.isTracking) return;
  222.     this.points.push({ x: e.x, y: e.y, t: e.timestamp, type: "move" });
  223. };

  224. GestureRecognizer.prototype.onUp = function (e) {
  225.     if (!this.isTracking) {
  226.         // ¿ÉÄÜÊǵڶþ´Îµã»÷£¨Ë«»÷¼ì²â£©
  227.         var now = e.timestamp;
  228.         if (now - this.lastUpTime < 400 && now - this.lastUpTime > 30) {
  229.             // ¾àÀëÒ²²»ÄÜ̫Զ£¨50ÏñËØÒÔÄÚ£©
  230.             var dx = e.x - this.lastUpX;
  231.             var dy = e.y - this.lastUpY;
  232.             if (Math.sqrt(dx * dx + dy * dy) < 80) {
  233.                 this.callback("doubleclick", null);
  234.             }
  235.         }
  236.         this.lastUpX = e.x;
  237.         this.lastUpY = e.y;
  238.         this.lastUpTime = now;
  239.         return;
  240.     }
  241.     this.points.push({ x: e.x, y: e.y, t: e.timestamp, type: "up" });
  242.     this.isTracking = false;

  243.     if (this.longPressTimer) {
  244.         clearTimeout(this.longPressTimer);
  245.         this.longPressTimer = null;
  246.     }

  247.     // ·ÖÎöÊÖÊÆÀàÐÍ
  248.     var gesture = this.analyze(this.points);
  249.     this.callback(gesture, this.points);

  250.     this.lastUpX = e.x;
  251.     this.lastUpY = e.y;
  252.     this.lastUpTime = e.timestamp;
  253.     this.points = [];
  254. };

  255. /**
  256. * ºËÐÄ·ÖÎöËã·¨£º´Óµã¼¯ÅжÏÊÇʲôÊÖÊÆ
  257. */
  258. GestureRecognizer.prototype.analyze = function (pts) {
  259.     if (pts.length < 2) return "click";

  260.     var first = pts[0];
  261.     var last = pts[pts.length - 1];
  262.     var dx = last.x - first.x;
  263.     var dy = last.y - first.y;
  264.     var dist = Math.sqrt(dx * dx + dy * dy);

  265.     // ============ 1. ÅжÏÊDz»ÊÇ»¬¶¯ ============
  266.     // ÒÆ¶¯¾àÀë < 30 ÇÒʱ¼ä < 300ms ¡ú ÆÕͨµã»÷
  267.     var totalTime = last.t - first.t;
  268.     if (dist < 30 && totalTime < 300) {
  269.         return "click";
  270.     }

  271.     // ============ 2. ÅжϷ½Ïò ============
  272.     // ˮƽ·ÖÁ¿Õ¼ÓÅÊÆ
  273.     if (Math.abs(dx) > Math.abs(dy) * 1.5 && dist > 60) {
  274.         return dx > 0 ? "swipe_right" : "swipe_left";
  275.     }
  276.     // ´¹Ö±·ÖÁ¿Õ¼ÓÅÊÆ
  277.     if (Math.abs(dy) > Math.abs(dx) * 1.5 && dist > 60) {
  278.         return dy > 0 ? "swipe_down" : "swipe_up";
  279.     }

  280.     // ============ 3. ÅÐ¶Ï V ×ÖÊÖÊÆ ============
  281.     var vResult = this.checkVShape(pts);
  282.     if (vResult) return "v_shape";

  283.     // ============ 4. ÅÐ¶Ï Z ×Ö£¨¿ìËÙ×óÓÒ°Ú¶¯£©============
  284.     if (this.checkZZigzag(pts)) return "z_shape";

  285.     // ĬÈÏ£º»¬¶¯£¨·½ÏòÄ£ºý£©
  286.     if (dist > 60) return "swipe";

  287.     return "click";
  288. };

  289. /** ¼ì²â V ×ÖÐΣºÏÈÏòÓÒÏÂ/×óÏ»¬£¬È»ºóÓÖÏòÉÏ·´µ¯ */
  290. GestureRecognizer.prototype.checkVShape = function (pts) {
  291.     if (pts.length < 5) return false;
  292.     var first = pts[0];
  293.     var last = pts[pts.length - 1];
  294.     var midY = 0;
  295.     var midIdx = Math.floor(pts.length / 2);
  296.     midY = pts[midIdx].y;

  297.     // ÕûÌåÏòÏ£¨Öмäµã±ÈÆðÖ¹µãµÍ£©
  298.     if (midY > first.y + 30 && midY > last.y + 30) {
  299.         return true;
  300.     }
  301.     return false;
  302. };

  303. /** ¼ì²â Z ×ÖÐΣººáÏòÀ´»Ø°Ú¶¯ÖÁÉÙ 2 ´Î */
  304. GestureRecognizer.prototype.checkZZigzag = function (pts) {
  305.     if (pts.length < 10) return false;
  306.     var directionChanges = 0;
  307.     var lastDx = 0;
  308.     for (var i = 2; i < pts.length; i++) {
  309.         var curDx = pts[i].x - pts[i - 2].x;
  310.         if (Math.abs(curDx) > 15 && lastDx !== 0) {
  311.             if ((curDx > 0) !== (lastDx > 0)) {
  312.                 directionChanges++;
  313.             }
  314.         }
  315.         lastDx = curDx;
  316.     }
  317.     return directionChanges >= 2;
  318. };

  319. // ==============================================================
  320. // µÚÈý²¿·Ö£ºfloatUI Ðü¸¡»­°å + ÊÖÊÆ×´Ì¬ÏÔʾ
  321. // ==============================================================

  322. /**
  323. * ´´½¨Ðü¸¡»­°å UI
  324. * È«ÆÁ°ë͸Ã÷´°¿Ú£¬ÊµÊ±»­³öÊÖÖ¸¹ì¼££¬µ×²¿ÏÔʾµ±Ç°ÊÖÊÆ×´Ì¬
  325. */
  326. function createFloatCanvas() {
  327.     // ·½°¸£ºÓà XML Canvas ÔªËØ ¡ª¡ª µ« AIWROK floatUI Ö§³Ö SXML
  328.     // ÕâÀïÓÃÒ»¸ö¼ò»¯°æ£ºfloatUI Ö»×ö״̬Ìõ + °´Å¥
  329.     // ¹ì¼£»æÖÆÖ±½ÓÔÚ screen ÉÏ×ö overlay ˼·̫¸´ÔÓ£¬»»³ÉÈÕÖ¾ + °´Å¥

  330.     var f = new floatUI();

  331.     var layout =
  332.         '<vertical bg="#E6000000" w="match_parent" h="wrap_content">' +
  333.         '    <text id="gesture_title" textColor="#00FF88" textSize="15sp" padding="10dp" text="&#128070; ÊÖÊÆÖúÊÖ ÒÑÔËÐÐ"/>' +
  334.         '    <text id="gesture_status" textColor="#FFFFFF" textSize="14sp" padding="4dp 10dp" text="µÈ´ý´¥Ãþ..."/>' +
  335.         '    <text id="gesture_hint" textColor="#AAAAAA" textSize="12sp" padding="2dp 10dp 8dp 10dp" text="ÓÒ»¬¡ú×ÀÃæ ×󻬡ú½ØÍ¼ ÉÏ»¬¡úÒôÁ¿+ Ï»¬¡úÒôÁ¿- Ë«»÷¡úÉèÖà ³¤°´¡úÍ£Ö¹ V¡ú΢ÐÅ"/>' +
  336.         '    <horizontal w="match_parent" gravity="center" padding="0dp 8dp 8dp 8dp">' +
  337.         '        <button id="btn_stop" text="¡ö Í£Ö¹" w="90dp" h="38dp" textColor="#FF8888" margin="4dp"/>' +
  338.         '        <button id="btn_clear" text="Çå³ý" w="90dp" h="38dp" textColor="#66AAFF" margin="4dp"/>' +
  339.         '        <button id="btn_hide" text="Òþ²Ø" w="90dp" h="38dp" textColor="#AAAAAA" margin="4dp"/>' +
  340.         '    </horizontal>' +
  341.         '</vertical>';

  342.     f.loadSXML(layout);

  343.     var txtStatus = f.findViewById("gesture_status");
  344.     var txtTitle  = f.findViewById("gesture_title");
  345.     var btnStop   = f.findViewById("btn_stop");
  346.     var btnClear  = f.findViewById("btn_clear");
  347.     var btnHide   = f.findViewById("btn_hide");

  348.     // λÖãºÆÁÄ»¶¥²¿¾ÓÖÐ
  349.     var sw = screen.getScreenWidth();
  350.     f.setPosition(Math.floor((sw - 320) / 2), 100);

  351.     btnStop.setOnClickListener(function () {
  352.         printl("Óû§µã»÷Í£Ö¹°´Å¥");
  353.         stopEverything();
  354.     });

  355.     btnClear.setOnClickListener(function () {
  356.         txtStatus.setText("ÈÕÖ¾ÒÑÇå³ý ✓ µÈ´ý´¥Ãþ...");
  357.     });

  358.     var hidden = false;
  359.     btnHide.setOnClickListener(function () {
  360.         hidden = !hidden;
  361.         if (hidden) {
  362.             f.setPosition(sw - 50, 100);
  363.             txtTitle.setText("&#128070;");
  364.             txtStatus.setVisibility(0);  // View.GONE
  365.             btnClear.setVisibility(0);
  366.             btnStop.setVisibility(0);
  367.             btnHide.setText("ÏÔʾ");
  368.         } else {
  369.             f.setPosition(Math.floor((sw - 320) / 2), 100);
  370.             txtTitle.setText("&#128070; ÊÖÊÆÖúÊÖ ÒÑÔËÐÐ");
  371.             txtStatus.setVisibility(1);  // View.VISIBLE
  372.             btnClear.setVisibility(1);
  373.             btnStop.setVisibility(1);
  374.             btnHide.setText("Òþ²Ø");
  375.         }
  376.     });

  377.     return {
  378.         ui: f,
  379.         setStatus: function (text, color) {
  380.             txtStatus.setText(text);
  381.             if (color) txtStatus.setTextColor(color);
  382.         },
  383.         flashTitle: function (emoji) {
  384.             txtTitle.setText(emoji);
  385.             sleep.millisecond(200);
  386.             txtTitle.setText("&#128070; ÊÖÊÆÖúÊÖ ÒÑÔËÐÐ");
  387.         }
  388.     };
  389. }

  390. // ==============================================================
  391. // µÚËIJ¿·Ö£ºÊÖÊÆ ¡ú ×Ô¶¯»¯¶¯×÷ Ó³Éä±í
  392. // ==============================================================

  393. /**
  394. * ÊÖÊÆÖ´ÐÐÆ÷
  395. * ʶ±ðµ½ÊÖÊÆºó£¬Ö´ÐжÔÓ¦µÄ×Ô¶¯»¯²Ù×÷
  396. */
  397. function GestureExecutor(panel) {
  398.     this.panel = panel;
  399.     this.actionCount = 0;

  400.     // ÊÖÊÆ ¡ú ¶¯×÷ µÄÓ³Éä
  401.     this.rules = {
  402.         "swipe_right": function () {
  403.             panel.setStatus("↪️ ÓÒ»¬ ¡ú »Ø×ÀÃæ", "#FFD700");
  404.             auto.home();
  405.         },
  406.         "swipe_left": function () {
  407.             panel.setStatus("↩️ ×ó»¬ ¡ú ½ØÍ¼ÖÐ...", "#66AAFF");
  408.             var img = screen.screenShotFull();
  409.             var path = "/sdcard/Pictures/gesture_" + Date.now() + ".png";
  410.             img.save(path);
  411.             img.recycle();
  412.             panel.setStatus("✅ ½ØÍ¼Òѱ£´æµ½ " + path, "#00FF88");
  413.             sleep.second(1);
  414.             panel.setStatus("µÈ´ýÏÂÒ»¸öÊÖÊÆ...", "#FFFFFF");
  415.         },
  416.         "swipe_up": function () {
  417.             panel.setStatus("⬆️ ÉÏ»¬ ¡ú ÒôÁ¿+", "#00FF88");
  418.             if (typeof agent !== "undefined") agent.shell("input keyevent 24");
  419.             else auto.keyPress(24);
  420.         },
  421.         "swipe_down": function () {
  422.             panel.setStatus("⬇️ Ï»¬ ¡ú ÒôÁ¿-", "#00FF88");
  423.             if (typeof agent !== "undefined") agent.shell("input keyevent 25");
  424.             else auto.keyPress(25);
  425.         },
  426.         "click": function () {
  427.             // µ¥»÷£º²»×öÌØÊ⶯×÷£¬Ö»·´À¡
  428.             panel.setStatus("&#128070; µ¥»÷ " + new Date().toLocaleTimeString(), "#AAAAAA");
  429.         },
  430.         "doubleclick": function () {
  431.             panel.setStatus("✌️ Ë«»÷ ¡ú ´ò¿ªÉèÖÃ", "#FF66AA");
  432.             app.openApp("com.android.settings");
  433.         },
  434.         "longpress": function () {
  435.             panel.setStatus("⏱️ ³¤°´ ¡ú Çл»½Å±¾ÔËÐÐ", "#FF9900");
  436.             panel.flashTitle("⏱️");
  437.             printl("[ÊÖÊÆ] ³¤°´ ¡ª ÕâÀï¿ÉÒÔ×Ô¶¨Òå´¥·¢Äã×Ô¼ºµÄ½Å±¾");
  438.             // Àý£ºÖ´ÐÐij¸öÈÎÎñ
  439.             // runYourTask();
  440.         },
  441.         "v_shape": function () {
  442.             panel.setStatus("✔️ V×Ö ¡ú ´ò¿ªÎ¢ÐÅ", "#00FF88");
  443.             app.openApp("com.tencent.mm");
  444.         },
  445.         "z_shape": function () {
  446.             panel.setStatus("〰️ Z×Ö ¡ú ´ò¿ª¶¶Òô", "#FF0066");
  447.             app.openApp("com.ss.android.ugc.aweme");
  448.         },
  449.         "swipe": function () {
  450.             panel.setStatus("➡️ Ä£ºý»¬¶¯£¬Ôݲ»´¥·¢¶¯×÷", "#888888");
  451.         }
  452.     };
  453. }

  454. GestureExecutor.prototype.execute = function (gestureType) {
  455.     this.actionCount++;
  456.     printl("\n========== ÊÖÊÆ #" + this.actionCount + " ==========");
  457.     printl("  Ê¶±ð½á¹û: " + gestureType);
  458.     var handler = this.rules[gestureType];
  459.     if (handler) {
  460.         try { handler(); }
  461.         catch (e) {
  462.             printl("  ❌ Ö´Ðгö´í: " + e.message);
  463.             this.panel.setStatus("❌ Ö´ÐÐʧ°Ü: " + e.message, "#FF4444");
  464.         }
  465.     } else {
  466.         printl("  (ÎÞ¶ÔÓ¦¶¯×÷)");
  467.     }
  468.     printl("======================================\n");
  469. };

  470. // ==============================================================
  471. // µÚÎ岿·Ö£ºÆô¶¯¡¢ÕûºÏ¡¢Í£Ö¹
  472. // ==============================================================

  473. var _globalPanel = null;
  474. var _globalObserver = null;
  475. var _globalRecognizer = null;
  476. var _globalExecutor = null;
  477. var _running = false;

  478. function startEverything() {
  479.     if (_running) {
  480.         printl("ÒѾ­ÔÚÔËÐÐÁË");
  481.         return;
  482.     }

  483.     printl("\n¨X¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨[");
  484.     printl("¨U  AIWROK ÊÖÊÆÊ¶±ð×Ô¶¯»¯ÖúÊÖ Æô¶¯ÖÐ...      ¨U");
  485.     printl("¨^¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨a\n");

  486.     // 1. root ¼ì²â
  487.     printl("&#128272; [1/3] ¼ì²â root ȨÏÞ...");
  488.     var hasRoot = shellExec("id").indexOf("uid=0") >= 0;
  489.     printl("  root: " + (hasRoot ? "✓" : "✗"));
  490.     if (!hasRoot) {
  491.         printl("❌ ÐèÒª root ȨÏÞ£¬ÇëÔÚÄ£ÄâÆ÷»ò root ÊÖ»úÉÏÔËÐÐ");
  492.         return;
  493.     }

  494.     // 2. ÕÒ´¥ÃþÉ豸
  495.     printl("&#128269; [2/3] ÕÒ´¥ÃþÉ豸½Úµã...");
  496.     var device = findTouchEventDevice();
  497.     if (!device) {
  498.         printl("❌ ÕÒ²»µ½´¥ÃþÉ豸");
  499.         return;
  500.     }
  501.     printl("  ✓ /dev/input/" + device);

  502.     // 3. ´´½¨ UI Ãæ°å
  503.     printl("&#127912; [3/3] ´´½¨Ðü¸¡Ãæ°å...");
  504.     _globalPanel = createFloatCanvas();

  505.     // 4. ´´½¨Ê¶±ðÆ÷ ¡ª ʶ±ðÍê½»¸øÖ´ÐÐÆ÷
  506.     _globalExecutor = new GestureExecutor(_globalPanel);
  507.     _globalRecognizer = new GestureRecognizer(function (gestureType, points) {
  508.         _globalExecutor.execute(gestureType);
  509.     });

  510.     // 5. Æô¶¯´¥Ãþ¹Û²ìÆ÷£¬°Ñʼþι¸øÊ¶±ðÆ÷
  511.     _globalObserver = new TouchObserver(device);

  512.     // move ʼþ·Ç³£Ãܼ¯£¬×ö½ÚÁ÷£¨70ms ×î¶àÒ»Ìõ£©
  513.     var lastMoveTs = 0;

  514.     _globalObserver.onDown(function (e) {
  515.         printl("&#128317; DOWN  (" + e.x + "," + e.y + ")");
  516.         _globalPanel.setStatus("&#128317; °´ÏÂ @ (" + e.x + "," + e.y + ")", "#00FF88");
  517.         _globalRecognizer.onDown(e);
  518.     });

  519.     _globalObserver.onMove(function (e) {
  520.         var now = java.lang.System.currentTimeMillis();
  521.         if (now - lastMoveTs < 60) return;  // ½ÚÁ÷
  522.         lastMoveTs = now;
  523.         // move ²»Ë¢ÆÁ£¬Ö»ÔÚÄÚ²¿¼Ç¼¹ì¼£
  524.         _globalRecognizer.onMove(e);
  525.     });

  526.     _globalObserver.onUp(function (e) {
  527.         printl("&#128316; UP    (" + e.x + "," + e.y + ")");
  528.         _globalPanel.setStatus("&#128316; ̧Æð£¬·ÖÎöÊÖÊÆÖÐ...", "#FFD700");
  529.         _globalRecognizer.onUp(e);
  530.     });

  531.     _globalObserver.start();

  532.     _running = true;
  533.     printl("\n✅ È«²¿Æô¶¯£¡È¥ÆÁÄ»ÉÏ»®¼¸ÏÂÊÔÊÔ°É£¡\n");
  534.     printl("ÊÖÊÆ ¡ú ¶¯×÷Ó³É䣺");
  535.     printl("  ↪️ ÓÒ»¬    ¡ú »Ø×ÀÃæ");
  536.     printl("  ↩️ ×󻬠   ¡ú ½ØÍ¼±£´æ");
  537.     printl("  ⬆️ ÉÏ»¬    ¡ú ÒôÁ¿+");
  538.     printl("  ⬇️ Ï»¬    ¡ú ÒôÁ¿-");
  539.     printl("  ✌️ Ë«»÷    ¡ú ´ò¿ªÉèÖÃ");
  540.     printl("  ⏱️ ³¤°´    ¡ú ´¥·¢×Ô¶¨ÒåÈÎÎñ");
  541.     printl("  ✔️ V×Ö     ¡ú ´ò¿ªÎ¢ÐÅ");
  542.     printl("  〰️ Z×Ö     ¡ú ´ò¿ª¶¶Òô\n");
  543. }

  544. function stopEverything() {
  545.     printl("\n&#128721; ÕýÔÚÍ£Ö¹...");
  546.     if (_globalObserver) {
  547.         _globalObserver.stop();
  548.         _globalObserver = null;
  549.     }
  550.     if (_globalPanel && _globalPanel.ui) {
  551.         try { _globalPanel.ui.close(); } catch (e) {}
  552.         _globalPanel = null;
  553.     }
  554.     _running = false;
  555.     printl("✅ ÒÑÍ£Ö¹\n");
  556. }

  557. // ==============================================================
  558. // Æô¶¯£¡
  559. // ==============================================================

  560. // ÑÓ³Ù 1.5 ÃëÆô¶¯£¬ÈÃÐü¸¡´°³õʼ»¯²»ÇÀʱ»ú
  561. sleep.millisecond(1500);
  562. startEverything();
¸´ÖÆ´úÂë


»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

±¾°æ»ý·Ö¹æÔò

¹Ø±Õ

QQ|»ÓªÏúÈí¼þ×ÛºÏÌÖÂÛ|»ÓªÏúÈí¼þÓÐÎʱشð|»ÓªÏúÈí¼þ½Ì³Ì×¨Çø|»ÓªÏúÈí¼þPOST½Å±¾·ÖÏí|»ÓªÏúÈí¼þÆÕͨ½Å±¾·ÖÏí|»ÓªÏúÈí¼þÈí¼þ×ÊѶ|»ÓªÏúÈí¼þ¾«Æ·Èí¼þ|»ÓªÏúÈí¼þ¸üй«¸æ|ÓªÏúÈí¼þ|B2BÈí¼þ|B2BÍøÂçÈí¼þ ( ¾©ICP±¸09078825ºÅ )±¾ÍøÕ¾¿ª·¢µÄÓªÏúÈí¼þÊÇÒ»¿îеÄÍøÂçÓªÏúÈí¼þ£¬Õâ¿îÓªÏú¿ÉÒÔÈ¥ÍøÕ¾Èí¼þ£¬²©¿ÍÈí¼þ£¬B2BÈí¼þ£¬·ÖÀàÐÅÏ¢Íø·¢Ìù£¬¿ÉÒÔÇÀɳ·¢£¬¿ÉÒÔµ½°Ù¶ÈÎÄ¿âÉÏ´«WORDÎĵµ£¬¿ÉÒÔµ½Ò»Ð©ÊÇÏà²áÍøÕ¾×Ô¶¯ÉÏ´«Í¼Æ¬£¬Õâ¸ö×Ô¶¯·¢ÌûÈí¼þ×Ô´øÔÆÖ©Ö룬¼Ó¿ìÊÕ¼£¬ÓÐ6ÖÖ¶Ô½Ó´òÂë½Ó¿Ú£¬·½±ã£¬Ð§Âʸߣ¬Ëٶȿ죬¶øÇÒ¶ÔÍ϶¯µÄÑéÖ¤ÂëÈ«ÍøµÚÒ»¼Ò¶À¼ÒÖ§³Ö£¬È«²¿Ô­´´¼¼Êõ£¬¶À¼ÒÑз¢£¬Õý°æÔ­´´´ø°æÈ¨Èí¼þ¡£Ñ¡ÔñÍòÄÜÓªÏúÈí¼þ£¬¾ÍÑ¡ÔñÁËÒ»ÖÖ׬ǮµÄЧÂÊ£¬´ÓûÓб»³¬Ô½¹ý£¬Ò»Ö±ÔÚŬÁ¦Ñз¢Ð¼¼Êõ¡£·Å·ÉÃÎÏ룬½â·ÅË«ÊÖ£¬À´µã´´Ò⣬³É¾ÍÄãµÄÃÎÏ룬¾ÍÔÚÍòÄÜÓªÏúÈí¼þ¿ªÊ¼

map2

GMT+8, 2026-9-22 07:18 , Processed in 0.096765 second(s), 33 queries .

¿ìËٻظ´ ·µ»Ø¶¥²¿ ·µ»ØÁбí