B2BÍøÂçÈí¼þ

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

ÈÕÖ¾·Ö¼¶ÂäÅÌÅäÖó־û¯ÈÎÎñµ÷¶È

[¸´ÖÆÁ´½Ó]

1174

Ö÷Ìâ

1179

Ìû×Ó

7973

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

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

ÈÕÖ¾·Ö¼¶ÂäÅÌÅäÖó־û¯ÈÎÎñµ÷¶È


ÈÕÖ¾·Ö¼¶ÂäÅÌÅäÖó־û¯ÈÎÎñµ÷¶È B2BÍøÂçÈí¼þ

ÈÕÖ¾·Ö¼¶ÂäÅÌÅäÖó־û¯ÈÎÎñµ÷¶È B2BÍøÂçÈí¼þ

ÈÕÖ¾·Ö¼¶ÂäÅÌÅäÖó־û¯ÈÎÎñµ÷¶È B2BÍøÂçÈí¼þ



  1. // =====================================================================
  2. //  Àý×Ó5£ºÈÕÖ¾·Ö¼¶ÂäÅÌ + ÅäÖó־û¯ + ÈÎÎñµ÷¶È£¨Õæ»ú¿ÉÖ±½ÓÔËÐУ©
  3. //  ×÷Ó㺰ѽű¾´Ó"ÄÜÅÜ"Éý¼¶µ½"Äܳ¤ÆÚÅÜ¡¢³öÎÊÌâÄܲé"¡ª¡ª
  4. //        ¡¤ ÈÕÖ¾·Ö¼¶ + ×Ô¶¯·Ö¾í£¬ÅÜÒ»ÍíÉÏÒ²²»»á°ÑÎļþ³Å±¬
  5. //        ¡¤ ÅäÖÃдÎļþ£¬É±µô½Å±¾ÖØ¿ª»¹ÄܽÓ×ÅÉϴεIJÎÊýÅÜ
  6. //        ¡¤ ¶¨Ê±Æô¶¯¡¢ÏÞʱ½áÊø¡¢ÂÖ´ÎÐÝÏ¢¡¢ÓÅÑÅÍ£Ö¹£¨ËæÊ±É²³µ²»¶ªÊý¾Ý£©
  7. //        ¡¤ ͳ¼ÆÉϱ¨£º³É¹¦/ʧ°Ü¼ÆÊý + ¶ÏÍø»º´æ²¹±¨
  8. //  ÒýÇæ£ºES5 / Rhino
  9. // =====================================================================

  10. // ---------------- Ò»¡¢Â·¾¶ÓëÅäÖà ----------------
  11. var BASE = "/sdcard/AIWROK/¼¼ÇÉ5_ÈÎÎñµ÷¶È";
  12. var LOG_DIR = BASE + "/ÈÕÖ¾";
  13. var CONF_FILE = BASE + "/ÅäÖÃ.ini";
  14. var QUEUE_FILE = BASE + "/´ýÉϱ¨¶ÓÁÐ.txt";
  15. var STAT_FILE = BASE + "/ͳ¼Æ.txt";
  16. var STOP_FILE = "/sdcard/AIWROK/STOP_ALL";   // ½¨Õâ¸öÎļþ = ÓÅÑÅÍ£Ö¹
  17. var PAUSE_FILE = BASE + "/PAUSE";            // ½¨Õâ¸öÎļþ = ÔÝÍ£

  18. var CFG = {
  19.     // ¶¨Ê±ÈÎÎñ£ºµ½µã²Å¿ª¹¤£¨24Ð¡Ê±ÖÆ£¬Èç "09:30"£©£»Áô¿Õ = Á¢¼´¿ªÊ¼
  20.     startTime: "",
  21.     // ÏÞʱ£º×î¶àÅܶàÉÙ·ÖÖÓ£¬µ½µã×Ô¶¯ÊÕ¹¤£¨·ÀÅÜÒ»Ò¹£©
  22.     maxMinutes: 2,
  23.     // ÂִΣº×ܹ²Åܼ¸ÂÖ£¬Ã¿ÂÖÖ®¼äÐÝÏ¢¶àÉÙÃë
  24.     rounds: 5,
  25.     restMinSec: 5,
  26.     restMaxSec: 12,
  27.     // ÈÕÖ¾·Ö¾í£ºµ¥¸öÈÕÖ¾Îļþ³¬¹ý¶àÉÙÐоÍÇÐÐÂÎļþ
  28.     logMaxLines: 200,
  29.     // Éϱ¨µØÖ·£¨Ã»ÓзþÎñÆ÷¾ÍÁô¿Õ£¬½Å±¾»á×Ô¶¯Ìø¹ýÉϱ¨£©
  30.     reportUrl: "",
  31.     deviceTag: "",
  32.     // Ä¿±êAPP£º¿ìÊÖ£¨Ë¢ÊÓÆµ£©
  33.     targetPkg: "com.smile.gifmaker",
  34.     // ¶ÌÊÓÆµ·­Ò³²ÎÊý£º±ØÐëÒ»´ÎÍêÕû¿ìËÙ³¤»¬£¬·Ö¶ÎÇúÏßÖ»»áµ¼Ö»­Ãæ¶¶¶¯²»·­Ò³
  35.     videoSwipeMinMs: 220,
  36.     videoSwipeMaxMs: 380,
  37.     stayMinMs: 2000,        // ÿÂÖ¿´ÍêÊÓÆµÍ£Áô
  38.     stayMaxMs: 5000,
  39.     verifySwipe: true,      // ·­Ò³ºó½ØÍ¼±È¶Ô£¬È·ÈÏÕæµÄ»»ÁËÊÓÆµ
  40.     finishGoHome: false     // ÅÜÍêÍ£ÔÚ¿ìÊÖ£¬²»»Ø×ÀÃæ
  41. };

  42. function rand(a, b) { return Math.floor(a + Math.random() * (b - a + 1)); }
  43. function rSleep(a, b) { sleep.millisecond(rand(a, b)); }
  44. function dirOf(p) { var i = p.lastIndexOf("/"); return i > 0 ? p.substring(0, i) : p; }

  45. // ·µ»Ø¼ü¶àͨµÀ£ºÊµ²â²¿·ÖÉ豸 auto ¶ÔÏóûÓÐ pressBack
  46. function pressBackSafe() {
  47.     try { if (auto.back) { auto.back(); return true; } } catch (e) {}
  48.     try { if (device.pressBack) { device.pressBack(); return true; } } catch (e) {}
  49.     try { if (gesture.back) { gesture.back(); return true; } } catch (e) {}
  50.     try { if (auto.pressBack) { auto.pressBack(); return true; } } catch (e) {}
  51.     return false;
  52. }
  53. function ts() {
  54.     try { return time.now(); } catch (e) {
  55.         var d = new Date();
  56.         return d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
  57.     }
  58. }

  59. // ---------------- ¶þ¡¢ÈÕ־ϵͳ ----------------
  60. var LOG_BUF = [];
  61. var LOG_LINES = 0;
  62. var LOG_NOW = "";

  63. function ensureDirs() {
  64.     try { file.createFloder(BASE); } catch (e) {}
  65.     try { file.createFloder(LOG_DIR); } catch (e) {}
  66. }

  67. function flushLog(force) {
  68.     if (LOG_BUF.length === 0) return;
  69.     if (!force && LOG_BUF.length < 5) return; // Ôܹ»ÔÙд£¬¼õÉÙ IO
  70.     try {
  71.         if (!LOG_NOW) LOG_NOW = LOG_DIR + "/run_" + new Date().getTime() + ".log";
  72.         txt.writeTxt(LOG_NOW, LOG_BUF.join("\n") + "\n", true);
  73.         LOG_BUF = [];
  74.     } catch (e) {}
  75. }

  76. // ·Ö¼¶ÈÕÖ¾£ºD µ÷ÊÔ / I ÐÅÏ¢ / W ¾¯¸æ / E ´íÎó
  77. function logD(s) { writeLog("D", s); }
  78. function logI(s) { writeLog("I", s); }
  79. function logW(s) { writeLog("W", s); }
  80. function logE(s) { writeLog("E", s); }

  81. function writeLog(level, s) {
  82.     var line = ts() + " [" + level + "] " + s;
  83.     try { printl(line); } catch (e) {}
  84.     LOG_BUF.push(line);
  85.     LOG_LINES++;
  86.     // ·Ö¾í£º³¬¹ýÉÏÏ޾ͻ»ÐÂÎļþ£¨³¤ÆÚÅܵıر¸£©
  87.     if (LOG_LINES >= CFG.logMaxLines) {
  88.         flushLog(true);
  89.         LOG_LINES = 0;
  90.         LOG_NOW = LOG_DIR + "/run_" + new Date().getTime() + ".log";
  91.         logI("ÈÕÖ¾·Ö¾í£¬ÐÂÎļþ: " + LOG_NOW);
  92.     } else {
  93.         flushLog(false);
  94.     }
  95. }

  96. // ---------------- Èý¡¢ÅäÖó־û¯ ----------------
  97. // ¼¼ÇÉ£ºconfig ¶Áд»á×Ô¶¯½¨Îļþ£»¶ÁµÄʱºòÒ»¶¨¸øÄ¬ÈÏÖµ£¬·ÀÖ¹Ê×´ÎÔËÐÐÈ¡µ½¿Õ
  98. function saveConfig() {
  99.     try {
  100.         config.setConfig(CONF_FILE, "rounds", "" + CFG.rounds);
  101.         config.setConfig(CONF_FILE, "maxMinutes", "" + CFG.maxMinutes);
  102.         config.setConfig(CONF_FILE, "startTime", CFG.startTime);
  103.         // ×¢Ò⣺targetPkg ²»Ð´ÈëÅäÖã¡·ñÔòÉÏ´ÎÅܵÄÉèÖÃÒ³»á±»¼Çס£¬
  104.         // Ï´ΰѴúÂë¸Ä³É¿ìÊÖÒ²»á±»¾ÉÅäÖø²¸Ç»ØÈ¥£¨ÒÑʵ²â²È¿Ó£©
  105.         config.setConfig(CONF_FILE, "lastRun", ts());
  106.         config.setConfig(CONF_FILE, "runTimes", "" + (parseInt(getConf("runTimes", "0"), 10) + 1));
  107.         logI("ÅäÖÃÒѱ£´æ: " + CONF_FILE);
  108.     } catch (e) { logW("ÅäÖñ£´æÊ§°Ü: " + (e.message || e)); }
  109. }

  110. function getConf(key, defVal) {
  111.     try {
  112.         var v = config.getConfig(CONF_FILE, key, defVal);
  113.         if (v === null || v === undefined || v === "") return defVal;
  114.         return v;
  115.     } catch (e) { return defVal; }
  116. }

  117. function loadConfig() {
  118.     try {
  119.         CFG.rounds = parseInt(getConf("rounds", "" + CFG.rounds), 10);
  120.         CFG.maxMinutes = parseInt(getConf("maxMinutes", "" + CFG.maxMinutes), 10);
  121.         CFG.startTime = getConf("startTime", CFG.startTime);
  122.         // targetPkg Ò»ÂÉÒÔ´úÂëÀïµÄΪ׼£¬¾ø²»±»¾ÉÅäÖø²¸Ç
  123.         // £¨ÀúÊ·ÅäÖÃÀï´æ¹ý com.android.settings£¬µ¼Ö¸ijɿìÊÖºóÈÔ´ò¿ªÉèÖÃÒ³£©
  124.         logI("ÅäÖÃÒѼÓÔØ£¬ÀúÊ·ÔËÐдÎÊý=" + getConf("runTimes", "0"));
  125.     } catch (e) {}
  126. }

  127. function resetConfig() {
  128.     try { file.delete(CONF_FILE); logI("ÅäÖÃÒÑÖØÖÃ"); } catch (e) {}
  129. }

  130. // ---------------- ËÄ¡¢ÓÅÑÅÍ£Ö¹ / ÔÝÍ£ ----------------
  131. function shouldStop() { try { return file.isExists(STOP_FILE); } catch (e) { return false; } }
  132. function shouldPause() { try { return file.isExists(PAUSE_FILE); } catch (e) { return false; } }

  133. // ÔÝͣʱԭµØ´òת£¬É¾µô PAUSE Îļþ¾Í¼ÌÐø£¨µ÷ÊԽű¾ÉñÆ÷£©
  134. function waitIfPaused() {
  135.     var guard = 0;
  136.     while (shouldPause() && !shouldStop() && guard < 600) {
  137.         if (guard === 0) logW("ÒÑÔÝÍ££¨É¾³ý " + PAUSE_FILE + " ¼ÌÐø£©");
  138.         sleep.millisecond(1000);
  139.         guard++;
  140.     }
  141.     if (guard > 0) logI("»Ö¸´ÔËÐÐ");
  142. }

  143. // ---------------- Îå¡¢¶¨Ê±ÈÎÎñ ----------------
  144. // µÈµ½ startTime ²Å¿ª¹¤£»·µ»Ø false ±íʾ±»Í£Ö¹
  145. function waitForStartTime() {
  146.     // ÅäÖÃÎļþ¿ÉÄܶÁ»Ø¿Õ°××Ö·û£¬Í³Ò»ÇåÏ´ºóÔÙÅжϣ¬±ÜÃâ¿ÕÖµÎó´¥·¢¶¨Ê±µÈ´ý
  147.     try { CFG.startTime = String(CFG.startTime || "").replace(/\s/g, ""); } catch (e) { CFG.startTime = ""; }
  148.     if (!CFG.startTime) return true;
  149.     logI("¶¨Ê±Ä£Ê½£¬µÈ´ýµ½ " + CFG.startTime + " ¿ª¹¤");
  150.     var guard = 0;
  151.     while (guard < 3600 * 12) { // ×î¶àµÈ 12 Сʱ
  152.         if (shouldStop()) return false;
  153.         var now = "";
  154.         try { now = time.now(); } catch (e) { now = ""; }
  155.         // time.now() Ò»°ãÐÎÈç 2026-09-09 09:30:12£¬È¡Öмä hh:mm
  156.         var hm = now.substring(11, 16);
  157.         if (now.indexOf(CFG.startTime) >= 0 || hm === CFG.startTime) {
  158.             logI("µ½µã¿ª¹¤");
  159.             return true;
  160.         }
  161.         if (guard % 300 === 0) logD("µÈ´ýÖУ¬µ±Ç° " + now);
  162.         sleep.millisecond(1000);
  163.         guard++;
  164.     }
  165.     return true;
  166. }

  167. // ---------------- Áù¡¢Í³¼ÆÓëÉϱ¨ ----------------
  168. var STAT = { ok: 0, fail: 0, skip: 0, startMs: 0 };

  169. function statAdd(key) {
  170.     if (key === "ok") STAT.ok++;
  171.     else if (key === "fail") STAT.fail++;
  172.     else STAT.skip++;
  173. }

  174. // Éϱ¨£ºÓÐÍøÖ±½Ó·¢£¬Ã»ÍøÐ´¶ÓÁУ¬µÈÓÐÍøÔÙ²¹±¨£¨·ÀÖ¹Êý¾Ý¶ª£©
  175. function reportLine(obj) {
  176.     if (!CFG.reportUrl) return; // ûÅ䵨ַ¾ÍÖ±½ÓÌø¹ý
  177.     var body = "";
  178.     try { body = JSON.stringify(obj); } catch (e) { body = "" + obj; }
  179.     try {
  180.         var r = http.json(CFG.reportUrl, body);
  181.         if (r) { logD("Éϱ¨³É¹¦"); return; }
  182.         throw new Error("¿ÕÏìÓ¦");
  183.     } catch (e) {
  184.         logW("Éϱ¨Ê§°Ü£¬Èë¶Ó»º´æ: " + (e.message || e));
  185.         try { txt.writeTxt(QUEUE_FILE, body + "\n", true); } catch (e2) {}
  186.     }
  187. }

  188. // ²¹±¨¶ÓÁУ¨ÁªÍøºóµ÷ÓÃÒ»´Î¼´¿É£©
  189. function flushQueue() {
  190.     if (!CFG.reportUrl) return;
  191.     var content = "";
  192.     try { content = txt.readFileSdcard(QUEUE_FILE); } catch (e) { return; }
  193.     if (!content) return;
  194.     var lines = content.split("\n");
  195.     var left = [];
  196.     for (var i = 0; i < lines.length; i++) {
  197.         var ln = lines[i];
  198.         if (!ln) continue;
  199.         try {
  200.             http.json(CFG.reportUrl, ln);
  201.             logI("²¹±¨³É¹¦Ò»Ìõ");
  202.         } catch (e) {
  203.             left.push(ln);
  204.         }
  205.     }
  206.     try {
  207.         file.delete(QUEUE_FILE);
  208.         if (left.length > 0) txt.writeTxt(QUEUE_FILE, left.join("\n") + "\n", true);
  209.         logI("²¹±¨Íê³É£¬Ê£Óà " + left.length + " Ìõ");
  210.     } catch (e) {}
  211. }

  212. function saveStat() {
  213.     var s = "¿ªÊ¼:" + ts() + " ³É¹¦:" + STAT.ok + " ʧ°Ü:" + STAT.fail +
  214.             " Ìø¹ý:" + STAT.skip + " ºÄʱ(·Ö):" +
  215.             Math.round((new Date().getTime() - STAT.startMs) / 60000);
  216.     try { txt.writeTxt(STAT_FILE, s + "\n", true); } catch (e) {}
  217.     logI("ͳ¼Æ: " + s);
  218. }

  219. // ---------------- ÁùµãÎå¡¢¿ìÊÖË¢ÊÓÆµÏà¹Ø¹¤¾ß ----------------
  220. function sw() { try { return screen.getScreenWidth(); } catch (e) { return 1080; } }
  221. function sh() { try { return screen.getScreenHeight(); } catch (e) { return 1920; } }

  222. // ǰ̨°üÃû¶àͨµÀ£¨¸ÃÉ豸 getTopPackName »á·µ»Ø¿Õ£©
  223. function topPkg() {
  224.     try { var t1 = app.getTopPackName(); if (t1) return t1; } catch (e) {}
  225.     try { var t2 = app.getTopPackNameV2(); if (t2) return t2; } catch (e) {}
  226.     try { var t3 = auto.getTopPackName(); if (t3) return t3; } catch (e) {}
  227.     var act = "";
  228.     try { act = "" + app.getCurrentActivity(); } catch (e) {
  229.         try { act = "" + app.getAgentCurrenAcitvity(); } catch (e2) { act = ""; }
  230.     }
  231.     if (act && act.indexOf("/") > 0) return act.substring(0, act.indexOf("/"));
  232.     return act || "";
  233. }

  234. function isInstalled(pkg) {
  235.     try { var v = app.getVerName(pkg); if (v) return true; } catch (e) {}
  236.     try { var n = app.getAppName(pkg); if (n) return true; } catch (e) {}
  237.     return false;
  238. }

  239. // È·±£¿ìÊÖÔÚǰ̨£¬²»ÔÚ¾ÍÀ­ÆðÀ´
  240. var _launched = false;
  241. function ensureForeground() {
  242.     var top = topPkg();
  243.     if (top === CFG.targetPkg) { _launched = true; return true; }
  244.     // ¸ÃÉ豸ǰ̨APIÈ¡²»µ½°üÃûʱ²»ÒªÃ¿ÂÖÖØÆôAPP£ºÖ»±£Ö¤Ê×ÂÖÀ­Æð¹ý¼´¿É
  245.     if (!top && _launched) return true;
  246.     logI("À­Æð¿ìÊÖ£¨µ±Ç°Ç°Ì¨=" + (top || "¿Õ") + "£©");
  247.     try { app.openApp(CFG.targetPkg); } catch (e) {
  248.         try { app.startApp(CFG.targetPkg); } catch (e2) {}
  249.     }
  250.     sleep.millisecond(4000);
  251.     _launched = true;
  252.     return true;
  253. }

  254. // ¶ÌÊÓÆµ·­Ò³£ºÒ»´ÎÍêÕû¿ìËÙ³¤»¬£¨²»ÄֶܷΣ¬·ñÔòÖ»¶¶²»·­£©
  255. function onceSwipe(x1, y1, x2, y2, durMs) {
  256.     try { auto.swip(x1, y1, x2, y2, durMs, 0); }
  257.     catch (e) { try { auto.swipe(x1, y1, x2, y2, durMs); } catch (e2) {} }
  258. }

  259. function shotFingerprint() {
  260.     try {
  261.         var b = screen.screenShotFull().toBase64();
  262.         if (!b) return "";
  263.         return b.substring(0, 200) + "|" + b.substring(b.length - 200) + "|" + b.length;
  264.     } catch (e) { return ""; }
  265. }

  266. // ·µ»Ø true = È·ÈÏ·­µ½ÐÂÊÓÆµ
  267. function swipeUpWithVerify() {
  268.     var before = shotFingerprint();
  269.     var w = sw(), h = sh();
  270.     var x = rand(Math.round(w * 0.35), Math.round(w * 0.65));
  271.     var y1 = Math.round(h * (0.78 + Math.random() * 0.07));
  272.     var y2 = Math.round(h * (0.12 + Math.random() * 0.08));
  273.     var dur = rand(CFG.videoSwipeMinMs, CFG.videoSwipeMaxMs);
  274.     onceSwipe(x, y1, x + rand(-12, 12), y2, dur);
  275.     logI("·­Ò³ÉÏ»¬ Æðµãy=" + y1 + " ÖÕµãy=" + y2 + " ¾àÀë" + (y1 - y2) + "px ºÄʱ" + dur + "ms");
  276.     sleep.millisecond(700);
  277.     var after = shotFingerprint();
  278.     if (before && after && before === after) {
  279.         logW("»­ÃæÎޱ仯£¬²¹Ò»´ÎÇ¿»¬");
  280.         onceSwipe(Math.round(w / 2), Math.round(h * 0.88), Math.round(w / 2), Math.round(h * 0.08), 250);
  281.         sleep.millisecond(900);
  282.         var after2 = shotFingerprint();
  283.         return after2 && after2 !== before;
  284.     }
  285.     return true;
  286. }

  287. // ---------------- Æß¡¢ÒµÎñÈÎÎñ£º¿ìÊÖË¢ÊÓÆµÒ»ÂÖ ----------------
  288. function doOneRound(idx) {
  289.     logI("---- µÚ " + idx + " ÂÖ¿ªÊ¼ ----");

  290.     ensureForeground();

  291.     // ·­Ò³£¨´øÐ£Ñ飩
  292.     var ok;
  293.     if (CFG.verifySwipe) ok = swipeUpWithVerify();
  294.     else { swipeUpWithVerify(); ok = true; }

  295.     if (ok) { statAdd("ok"); logI("±¾ÂÖ½á¹û: ·­Ò³³É¹¦"); }
  296.     else { statAdd("fail"); logW("±¾ÂÖ½á¹û: ·­Ò³Ê§°Ü"); }

  297.     // Í£Áô¹Û¿´£¨·Ö¶Î sleep£¬ËæÊ±ÄÜÏìӦֹͣÐźţ©
  298.     var stay = rand(CFG.stayMinMs, CFG.stayMaxMs);
  299.     logI("Í£Áô¹Û¿´ " + stay + "ms");
  300.     var secs = Math.round(stay / 1000);
  301.     for (var s = 0; s < secs; s++) {
  302.         if (shouldStop()) break;
  303.         sleep.millisecond(1000);
  304.     }

  305.     logI("---- µÚ " + idx + " ÂÖ½áÊø ----");
  306. }

  307. // ---------------- °Ë¡¢µ÷¶ÈÖ÷Ñ­»· ----------------
  308. function main() {
  309.     ensureDirs();
  310.     logI("===== Àý×Ó5 ÈÕÖ¾ÅäÖÃÓëÈÎÎñµ÷¶È ¿ªÊ¼ =====");

  311.     // 1) ¶ÁÅäÖ㨵ڶþ´ÎÔËÐлáÑØÓÃÉϴεIJÎÊý£©
  312.     loadConfig();

  313.     // 2) É豸±êʶ
  314.     try { CFG.deviceTag = "" + device.getModel(); } catch (e) { CFG.deviceTag = "δ֪É豸"; }
  315.     logI("É豸: " + CFG.deviceTag);

  316.     // 3) Ä¿±êAPP¼ì²é + Æô¶¯
  317.     var vName = "", aName = "";
  318.     try { vName = app.getVerName(CFG.targetPkg); } catch (e) {}
  319.     try { aName = app.getAppName(CFG.targetPkg); } catch (e) {}
  320.     logI("Ä¿±êAPP: " + CFG.targetPkg + " Ó¦ÓÃÃû=" + (aName || "È¡²»µ½") + " °æ±¾=" + (vName || "È¡²»µ½"));
  321.     if (!isInstalled(CFG.targetPkg)) logW("°²×°¼ì²âδȷÈÏ£¨¿ÉÄÜÎ󱨣©£¬ÈÔ³¢ÊÔÆô¶¯");
  322.     ensureForeground();

  323.     // 4) ¶¨Ê±µÈ´ý
  324.     if (!waitForStartTime()) { logW("µÈ´ýÆÚ¼ä±»Í£Ö¹"); return; }

  325.     STAT.startMs = new Date().getTime();
  326.     var deadline = STAT.startMs + CFG.maxMinutes * 60 * 1000;

  327.     // 4) Ö÷Ñ­»·£ºÂÖ´Î + ÏÞʱ + Í£Ö¹/ÔÝÍ£
  328.     for (var i = 1; i <= CFG.rounds; i++) {
  329.         if (shouldStop()) { logW("¼ì²âµ½Í£Ö¹Îļþ£¬ÌáǰÊÕ¹¤"); break; }
  330.         if (new Date().getTime() > deadline) { logW("µ½´ïÏÞʱ£¬×Ô¶¯ÊÕ¹¤"); break; }

  331.         waitIfPaused();
  332.         if (shouldStop()) break;

  333.         doOneRound(i);

  334.         // ÿÂÖÉϱ¨Ò»´Î
  335.         reportLine({ device: CFG.deviceTag, round: i, ok: STAT.ok, fail: STAT.fail, time: ts() });
  336.         saveConfig();

  337.         // ÂִμäÐÝÏ¢£¨×îºóÒ»ÂÖ²»ÓÃÐÝ£©
  338.         if (i < CFG.rounds) {
  339.             var rest = rand(CFG.restMinSec, CFG.restMaxSec);
  340.             logI("ÐÝÏ¢ " + rest + " Ãë");
  341.             for (var s = 0; s < rest; s++) {
  342.                 if (shouldStop()) break;
  343.                 sleep.millisecond(1000);
  344.             }
  345.         }
  346.     }

  347.     // 5) ÊÕβ£ºÄ¬ÈÏÍ£ÔÚ¿ìÊÖ£¨Ë¢ÊÓÆµ²»Òª»Ø×ÀÃæ£©
  348.     if (CFG.finishGoHome) {
  349.         try { auto.home(); } catch (e) {}
  350.         logI("ÒÑ»Ø×ÀÃæ");
  351.     } else {
  352.         logI("ÊÕβ£ºÍ£ÔÚ " + CFG.targetPkg + " ²»Í˳ö");
  353.     }

  354.     // 6) ²¹±¨ + ͳ¼ÆÂäÅÌ
  355.     flushQueue();
  356.     saveStat();
  357.     flushLog(true);

  358.     var msg = "µ÷¶È½áÊø ³É¹¦" + STAT.ok + " ʧ°Ü" + STAT.fail;
  359.     logI("===== " + msg + " =====");
  360.     try { toast.show(msg); } catch (e) {}
  361. }

  362. main();
¸´ÖÆ´úÂë


»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

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

¹Ø±Õ

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

map2

GMT+8, 2026-9-11 07:55 , Processed in 0.091821 second(s), 35 queries .

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