B2BÍøÂçÈí¼þ

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

ʾÀýǧÎÊ×Ô¶¯²É¼¯ÎÄÕ±£´æ¼Çʱ¾

[¸´ÖÆÁ´½Ó]

1133

Ö÷Ìâ

1138

Ìû×Ó

7809

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

»ý·Ö
7809
Ìø×ªµ½Ö¸¶¨Â¥²ã
Â¥Ö÷
ʾÀýǧÎÊ×Ô¶¯²É¼¯ÎÄÕ±£´æ¼Çʱ¾
ʾÀýǧÎÊ×Ô¶¯²É¼¯ÎÄÕ±£´æ¼Çʱ¾ B2BÍøÂçÈí¼þ

  1. // AIWROK ×Ô¶¯»¯Á÷³Ì£ºÆô¶¯Ç§ÎÊ ¡ú ÊäÈëÎÊÌâ ¡ú µã»÷·¢ËÍ ¡ú µÈ´ýAI»Ø´ð ¡ú ²É¼¯»Ø´ðÄÚÈÝ ¡ú ±£´æµ½Îļþ
  2. // È«³ÌʹÓà agent.getXml() »ñÈ¡½çÃæÔ´Âë
  3. // °üÃû£ºcom.aliyun.tongyi£¨Ç§ÎÊ£©

  4. print.log("===== ǧÎʶԻ°²É¼¯Á÷³ÌÆô¶¯ =====");
  5. print.time();

  6. // ========== ÅäÖÃÇø ==========
  7. var ǧÎʰüÃû = "com.aliyun.tongyi";

  8. // Êä³öÎļþ·¾¶£¨JSON¸ñʽ£¬UTF-8±àÂ룩
  9. var Êä³öÎļþ·¾¶ = "/sdcard/ǧÎʶԻ°¼Ç¼.txt";

  10. // Òª·¢Ë͵ÄÎÊÌâÁÐ±í£¨°´Ë³Ðò·¢ËÍ£©
  11. var Òª·¢Ë͵ÄÎÊÌâÁбí = [
  12.     "ÄãºÃ£¬ÇëÓÃÒ»¾ä»°½éÉÜÄã×Ô¼º",
  13.     "Öйúƽ°²¹ÉƱ×î½ü×ßÊÆÈçºÎ£¿",
  14.     "ÕÐÉÌÒøÐгÖÓÐ3ÄêÂô³öÐèÒª½»¹ÉϢ˰Âð£¿"
  15. ];

  16. // ·¢ËͺóµÈ´ýAI»Ø´ðµÄ×î´óÃëÊý£¨ÕûÌ峬ʱ£¬×35Ã룩
  17. var µÈ´ý»Ø´ð³¬Ê±Ãë = 35;

  18. // ¼ì²âµ½Ð»شð³öÏÖºó£¬Ôٵȴý¶àÉÙÃëÈûشð¾¡Á¿Êä³öÍêÕû£¨È»ºóÖ±½Ó·µ»Ø£©
  19. var »Ø´ðÊä³öµÈ´ýÃë = 12;

  20. // ÿ¸öÎÊÌâÖ®¼äµÄ¼ä¸ôÃëÊý
  21. var ÎÊÌâ¼ä¸ôÃë = 2;

  22. // ========== »ñÈ¡É豸ÐÅÏ¢ ==========
  23. var ÆÁÄ»¿í = screen.getScreenWidth();
  24. var ÆÁÄ»¸ß = screen.getScreenHeight();
  25. print.log("ÆÁÄ»³ß´ç£º" + ÆÁÄ»¿í + " x " + ÆÁÄ»¸ß);
  26. print.log("´úÀí״̬£º" + (agent.isOpen() ? "ÒÑ¿ªÆô" : "먦Æô"));

  27. // ========== ¹¤¾ßº¯Êý ==========

  28. // »ñÈ¡ UI XML ×Ö·û´®£¨Ê¹Óà agent.getXml()£¬Ç¿ÖÆ×ªÎª×Ö·û´®£©
  29. function »ñÈ¡UI() {
  30.     var xml = agent.getXml();
  31.     // agent.getXml() ·µ»Ø¶ÔÏó£¬ÐèÇ¿ÖÆ×ªÎª×Ö·û´®
  32.     return "" + xml;
  33. }

  34. // ×Ö·û´®³¤¶È¼æÈݺ¯Êý£¨±ÜÃâ Java String ¶ÔÏó .length() ·½·¨ÎÊÌ⣩
  35. function ×Ö·û´®³¤¶È(s) {
  36.     var str = "" + s;
  37.     return str.length;
  38. }

  39. // HTMLʵÌå½âÂ루ǧÎÊTextViewÖеĻ»ÐзûµÈ»á±»±àÂëΪ
  40. ' µÈ£©
  41. function ½âÂëHTMLʵÌå(s) {
  42.     var str = "" + s;
  43.     str = str.replace(/
  44. /g, "\n");
  45.     str = str.replace(/
  46. /g, "\r");
  47.     str = str.replace(/        /g, "\t");
  48.     str = str.replace(/'/g, "'");
  49.     str = str.replace(/"/g, '"');
  50.     str = str.replace(/"/g, '"');
  51.     str = str.replace(/'/g, "'");
  52.     str = str.replace(/&/g, "&");
  53.     str = str.replace(/</g, "<");
  54.     str = str.replace(/>/g, ">");
  55.     return str;
  56. }

  57. // ²É¼¯Ç§ÎÊ RecyclerView ÖÐËùÓг¤Îı¾ TextView£¨¼´AI»Ø´ð£©
  58. // ²ÎÊý Ñϸñ¹ýÂË: true=Åųý¶ÌÎı¾°´Å¥µÈ, false=²»¹ýÂË£¨ÓÃÓÚ¼ì²âлشð³öÏÖ£¬¸üÁéÃô£©
  59. function ²É¼¯AI»Ø´ðÁбí(xml, Ñϸñ¹ýÂË) {
  60.     if (Ñϸñ¹ýÂË === undefined) Ñϸñ¹ýÂË = true;
  61.     var xmlStr = "" + xml;
  62.     var »Ø´ðÁбí = [];

  63.     // ¶¨Î» RecyclerView ½Úµã£¨Ç§ÎÊÏûÏ¢ÁбíʹÓà RecyclerView£©
  64.     var rvPattern = /<node[^>]*?class="androidx\.recyclerview\.widget\.RecyclerView"[^>]*?bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/g;
  65.     var rvMatch;
  66.     var ÏûÏ¢ÁбíÇøÓò = null;

  67.     while ((rvMatch = rvPattern.exec(xmlStr)) !== null) {
  68.         var rx1 = parseInt(rvMatch[1]);
  69.         var ry1 = parseInt(rvMatch[2]);
  70.         var rx2 = parseInt(rvMatch[3]);
  71.         var ry2 = parseInt(rvMatch[4]);
  72.         var ¸ß¶È = ry2 - ry1;
  73.         var ¿í¶È = rx2 - rx1;

  74.         if (¸ß¶È > 500 && ¿í¶È > ÆÁÄ»¿í * 0.8) {
  75.             ÏûÏ¢ÁбíÇøÓò = {x1: rx1, y1: ry1, x2: rx2, y2: ry2};
  76.             break;
  77.         }
  78.     }

  79.     if (!ÏûÏ¢ÁбíÇøÓò) {
  80.         print.log("⚠ δÕÒµ½ÏûÏ¢ÁбíRecyclerView½Úµã");
  81.         return »Ø´ðÁбí;
  82.     }

  83.     print.log("✓ ÕÒµ½ÏûÏ¢ÁбíÇøÓò£º[" + ÏûÏ¢ÁбíÇøÓò.x1 + "," + ÏûÏ¢ÁбíÇøÓò.y1 + "][" + ÏûÏ¢ÁбíÇøÓò.x2 + "," + ÏûÏ¢ÁбíÇøÓò.y2 + "]");

  84.     // ÌáÈ¡ÏûÏ¢ÁбíÇøÓòÄÚµÄËùÓÐ TextView£¨Á½½×¶ÎÆ¥Å䣺ÏÈÕҽڵ㣬ÔÙÌáÈ¡ÊôÐÔ£©
  85.     var tvPattern = /<node[^>]*?class="android\.widget\.TextView"[^>]*?\/?>/g;
  86.     var tvMatch;

  87.     while ((tvMatch = tvPattern.exec(xmlStr)) !== null) {
  88.         var tvNode = tvMatch[0];

  89.         // ´Ó½ÚµãÖÐÌáÈ¡Îı¾£¨Ö§³ÖË«ÒýºÅºÍµ¥ÒýºÅ£©
  90.         var textMatch = tvNode.match(/text="([^"]+)"/);
  91.         if (!textMatch) {
  92.             textMatch = tvNode.match(/text='([^']+)'/);
  93.         }
  94.         if (!textMatch) continue;
  95.         var Îı¾ = textMatch[1];

  96.         // ´Ó½ÚµãÖÐÌáÈ¡±ß½ç
  97.         var boundsMatch = tvNode.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
  98.         if (!boundsMatch) continue;
  99.         var tx1 = parseInt(boundsMatch[1]);
  100.         var ty1 = parseInt(boundsMatch[2]);
  101.         var tx2 = parseInt(boundsMatch[3]);
  102.         var ty2 = parseInt(boundsMatch[4]);

  103.         // Åжϸà TextView ÊÇ·ñÔÚÏûÏ¢ÁбíÇøÓòÄÚ
  104.         var ÔÚÇøÓòÄÚ = (tx1 >= ÏûÏ¢ÁбíÇøÓò.x1 && tx2 <= ÏûÏ¢ÁбíÇøÓò.x2 &&
  105.                         ty1 >= ÏûÏ¢ÁбíÇøÓò.y1 && ty2 <= ÏûÏ¢ÁбíÇøÓò.y2);

  106.         if (!ÔÚÇøÓòÄÚ) continue;

  107.         var ½âÂëÎı¾ = ½âÂëHTMLʵÌå(Îı¾);

  108.         // ÅųýÓû§ÏûÏ¢ÌØÕ÷£ºÎ»ÓÚÏûÏ¢ÁÐ±í¶¥²¿ÇøÓò£¨y×ø±ê½ÏС£©ÇÒÊǵ¥ÐжÌÎı¾
  109.         var ÊÇÓû§ÏûÏ¢ = (ty1 < ÏûÏ¢ÁбíÇøÓò.y1 + 500) && (½âÂëÎı¾.indexOf("\n") === -1) && (×Ö·û´®³¤¶È(½âÂëÎı¾) < 100);
  110.         
  111.         // ÅųýËÑË÷²½ÖèÎı¾£¨°üº¬"²éѯ"¡¢"¼ìË÷"¡¢"µ÷ÑÐ"µÈ¹Ø¼ü´ÊµÄÊÇËÑË÷¼Æ»®£¬²»ÊÇ×îÖջشð£©
  112.         var ÊÇËÑË÷²½Öè = (½âÂëÎı¾.indexOf("²éѯ") !== -1 || ½âÂëÎı¾.indexOf("¼ìË÷") !== -1 ||
  113.                           ½âÂëÎı¾.indexOf("µ÷ÑÐ") !== -1 || ½âÂëÎı¾.indexOf("È·ÈÏ") !== -1 ||
  114.                           ½âÂëÎı¾.indexOf("·ÖÎö") !== -1 || ½âÂëÎı¾.indexOf("²éÕÒ") !== -1) &&
  115.                          (×Ö·û´®³¤¶È(½âÂëÎı¾) < 500);
  116.         
  117.         // ÅųýÊÓÆµÍƼöÇøÓòµÄÎı¾£¨ÊÓÆµÍƼöͨ³£ÔÚAI»Ø´ðÏ·½£¬y×ø±ê½Ï´óÇÒÓÐÌØ¶¨ÌØÕ÷£©
  118.         // AI»Ø´ðͨ³£ÔÚÏûÏ¢ÁÐ±í¶¥²¿ÇøÓò£¬ÊÓÆµÍƼöÔÚÏ·½
  119.         var ÏûÏ¢Áбí¸ß¶È = ÏûÏ¢ÁбíÇøÓò.y2 - ÏûÏ¢ÁбíÇøÓò.y1;
  120.         var ÊÇÊÓÆµÍƼö = (ty1 > ÏûÏ¢ÁбíÇøÓò.y1 + ÏûÏ¢Áбí¸ß¶È * 0.3) &&
  121.                          (½âÂëÎı¾.indexOf("±Ê¼Ç") !== -1 || ½âÂëÎı¾.indexOf("×÷Õß") !== -1 ||
  122.                           ×Ö·û´®³¤¶È(½âÂëÎı¾) < 30);
  123.         
  124.         if (Ñϸñ¹ýÂË) {
  125.             if (!ÊÇÓû§ÏûÏ¢ && !ÊÇËÑË÷²½Öè && !ÊÇÊÓÆµÍƼö && (½âÂëÎı¾.indexOf("\n") !== -1 || ×Ö·û´®³¤¶È(½âÂëÎı¾) > 50)) {
  126.                 »Ø´ðÁбí.push(½âÂëÎı¾);
  127.             }
  128.         } else {
  129.             if (!ÊÇÓû§ÏûÏ¢ && !ÊÇËÑË÷²½Öè && !ÊÇÊÓÆµÍƼö && ×Ö·û´®³¤¶È(½âÂëÎı¾) > 0) {
  130.                 »Ø´ðÁбí.push(½âÂëÎı¾);
  131.             }
  132.         }
  133.     }

  134.     return »Ø´ðÁбí;
  135. }

  136. // ²éÕÒÊäÈë¿òÖÐÐÄ×ø±ê£¨²éÕÒ hint Îı¾Îª"·¢ÏûÏ¢»ò°´×¡Ëµ»°..."µÄ TextView£©
  137. function ²éÕÒÊäÈë¿òÖÐÐÄ(xml) {
  138.     var xmlStr = "" + xml;

  139.     var inputIdx = xmlStr.indexOf('text="·¢ÏûÏ¢»ò°´×¡Ëµ»°..."');
  140.     if (inputIdx === -1) {
  141.         inputIdx = xmlStr.indexOf("text='·¢ÏûÏ¢»ò°´×¡Ëµ»°...'");
  142.     }
  143.     if (inputIdx !== -1) {
  144.         var ¶Î = xmlStr.substring(inputIdx);
  145.         var m = ¶Î.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
  146.         if (m) {
  147.             print.log("✓ ÊäÈë¿ò¶¨Î»£ºhintÎı¾Æ¥Åä");
  148.             return {
  149.                 x: (parseInt(m[1]) + parseInt(m[3])) / 2,
  150.                 y: (parseInt(m[2]) + parseInt(m[4])) / 2
  151.             };
  152.         }
  153.     }

  154.     var editTextPattern = /<node[^>]*?class="android\.widget\.EditText"[^>]*?\/?>/g;
  155.     var etMatch;
  156.     while ((etMatch = editTextPattern.exec(xmlStr)) !== null) {
  157.         var etNode = etMatch[0];
  158.         var boundsMatch = etNode.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
  159.         if (boundsMatch) {
  160.             var ex1 = parseInt(boundsMatch[1]);
  161.             var ey1 = parseInt(boundsMatch[2]);
  162.             var ex2 = parseInt(boundsMatch[3]);
  163.             var ey2 = parseInt(boundsMatch[4]);
  164.             
  165.             if (ey1 > ÆÁÄ»¸ß * 0.8) {
  166.                 print.log("✓ ÊäÈë¿ò¶¨Î»£ºEditTextÆ¥Åä");
  167.                 return {
  168.                     x: (ex1 + ex2) / 2,
  169.                     y: (ey1 + ey2) / 2
  170.                 };
  171.             }
  172.         }
  173.     }

  174.     var viewGroupPattern = /<node[^>]*?class="android\.view\.ViewGroup"[^>]*?clickable="true"[^>]*?\/?>/g;
  175.     var vgMatch;
  176.     while ((vgMatch = viewGroupPattern.exec(xmlStr)) !== null) {
  177.         var vgNode = vgMatch[0];
  178.         var boundsMatch = vgNode.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
  179.         if (boundsMatch) {
  180.             var vx1 = parseInt(boundsMatch[1]);
  181.             var vy1 = parseInt(boundsMatch[2]);
  182.             var vx2 = parseInt(boundsMatch[3]);
  183.             var vy2 = parseInt(boundsMatch[4]);
  184.             
  185.             var vWidth = vx2 - vx1;
  186.             var vHeight = vy2 - vy1;
  187.             
  188.             if (vy1 > ÆÁÄ»¸ß * 0.8 && vWidth > ÆÁÄ»¿í * 0.4 && vWidth < ÆÁÄ»¿í * 0.8) {
  189.                 print.log("✓ ÊäÈë¿ò¶¨Î»£ºViewGroupÆ¥Åä");
  190.                 return {
  191.                     x: (vx1 + vx2) / 2,
  192.                     y: (vy1 + vy2) / 2
  193.                 };
  194.             }
  195.         }
  196.     }

  197.     print.log("⚠ δÕÒµ½ÊäÈë¿ò£¬Ê¹Óöµµ××ø±ê");
  198.     return {
  199.         x: ÆÁÄ»¿í * 0.4,
  200.         y: ÆÁÄ»¸ß * 0.92
  201.     };
  202. }

  203. // ²éÕÒ·¢ËͰ´Å¥×ø±ê
  204. // ǧÎÊÊäÈë¿òÏ·½ÓÒ²àµÄ°´Å¥£¬ÊäÈëÎÄ×Öºó»á±ä³É·¢ËͰ´Å¥
  205. function ²éÕÒ·¢ËͰ´Å¥ÖÐÐÄ(xml) {
  206.     var xmlStr = "" + xml;

  207.     // 1. ÓÅÏȲéÕÒÎÄ×Ö"·¢ËÍ"
  208.     var sendTextIdx = xmlStr.indexOf('text="·¢ËÍ"');
  209.     if (sendTextIdx === -1) {
  210.         sendTextIdx = xmlStr.indexOf("text='·¢ËÍ'");
  211.     }
  212.     if (sendTextIdx !== -1) {
  213.         var ¶Î = xmlStr.substring(sendTextIdx);
  214.         var m = ¶Î.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
  215.         if (m) {
  216.             print.log("✓ ·¢ËͰ´Å¥¶¨Î»£ºÎı¾Æ¥Åä");
  217.             return {
  218.                 x: (parseInt(m[1]) + parseInt(m[3])) / 2,
  219.                 y: (parseInt(m[2]) + parseInt(m[4])) / 2
  220.             };
  221.         }
  222.     }

  223.     // 2. ²éÕÒÆÁÄ»µ×²¿ÇøÓòµÄµã»÷ÇøÓò£¨FrameLayout£©
  224.     var clickablePattern = /<node[^>]*?clickable="true"[^>]*?bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"[^>]*?\/?>/g;
  225.     var clickMatch;
  226.     var candidates = [];

  227.     while ((clickMatch = clickablePattern.exec(xmlStr)) !== null) {
  228.         var cx1 = parseInt(clickMatch[1]);
  229.         var cy1 = parseInt(clickMatch[2]);
  230.         var cx2 = parseInt(clickMatch[3]);
  231.         var cy2 = parseInt(clickMatch[4]);

  232.         if (cy1 > ÆÁÄ»¸ß * 0.85) {
  233.             candidates.push({
  234.                 x1: cx1, y1: cy1, x2: cx2, y2: cy2,
  235.                 x: (cx1 + cx2) / 2,
  236.                 y: (cy1 + cy2) / 2
  237.             });
  238.         }
  239.     }

  240.     if (candidates.length > 0) {
  241.         candidates.sort(function(a, b) {
  242.             return b.x1 - a.x1;
  243.         });
  244.         print.log("✓ ÕÒµ½" + candidates.length + "¸öºòÑ¡°´Å¥£¬Ñ¡Ôñ×îÓÒ²àµÄ£¬×ø±ê(" + Math.round(candidates[0].x) + "," + Math.round(candidates[0].y) + ")");
  245.         return {
  246.             x: candidates[0].x,
  247.             y: candidates[0].y
  248.         };
  249.     }

  250.     // 3. ²éÕÒÆÁÄ»µ×²¿ÇøÓòµÄ FrameLayout£¨Ç§ÎÊ·¢ËͰ´Å¥ÌØÕ÷£©
  251.     var flPattern = /<node[^>]*?class="android\.widget\.FrameLayout"[^>]*?\/?>/g;
  252.     var flMatch;
  253.     var flCandidates = [];

  254.     while ((flMatch = flPattern.exec(xmlStr)) !== null) {
  255.         var flNode = flMatch[0];
  256.         
  257.         if (flNode.indexOf('clickable="true"') === -1) continue;
  258.         
  259.         var boundsMatch = flNode.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
  260.         if (!boundsMatch) continue;
  261.         
  262.         var fx1 = parseInt(boundsMatch[1]);
  263.         var fy1 = parseInt(boundsMatch[2]);
  264.         var fx2 = parseInt(boundsMatch[3]);
  265.         var fy2 = parseInt(boundsMatch[4]);

  266.         if (fy1 > ÆÁÄ»¸ß * 0.85) {
  267.             flCandidates.push({
  268.                 x1: fx1, y1: fy1, x2: fx2, y2: fy2,
  269.                 x: (fx1 + fx2) / 2,
  270.                 y: (fy1 + fy2) / 2
  271.             });
  272.         }
  273.     }

  274.     if (flCandidates.length > 0) {
  275.         flCandidates.sort(function(a, b) {
  276.             return b.x1 - a.x1;
  277.         });
  278.         print.log("✓ ÕÒµ½" + flCandidates.length + "¸öFrameLayoutºòÑ¡£¬Ñ¡Ôñ×îÓÒ²àµÄ£¬×ø±ê(" + Math.round(flCandidates[0].x) + "," + Math.round(flCandidates[0].y) + ")");
  279.         return {
  280.             x: flCandidates[0].x,
  281.             y: flCandidates[0].y
  282.         };
  283.     }

  284.     // 4. ¶µµ×£º»ùÓÚÆÁÄ»°Ù·Ö±È¶¨Î»·¢ËͰ´Å¥£¨ÊäÈë¿òÏ·½ÓҲࣩ
  285.     print.log("⚠ ʹÓöµµ×²ßÂÔ¶¨Î»·¢ËͰ´Å¥£¬×ø±ê(" + Math.round(ÆÁÄ»¿í * 0.92) + "," + Math.round(ÆÁÄ»¸ß * 0.92) + ")");
  286.     return {
  287.         x: ÆÁÄ»¿í * 0.92,
  288.         y: ÆÁÄ»¸ß * 0.92
  289.     };
  290. }

  291. // Õ³ÌùÎı¾µ½µ±Ç°½¹µãÊäÈë¿ò£¨¼ôÌù°å·¨£¬¼æÈÝÖÐÎÄ£©
  292. function Õ³ÌùÎı¾(Îı¾) {
  293.     try {
  294.         Clipboard.copy("" + Îı¾);
  295.     } catch (e) {
  296.         print.log("⚠ Clipboard.copy ʧ°Ü£º" + e.message);
  297.     }
  298.     sleep.millisecond(ºÁÃë = 300);

  299.     // Ë«±£ÏÕ£ºÍ¨¹ý shell д¼ôÌù°å
  300.     try {
  301.         agent.shell("service call clipboard 3 i32 1 s16 '" + Îı¾ + "' i32 0");
  302.     } catch (e2) {
  303.         // ºöÂÔ´íÎó
  304.     }
  305.     sleep.millisecond(ºÁÃë = 300);

  306.     // ´¥·¢Õ³Ìù£ºKEYCODE_PASTE = 279
  307.     agent.shell("input keyevent 279");
  308.     sleep.second(Ãë = 1);
  309.     print.log("✓ ÒÑÕ³ÌùÎı¾£º" + Îı¾);
  310. }

  311. // ²éÕÒ²¢µã»÷AI»Ø´ðµ×²¿µÄÕ¹¿ª°´Å¥£¨ÏòϼýÍ·£©
  312. // ǧÎʳ¤»Ø´ð»áÕÛµþÏÔʾ£¬ÐèÒªµã»÷µ×²¿ÏòϼýÍ·²ÅÄÜ¿´µ½ÍêÕûÄÚÈÝ
  313. function ²éÕÒ²¢µã»÷Õ¹¿ª°´Å¥(xml) {
  314.     var xmlStr = "" + xml;
  315.    
  316.     // 1. ²éÕÒÏûÏ¢Áбíµ×²¿ÖмäµÄÐ¡ÇøÓòclickable½Úµã£¨ÏòϼýÍ·ÌØÕ÷£©
  317.     var rvPattern = /<node[^>]*?class="androidx\.recyclerview\.widget\.RecyclerView"[^>]*?bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/g;
  318.     var rvMatch;
  319.     while ((rvMatch = rvPattern.exec(xmlStr)) !== null) {
  320.         var rx1 = parseInt(rvMatch[1]);
  321.         var ry1 = parseInt(rvMatch[2]);
  322.         var rx2 = parseInt(rvMatch[3]);
  323.         var ry2 = parseInt(rvMatch[4]);
  324.         var ¸ß¶È = ry2 - ry1;
  325.         if (¸ß¶È > 500) {
  326.             var viewPattern = /<node[^>]*?clickable="true"[^>]*?\/?>/g;
  327.             var viewMatch;
  328.             while ((viewMatch = viewPattern.exec(xmlStr)) !== null) {
  329.                 var vNode = viewMatch[0];
  330.                 var boundsMatch = vNode.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
  331.                 if (!boundsMatch) continue;
  332.                
  333.                 var vx1 = parseInt(boundsMatch[1]);
  334.                 var vy1 = parseInt(boundsMatch[2]);
  335.                 var vx2 = parseInt(boundsMatch[3]);
  336.                 var vy2 = parseInt(boundsMatch[4]);
  337.                
  338.                 var vWidth = vx2 - vx1;
  339.                 var vHeight = vy2 - vy1;
  340.                
  341.                 var ÔÚÇøÓòÄÚ = (vx1 >= rx1 && vx2 <= rx2 && vy1 >= ry1 && vy2 <= ry2);
  342.                 var ÊÇС°´Å¥ = (vWidth < 200 && vHeight < 200);
  343.                 var Ôڵײ¿ = (vy1 > ry1 + ¸ß¶È * 0.7);
  344.                
  345.                 if (ÔÚÇøÓòÄÚ && ÊÇС°´Å¥ && Ôڵײ¿) {
  346.                     var centerX = (vx1 + vx2) / 2;
  347.                     var centerY = (vy1 + vy2) / 2;
  348.                     agent.click(centerX, centerY);
  349.                     print.log("✓ Òѵã»÷Õ¹¿ª¼ýÍ·£¨ÏûÏ¢Áбíµ×²¿Ð¡°´Å¥£©£¬×ø±ê(" + Math.round(centerX) + "," + Math.round(centerY) + ")");
  350.                     sleep.second(Ãë = 2);
  351.                     return true;
  352.                 }
  353.             }
  354.             break;
  355.         }
  356.     }

  357.     // 2. ²éÕÒÎı¾"²é¿´È«²¿"µÄ°´Å¥
  358.     var textExpandIdx = xmlStr.indexOf('text="²é¿´È«²¿"');
  359.     if (textExpandIdx === -1) {
  360.         textExpandIdx = xmlStr.indexOf("text='²é¿´È«²¿'");
  361.     }
  362.     if (textExpandIdx !== -1) {
  363.         var ¶Î = xmlStr.substring(textExpandIdx);
  364.         var m = ¶Î.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
  365.         if (m) {
  366.             var x = (parseInt(m[1]) + parseInt(m[3])) / 2;
  367.             var y = (parseInt(m[2]) + parseInt(m[4])) / 2;
  368.             agent.click(x, y);
  369.             print.log("✓ Òѵã»÷²é¿´È«²¿°´Å¥£¬×ø±ê(" + Math.round(x) + "," + Math.round(y) + ")");
  370.             sleep.second(Ãë = 2);
  371.             return true;
  372.         }
  373.     }

  374.     // 3. ²éÕÒ content-desc º¬"Õ¹¿ª"»ò"¸ü¶à"µÄ°´Å¥
  375.     var expandIdx = xmlStr.indexOf('content-desc="Õ¹¿ª"');
  376.     if (expandIdx === -1) {
  377.         expandIdx = xmlStr.indexOf('content-desc="¸ü¶à"');
  378.     }
  379.     if (expandIdx !== -1) {
  380.         var ¶Î2 = xmlStr.substring(expandIdx);
  381.         var m2 = ¶Î2.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
  382.         if (m2) {
  383.             var x2 = (parseInt(m2[1]) + parseInt(m2[3])) / 2;
  384.             var y2 = (parseInt(m2[2]) + parseInt(m2[4])) / 2;
  385.             agent.click(x2, y2);
  386.             print.log("✓ Òѵã»÷Õ¹¿ª°´Å¥£¨content-desc£©£¬×ø±ê(" + Math.round(x2) + "," + Math.round(y2) + ")");
  387.             sleep.second(Ãë = 1);
  388.             return true;
  389.         }
  390.     }

  391.     // 4. ²éÕÒÎı¾"Õ¹¿ª"»ò"¸ü¶à"µÄ°´Å¥
  392.     var textExpandIdx2 = xmlStr.indexOf('text="Õ¹¿ª"');
  393.     if (textExpandIdx2 === -1) {
  394.         textExpandIdx2 = xmlStr.indexOf('text="¸ü¶à"');
  395.     }
  396.     if (textExpandIdx2 !== -1) {
  397.         var ¶Î3 = xmlStr.substring(textExpandIdx2);
  398.         var m3 = ¶Î3.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
  399.         if (m3) {
  400.             var x3 = (parseInt(m3[1]) + parseInt(m3[3])) / 2;
  401.             var y3 = (parseInt(m3[2]) + parseInt(m3[4])) / 2;
  402.             agent.click(x3, y3);
  403.             print.log("✓ Òѵã»÷Õ¹¿ª°´Å¥£¨Îı¾Æ¥Å䣩£¬×ø±ê(" + Math.round(x3) + "," + Math.round(y3) + ")");
  404.             sleep.second(Ãë = 1);
  405.             return true;
  406.         }
  407.     }

  408.     // 5. ²éÕÒÏûÏ¢Áбíµ×²¿ÇøÓòÄÚµÄImageView£¨¼ýͷͼ±ê£©
  409.     var ivPattern = /<node[^>]*?class="android\.widget\.ImageView"[^>]*?clickable="true"[^>]*?\/?>/g;
  410.     var ivMatch;
  411.     while ((ivMatch = ivPattern.exec(xmlStr)) !== null) {
  412.         var ivNode = ivMatch[0];
  413.         var boundsMatch = ivNode.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
  414.         if (!boundsMatch) continue;
  415.         
  416.         var ivx1 = parseInt(boundsMatch[1]);
  417.         var ivy1 = parseInt(boundsMatch[2]);
  418.         var ivx2 = parseInt(boundsMatch[3]);
  419.         var ivy2 = parseInt(boundsMatch[4]);
  420.         
  421.         var Ôڵײ¿ = (ivy1 > ÆÁÄ»¸ß * 0.5);
  422.         var ÔÚÖмä = (ivx1 > ÆÁÄ»¿í * 0.3 && ivx2 < ÆÁÄ»¿í * 0.7);
  423.         
  424.         if (Ôڵײ¿ && ÔÚÖмä) {
  425.             var centerX = (ivx1 + ivx2) / 2;
  426.             var centerY = (ivy1 + ivy2) / 2;
  427.             agent.click(centerX, centerY);
  428.             print.log("✓ Òѵã»÷ImageView£¨¼ýͷͼ±ê£©£¬×ø±ê(" + Math.round(centerX) + "," + Math.round(centerY) + ")");
  429.             sleep.second(Ãë = 2);
  430.             return true;
  431.         }
  432.     }

  433.     // 6. ×îÖÕ¶µµ×£ºµã»÷ÏûÏ¢Áбíµ×²¿ÖÐÐÄλÖã¨Õ¹¿ª¼ýͷͨ³£ÔÚÕâÀ
  434.     var rvPattern2 = /<node[^>]*?class="androidx\.recyclerview\.widget\.RecyclerView"[^>]*?bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/g;
  435.     var rvMatch2;
  436.     while ((rvMatch2 = rvPattern2.exec(xmlStr)) !== null) {
  437.         var rx1 = parseInt(rvMatch2[1]);
  438.         var ry1 = parseInt(rvMatch2[2]);
  439.         var rx2 = parseInt(rvMatch2[3]);
  440.         var ry2 = parseInt(rvMatch2[4]);
  441.         var ¸ß¶È = ry2 - ry1;
  442.         if (¸ß¶È > 500) {
  443.             var centerX = (rx1 + rx2) / 2;
  444.             var bottomY = ry2 - 60;
  445.             agent.click(centerX, bottomY);
  446.             print.log("✓ Òѵã»÷ÏûÏ¢Áбíµ×²¿ÖÐÐÄ£¨¶µµ×Õ¹¿ª£©£¬×ø±ê(" + Math.round(centerX) + "," + Math.round(bottomY) + ")");
  447.             sleep.second(Ãë = 2);
  448.             return true;
  449.         }
  450.     }

  451.     var pctX = ÆÁÄ»¿í / 2;
  452.     var pctY = ÆÁÄ»¸ß * 0.75;
  453.     agent.click(pctX, pctY);
  454.     print.log("✓ Òѵã»÷ÆÁÄ»µ×²¿Öм䣨×îÖÕ¶µµ×£©£¬×ø±ê(" + Math.round(pctX) + "," + Math.round(pctY) + ")");
  455.     sleep.second(Ãë = 1);
  456.     return true;
  457. }

  458. // ´ÓXML½âÎö RecyclerView µÄ±ß½ç£¬È»ºóÔÚÆäÖ묶¯µ½µ×²¿
  459. function »¬¶¯ÏûÏ¢ÁÐ±íµ½µ×²¿(xml) {
  460.     var xmlStr = "" + xml;

  461.     var rvPattern = /<node[^>]*?class="androidx\.recyclerview\.widget\.RecyclerView"[^>]*?bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/g;
  462.     var rvMatch;

  463.     while ((rvMatch = rvPattern.exec(xmlStr)) !== null) {
  464.         var rx1 = parseInt(rvMatch[1]);
  465.         var ry1 = parseInt(rvMatch[2]);
  466.         var rx2 = parseInt(rvMatch[3]);
  467.         var ry2 = parseInt(rvMatch[4]);
  468.         var ¸ß¶È = ry2 - ry1;

  469.         if (¸ß¶È > 500) {
  470.             var startX = (rx1 + rx2) / 2;
  471.             var startY = ry1 + (ry2 - ry1) * 0.2;
  472.             var endX = startX;
  473.             var endY = ry1 + (ry2 - ry1) * 0.8;

  474.             agent.swip(startX, startY, endX, endY, 500);
  475.             print.log("✓ ÒÑÔÚRecyclerViewÄÚ»¬¶¯£¬ÇøÓò[" + rx1 + "," + ry1 + "][" + rx2 + "," + ry2 + "]");
  476.             return;
  477.         }
  478.     }

  479.     print.log("⚠ δÕÒµ½RecyclerView£¬Ê¹ÓÃÆÁÄ»°Ù·Ö±È»¬¶¯");
  480.     agent.swip(ÆÁÄ»¿í / 2, ÆÁÄ»¸ß * 0.3, ÆÁÄ»¿í / 2, ÆÁÄ»¸ß * 0.8, 500);
  481. }

  482. // µÈ´ýAI»Ø´ðÍê³É
  483. // Âß¼­£º
  484. //   ½×¶Î1£ºµÈ´ýлشð³öÏÖ£¨Îı¾±ä»¯£©
  485. //   ½×¶Î2£ºµã»÷Õ¹¿ª°´Å¥£¨ÔÚÏûÏ¢Áбíµ×²¿£©
  486. //   ½×¶Î3£º¶¯Ì¬¼ì²â»Ø´ðÊÇ·ñÍê³É£¨Á¬Ðø2´Î¼ì²éÎı¾²»±ä£¬ÔòÈÏΪÍê³É£©
  487. // ²ÎÊý£º·¢ËÍǰµÄ×îºóÒ»ÌõAI»Ø´ðÎı¾£¨ÓÃÓڶԱȼì²âлشð£©
  488. // ·µ»Ø£ºÐ»شðµÄÎı¾ÄÚÈÝ
  489. function µÈ´ýAI»Ø´ðÍê³É(·¢ËÍǰµÄ×îºóÎı¾) {
  490.     var ÒѺÄʱ = 0;
  491.     var ¼ì²é¼ä¸ôÃë = 2;
  492.     var ÒѼì²âµ½Ð»شð = false;
  493.     var Òѵã»÷Õ¹¿ª°´Å¥ = false;
  494.     var ÉÏ´ÎÎı¾ = "";
  495.     var Îı¾²»±ä´ÎÊý = 0;
  496.     var ÒѼì²âµ½Ë¼¿¼Íê³É = false;

  497.     while (ÒѺÄʱ < µÈ´ý»Ø´ð³¬Ê±Ãë) {
  498.         sleep.second(Ãë = ¼ì²é¼ä¸ôÃë);
  499.         ÒѺÄʱ += ¼ì²é¼ä¸ôÃë;

  500.         var xml = »ñÈ¡UI();
  501.         var xmlStr = "" + xml;

  502.         if (!ÒѼì²âµ½Ð»شð) {
  503.             // ½×¶Î1£ºµÈ´ýлشð³öÏÖ
  504.             var ¿íËÉÁбí = ²É¼¯AI»Ø´ðÁбí(xml, false);
  505.             if (¿íËÉÁбí.length === 0) {
  506.                 continue;
  507.             }
  508.             var µ±Ç°×îºóÎı¾ = ¿íËÉÁбí[¿íËÉÁбí.length - 1];
  509.             if (µ±Ç°×îºóÎı¾ !== ·¢ËÍǰµÄ×îºóÎı¾ && ×Ö·û´®³¤¶È(µ±Ç°×îºóÎı¾) > 0) {
  510.                 print.log("✓ ¼ì²âµ½Ð»شð³öÏÖ£¨" + ÒѺÄʱ + "Ã룩");
  511.                 ÒѼì²âµ½Ð»شð = true;
  512.                 ÉÏ´ÎÎı¾ = µ±Ç°×îºóÎı¾;
  513.             }
  514.         } else {
  515.             // ½×¶Î2ºÍ3£ºµã»÷Õ¹¿ª°´Å¥²¢¼ì²âÍê³É
  516.             var µ±Ç°Áбí = ²É¼¯AI»Ø´ðÁбí(xml, false);
  517.             var µ±Ç°Îı¾ = "";
  518.             if (µ±Ç°Áбí.length > 0) {
  519.                 µ±Ç°Îı¾ = µ±Ç°Áбí[µ±Ç°Áбí.length - 1];
  520.             }

  521.             // ¼ì²éÊÇ·ñÍê³É˼¿¼£¨¿íËÉÌõ¼þ£©
  522.             if (!ÒѼì²âµ½Ë¼¿¼Íê³É && (xmlStr.indexOf("²Î¿¼") !== -1)) {
  523.                 print.log("✓ ¼ì²âµ½AI˼¿¼Íê³É£¨" + ÒѺÄʱ + "Ã룩");
  524.                 ÒѼì²âµ½Ë¼¿¼Íê³É = true;
  525.             }

  526.             // µã»÷Õ¹¿ª°´Å¥£¨ÔÚ¼ì²âµ½Ë¼¿¼Íê³ÉºóÁ¢¼´µã»÷£©
  527.             if (!Òѵã»÷Õ¹¿ª°´Å¥ && ÒѼì²âµ½Ë¼¿¼Íê³É) {
  528.                 ²éÕÒ²¢µã»÷Õ¹¿ª°´Å¥(xml);
  529.                 Òѵã»÷Õ¹¿ª°´Å¥ = true;
  530.                 print.log("✓ Òѵã»÷Õ¹¿ª°´Å¥");
  531.             }

  532.             // Èç¹ûû¼ì²âµ½Ë¼¿¼Íê³É£¬µ«Îı¾ºÜ³¤£¬Ò²³¢ÊÔµã»÷Õ¹¿ª
  533.             if (!Òѵã»÷Õ¹¿ª°´Å¥ && !ÒѼì²âµ½Ë¼¿¼Íê³É && ×Ö·û´®³¤¶È(µ±Ç°Îı¾) > 100 && ÒѺÄʱ >= 8) {
  534.                 ²éÕÒ²¢µã»÷Õ¹¿ª°´Å¥(xml);
  535.                 Òѵã»÷Õ¹¿ª°´Å¥ = true;
  536.                 print.log("✓ Îı¾½Ï³¤£¬³¢ÊÔµã»÷Õ¹¿ª°´Å¥");
  537.             }

  538.             // ¼ì²éÎı¾ÊÇ·ñÍ£Ö¹±ä»¯
  539.             if (µ±Ç°Îı¾ === ÉÏ´ÎÎı¾) {
  540.                 Îı¾²»±ä´ÎÊý++;
  541.             } else {
  542.                 Îı¾²»±ä´ÎÊý = 0;
  543.                 ÉÏ´ÎÎı¾ = µ±Ç°Îı¾;
  544.             }

  545.             // ÅжÏÍê³ÉÌõ¼þ£º
  546.             // 1. Îı¾Á¬Ðø2´Î²»±ä
  547.             // 2. ÇÒÎı¾³¤¶È´óÓÚ50
  548.             // 3. ÇÒÒѵȴýÖÁÉÙ6Ã루ȷ±£Õ¹¿ªºóÓÐʱ¼äÏÔʾÍêÕûÄÚÈÝ£©
  549.             if (Îı¾²»±ä´ÎÊý >= 2 && ×Ö·û´®³¤¶È(µ±Ç°Îı¾) > 50 && ÒѺÄʱ >= 6) {
  550.                 print.log("✓ ¼ì²âµ½»Ø´ðÍê³É£¨Îı¾Á¬Ðø²»±ä£©£¬·µ»Ø²É¼¯½á¹û");
  551.                 return µ±Ç°Îı¾;
  552.             }

  553.             // Èç¹ûÎı¾ºÜ¶Ìµ«Í£Ö¹±ä»¯ºÜ¾Ã£¬Ò²·µ»Ø
  554.             if (Îı¾²»±ä´ÎÊý >= 4 && ×Ö·û´®³¤¶È(µ±Ç°Îı¾) > 10 && ÒѺÄʱ >= 10) {
  555.                 print.log("✓ Îı¾Í£Ö¹±ä»¯ÒѾ㬷µ»Ø²É¼¯½á¹û");
  556.                 return µ±Ç°Îı¾;
  557.             }
  558.         }
  559.     }

  560.     // ³¬Ê±¶µµ×£º¾¡Á¿·µ»Øµ±Ç°Äܲɼ¯µ½µÄ×îºóÒ»Ìõ»Ø´ð
  561.     print.log("⚠ µÈ´ýAI»Ø´ð³¬Ê±£¨" + µÈ´ý»Ø´ð³¬Ê±Ãë + "Ã룩£¬³¢ÊÔ·µ»Øµ±Ç°ÄÚÈÝ");
  562.     var xml = »ñÈ¡UI();
  563.     var ¶µµ×Áбí = ²É¼¯AI»Ø´ðÁбí(xml, true);
  564.     if (¶µµ×Áбí.length > 0) {
  565.         var ¶µµ×Îı¾ = ¶µµ×Áбí[¶µµ×Áбí.length - 1];
  566.         if (¶µµ×Îı¾ !== ·¢ËÍǰµÄ×îºóÎı¾) {
  567.             print.log("✓ ³¬Ê±¶µµ×£º·µ»Øµ±Ç°²É¼¯µ½µÄ»Ø´ð");
  568.             return ¶µµ×Îı¾;
  569.         }
  570.     }
  571.     var ¶µµ×¿íËÉ = ²É¼¯AI»Ø´ðÁбí(xml, false);
  572.     if (¶µµ×¿íËÉ.length > 0) {
  573.         var ¶µµ×Îı¾2 = ¶µµ×¿íËÉ[¶µµ×¿íËÉ.length - 1];
  574.         if (¶µµ×Îı¾2 !== ·¢ËÍǰµÄ×îºóÎı¾ && ×Ö·û´®³¤¶È(¶µµ×Îı¾2) > 5) {
  575.             print.log("✓ ³¬Ê±¶µµ×£¨¿íËÉ£©£º·µ»Øµ±Ç°²É¼¯µ½µÄ»Ø´ð");
  576.             return ¶µµ×Îı¾2;
  577.         }
  578.     }
  579.     return null;
  580. }

  581. // »ñÈ¡µ±Ç°Ò³Ãæ×îºóÒ»ÌõAI»Ø´ðÎı¾£¨ÓÃÓÚ·¢ËÍǰ¼Ç¼»ùÏߣ©
  582. function »ñÈ¡µ±Ç°×îºóAI»Ø´ð(xml) {
  583.     var »Ø´ðÁбí = ²É¼¯AI»Ø´ðÁбí(xml);
  584.     if (»Ø´ðÁбí.length === 0) return "";
  585.     return »Ø´ðÁбí[»Ø´ðÁбí.length - 1];
  586. }

  587. // ¸ñʽ»¯¶Ô»°ÄÚÈÝÊä³ö£¨TXT¸ñʽ£©
  588. function ¸ñʽ»¯¶Ô»°(¶Ô»°Áбí) {
  589.     var result = "========== ǧÎʶԻ°¼Ç¼ ==========\n";
  590.     result += "²É¼¯Ê±¼ä£º" + new Date().toString() + "\n";
  591.     result += "¶Ô»°ÂÖÊý£º" + ¶Ô»°Áбí.length + "\n";
  592.     result += "==================================\n\n";
  593.    
  594.     for (var i = 0; i < ¶Ô»°Áбí.length; i++) {
  595.         result += "¡¾" + ¶Ô»°Áбí[i].½ÇÉ« + "¡¿\n";
  596.         result += ¶Ô»°Áбí[i].ÄÚÈÝ + "\n";
  597.         result += "----------------------------------\n";
  598.         if (i < ¶Ô»°Áбí.length - 1) {
  599.             result += "\n";
  600.         }
  601.     }
  602.    
  603.     return result;
  604. }

  605. // дÈëÎļþ£¨TXT¸ñʽ£¬GBK±àÂ룩
  606. function дÈëÎļþ(Îļþ·¾¶, ÄÚÈÝ) {
  607.     var javaStr = new java.lang.String(ÄÚÈÝ);
  608.    
  609.     try {
  610.         var fos = new java.io.FileOutputStream(Îļþ·¾¶);
  611.         fos.write(javaStr.getBytes("GBK"));
  612.         fos.close();
  613.         
  614.         print.log("✓ ÒÑдÈëÎļþ£¨TXT¸ñʽ£¬GBK±àÂ룩£º" + Îļþ·¾¶);
  615.         
  616.         var catResult = agent.shell("cat " + Îļþ·¾¶ + " | head -2");
  617.         print.log("✓ catÑéÖ¤½á¹û£º" + catResult);
  618.         
  619.         return true;
  620.     } catch (e) {
  621.         print.log("⚠ FileOutputStreamдÈëÒì³££º" + e.message);
  622.     }

  623.     try {
  624.         var base64Content = java.util.Base64.getEncoder().encodeToString(javaStr.getBytes("GBK"));
  625.         agent.shell("echo '" + base64Content + "' | base64 -d > " + Îļþ·¾¶);
  626.         
  627.         print.log("✓ ÒÑͨ¹ýbase64дÈëÎļþ£¨GBK£©£º" + Îļþ·¾¶);
  628.         
  629.         var catResult = agent.shell("cat " + Îļþ·¾¶ + " | head -2");
  630.         print.log("✓ catÑéÖ¤½á¹û£º" + catResult);
  631.         
  632.         return true;
  633.     } catch (e2) {
  634.         print.log("⚠ base64дÈëÒì³££º" + e2.message);
  635.     }

  636.     try {
  637.         var fos2 = new java.io.FileOutputStream(Îļþ·¾¶);
  638.         fos2.write(javaStr.getBytes("UTF-8"));
  639.         fos2.close();
  640.         
  641.         print.log("✓ ÒÑͨ¹ýFileOutputStreamдÈëÎļþ£¨UTF-8£©£º" + Îļþ·¾¶);
  642.         
  643.         return true;
  644.     } catch (e3) {
  645.         print.log("⚠ UTF-8дÈëÒì³££º" + e3.message);
  646.     }

  647.     print.log("✗ дÈëÎļþʧ°Ü£º" + Îļþ·¾¶);
  648.     return false;
  649. }

  650. // ========== Ö÷Á÷³Ì¿ªÊ¼ ==========

  651. // ²½Öè1£ºÆô¶¯Ç§ÎÊAPP
  652. print.log("\n========== ²½Öè1£ºÆô¶¯Ç§ÎÊAPP ==========");
  653. try {
  654.     app.openApp(ǧÎʰüÃû);
  655.     print.log("✓ ÒÑÆô¶¯Ç§ÎÊ");
  656. } catch (e) {
  657.     print.log("⚠ Æô¶¯Ê§°Ü£º" + e.message);
  658. }
  659. sleep.second(Ãë = 5);

  660. // ²½Öè2£ºÈ·ÈϽøÈë¶Ô»°Ò³Ãæ
  661. print.log("\n========== ²½Öè2£ºÈ·ÈϽøÈë¶Ô»°Ò³Ãæ ==========");
  662. var xml = »ñÈ¡UI();
  663. var hasRecyclerView = (xml.indexOf("androidx.recyclerview.widget.RecyclerView") !== -1);
  664. if (!hasRecyclerView) {
  665.     print.log("⚠ µ±Ç°Ò³Ãæ¿ÉÄܲ»ÊÇǧÎʶԻ°Ò³£¬Ôٴεȴý");
  666.     sleep.second(Ãë = 3);
  667.     xml = »ñÈ¡UI();
  668.     hasRecyclerView = (xml.indexOf("androidx.recyclerview.widget.RecyclerView") !== -1);
  669. }

  670. if (hasRecyclerView) {
  671.     print.log("✓ ÒѽøÈëǧÎʶԻ°Ò³Ãæ");
  672. } else {
  673.     print.log("⚠ δ¼ì²âµ½ÏûÏ¢ÁÐ±í£¬¼ÌÐø³¢ÊÔ");
  674. }

  675. // ²½Öè3£ºÑ­»··¢ËÍÎÊÌâ²¢²É¼¯»Ø´ð
  676. print.log("\n========== ²½Öè3£ºÑ­»··¢ËÍÎÊÌâ²¢²É¼¯»Ø´ð ==========");

  677. // ÍêÕû¶Ô»°ÁÐ±í£¨°üº¬Óû§ÎÊÌâºÍAI»Ø´ð£©
  678. var ÍêÕû¶Ô»° = [];

  679. // »ñÈ¡·¢Ë͵ÚÒ»¸öÎÊÌâǰµÄ×îºóAI»Ø´ðÎı¾£¨×÷Ϊ»ùÏߣ¬ÓÃÓÚ¼ì²âлشð£©
  680. var ³õʼ×îºóÎı¾ = »ñÈ¡µ±Ç°×îºóAI»Ø´ð(xml);
  681. print.log("✓ ³õÊ¼Ò³Ãæ×îºóÒ»ÌõAI»Ø´ð³¤¶È£º" + ×Ö·û´®³¤¶È(³õʼ×îºóÎı¾));

  682. // ¿ªÊ¼·¢ËÍÎÊÌâ
  683. for (var q = 0; q < Òª·¢Ë͵ÄÎÊÌâÁбí.length; q++) {
  684.     var µ±Ç°ÎÊÌâ = Òª·¢Ë͵ÄÎÊÌâÁбí[q];
  685.     print.log("\n---- µÚ " + (q + 1) + " / " + Òª·¢Ë͵ÄÎÊÌâÁбí.length + " ¸öÎÊÌâ ----");
  686.     print.log("ÎÊÌ⣺" + µ±Ç°ÎÊÌâ);

  687.     // 3.1 ÖØÐ»ñÈ¡UI£¬¶¨Î»ÊäÈë¿ò
  688.     xml = »ñÈ¡UI();
  689.     var ÊäÈë¿ò = ²éÕÒÊäÈë¿òÖÐÐÄ(xml);
  690.     if (!ÊäÈë¿ò) {
  691.         print.log("⚠ δÕÒµ½ÊäÈë¿ò£¬Ìø¹ý´ËÎÊÌâ");
  692.         sleep.second(Ãë = ÎÊÌâ¼ä¸ôÃë);
  693.         continue;
  694.     }

  695.     // 3.2 ¼Ç¼·¢ËÍǰµÄ×îºóÒ»ÌõAI»Ø´ðÎı¾£¨×÷Ϊ¼ì²âлشðµÄ»ùÏߣ©
  696.     var ·¢ËÍǰ×îºóÎı¾ = »ñÈ¡µ±Ç°×îºóAI»Ø´ð(xml);

  697.     // 3.3 µã»÷ÊäÈë¿ò»ñÈ¡½¹µã
  698.     agent.click(ÊäÈë¿ò.x, ÊäÈë¿ò.y);
  699.     sleep.second(Ãë = 1);

  700.     // 3.4 Õ³ÌùÎÊÌâÎı¾
  701.     Õ³ÌùÎı¾(µ±Ç°ÎÊÌâ);

  702.     // 3.5 ÖØÐ»ñÈ¡UI£¬²éÕÒ·¢ËͰ´Å¥
  703.     xml = »ñÈ¡UI();
  704.     var ·¢ËͰ´Å¥ = ²éÕÒ·¢ËͰ´Å¥ÖÐÐÄ(xml);

  705.     if (·¢ËͰ´Å¥) {
  706.         agent.click(·¢ËͰ´Å¥.x, ·¢ËͰ´Å¥.y);
  707.         print.log("✓ Òѵã»÷·¢ËͰ´Å¥");
  708.     } else {
  709.         // ¶µµ×£º°´»Ø³µ¼ü·¢ËÍ
  710.         agent.shell("input keyevent 66");
  711.         print.log("⚠ δÕÒµ½·¢ËͰ´Å¥£¬Òѳ¢ÊÔ°´»Ø³µ·¢ËÍ");
  712.     }

  713.     // 3.6 ¼Ç¼Óû§ÎÊÌâ
  714.     ÍêÕû¶Ô»°.push({
  715.         ½ÇÉ«: "Óû§",
  716.         ÄÚÈÝ: µ±Ç°ÎÊÌâ
  717.     });

  718.     // 3.7 µÈ´ýAI»Ø´ðÍê³É£¨»ùÓÚ"×îºóÒ»Ìõ»Ø´ðÎı¾±ä»¯"Åжϣ¬²»ÒÀÀµÊýÁ¿µÝÔö£©
  719.     print.log("µÈ´ýAI»Ø´ð£¬·¢ËÍǰ×îºóÎı¾³¤¶È£º" + ×Ö·û´®³¤¶È(·¢ËÍǰ×îºóÎı¾));

  720.     var лشðÎı¾ = µÈ´ýAI»Ø´ðÍê³É(·¢ËÍǰ×îºóÎı¾);
  721.     if (лشðÎı¾ && ×Ö·û´®³¤¶È(лشðÎı¾) > 0) {
  722.         ÍêÕû¶Ô»°.push({
  723.             ½ÇÉ«: "AI",
  724.             ÄÚÈÝ: лشðÎı¾
  725.         });
  726.         print.log("✓ ²É¼¯µ½Ð»ش𣬵±Ç°×ܶԻ°ÌõÊý£º" + ÍêÕû¶Ô»°.length);
  727.         print.log("--- ²É¼¯ÄÚÈÝ¿ªÊ¼ ---");
  728.         print.log(лشðÎı¾);
  729.         print.log("--- ²É¼¯ÄÚÈݽáÊø ---");
  730.     } else {
  731.         print.log("⚠ δÄܲɼ¯µ½Ð»شð");
  732.     }

  733.     sleep.second(Ãë = ÎÊÌâ¼ä¸ôÃë);
  734. }

  735. // ²½Öè4£º±£´æ¶Ô»°µ½Îļþ
  736. print.log("\n========== ²½Öè4£º±£´æ¶Ô»°µ½Îļþ ==========");
  737. var Êä³öÄÚÈÝ = ¸ñʽ»¯¶Ô»°(ÍêÕû¶Ô»°);
  738. var дÈë³É¹¦ = дÈëÎļþ(Êä³öÎļþ·¾¶, Êä³öÄÚÈÝ);

  739. if (дÈë³É¹¦) {
  740.     print.log("✓ ¶Ô»°Òѱ£´æµ½£º" + Êä³öÎļþ·¾¶);
  741.     print.log("✓ ×ܶԻ°ÌõÊý£º" + ÍêÕû¶Ô»°.length);
  742. } else {
  743.     print.log("✗ ±£´æÊ§°Ü£¬Çë¼ì²é´æ´¢È¨ÏÞ");
  744. }

  745. // ²½Öè5£º´òÓ¡È«²¿²É¼¯µ½µÄ¶Ô»°ÄÚÈÝ
  746. print.log("\n========== È«²¿²É¼¯ÄÚÈÝ ==========");
  747. print.log(Êä³öÄÚÈÝ);
  748. print.log("========== ÄÚÈݽáÊø ==========");

  749. print.log("\n===== ǧÎʶԻ°²É¼¯Á÷³Ì½áÊø =====");
¸´ÖÆ´úÂë


»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

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

¹Ø±Õ

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

map2

GMT+8, 2026-7-15 07:48 , Processed in 0.329446 second(s), 34 queries .

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