B2BÍøÂçÈí¼þ

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

AIWROK adb.exec() ʵÓù¤¾ß¿â ¡ª¡ª ³£Óù¦ÄÜÖ±½Óµ÷Óðæ

[¸´ÖÆÁ´½Ó]

1148

Ö÷Ìâ

1153

Ìû×Ó

7869

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

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

AIWROK adb.exec() ʵÓù¤¾ß¿â ¡ª¡ª ³£Óù¦ÄÜÖ±½Óµ÷Óðæ
AIWROK adb.exec() ʵÓù¤¾ß¿â ¡ª¡ª ³£Óù¦ÄÜÖ±½Óµ÷Óðæ B2BÍøÂçÈí¼þ


  1. // =============================================================================
  2. // AIWROK adb.exec() ʵÓù¤¾ß¿â ¡ª¡ª ³£Óù¦ÄÜÖ±½Óµ÷Óðæ
  3. // =============================================================================
  4. // ÊÊÓÃÆ½Ì¨£ºAIWROK °²×¿×Ô¶¯»¯Èí¼þ
  5. // ÒýÇæ£ºRhino (ES5)
  6. // ˵Ã÷£º´Ó adb_exec¸ß¼¶Ó÷¨Ê¾Àý.js ÖгéÈ¡×î³£ÓõŦÄÜ£¬
  7. //       ·â×°³É¿ÉÖ±½Óµ÷ÓõŤ¾ßº¯Êý£¬ÄÃÀ´¼´Óá£
  8. //
  9. // adb.exec(command, isRoot) ²ÎÊý˵Ã÷£º
  10. //   - command: shell ÃüÁî×Ö·û´®
  11. //   - isRoot:  true=ÒÔ root ȨÏÞÖ´ÐÐ(su -c), false=ÆÕͨȨÏÞ
  12. //   - ·µ»ØÖµ:  JSON ¸ñʽ {"errorMsg":"","success":"ʵ¼ÊÄÚÈÝ"}
  13. //
  14. // ʹÓ÷½Ê½£º
  15. //   ·½Ê½1£ºÖ±½ÓÔËÐб¾½Å±¾ ¡ú ²é¿´¸÷¹¦ÄÜÑÝʾÊä³ö
  16. //   ·½Ê½2£º½«±¾ÎļþÄÚÈݸ´ÖƵ½ÄãµÄÏîÄ¿ÖÐ ¡ú µ÷Óà AdbUtil.·½·¨Ãû()
  17. // =============================================================================

  18. print.log("===== adb.exec() ʵÓù¤¾ß¿â =====\n");

  19. // =============================================================================
  20. // ºËÐŤ¾ß²ã£º·µ»ØÖµÇåÏ´ + °²È«Ö´ÐÐ
  21. // =============================================================================

  22. /**
  23. * ÇåÏ´ adb.exec ·µ»ØÖµ
  24. * ´¦ÀíÁ½ÖÖ¸ñʽ£ºJSON {"success":"..."} ºÍ¾É¸ñʽ successMsg:...,errorMsg:...
  25. */
  26. function ÇåÏ´Êä³ö(ԭʼ½á¹û) {
  27.     if (!ԭʼ½á¹û) return "";
  28.     var ½á¹û = String(ԭʼ½á¹û);

  29.     // ¸ñʽ1: JSON {"errorMsg":"","success":"ʵ¼ÊÄÚÈÝ"}
  30.     if (½á¹û.charAt(0) === "{") {
  31.         try {
  32.             var json = JSON.parse(½á¹û);
  33.             if (json && json.success !== undefined) {
  34.                 // ¹ýÂË Broken pipe ¾¯¸æ£¨| head/grep Ìáǰ¹Ø±Õ¹ÜµÀµ¼Ö£¬²»Ó°Ïìʵ¼Ê½á¹û£©
  35.                 if (json.errorMsg && json.errorMsg !== "" &&
  36.                     json.errorMsg.indexOf("Broken pipe") === -1 &&
  37.                     json.errorMsg.indexOf("Failed to write") === -1) {
  38.                     print.log("  [¾¯¸æ] ÃüÁî´íÎó: " + json.errorMsg);
  39.                 }
  40.                 return String(json.success).trim();
  41.             }
  42.         } catch (e) {
  43.             // JSON.parse ʧ°Ü£¬ÕýÔòÌáÈ¡ success ×Ö¶Î
  44.             var m = ½á¹û.match(/"success"\s*:\s*"([\s\S]*?)"\s*[,}]/);
  45.             if (m) {
  46.                 return m[1].replace(/\\n/g, "\n").replace(/\\t/g, "\t")
  47.                            .replace(/\\"/g, '"').replace(/\\\\/g, "\\").trim();
  48.             }
  49.         }
  50.         return ½á¹û.trim();
  51.     }

  52.     // ¸ñʽ2: ¾É¸ñʽ successMsg:ÄÚÈÝ,errorMsg:ÄÚÈÝ
  53.     if (½á¹û.indexOf("successMsg:") === 0) {
  54.         ½á¹û = ½á¹û.substring("successMsg:".length);
  55.     }
  56.     var ´íÎóË÷Òý = ½á¹û.indexOf(",errorMsg:");
  57.     if (´íÎóË÷Òý !== -1) {
  58.         ½á¹û = ½á¹û.substring(0, ´íÎóË÷Òý);
  59.     }
  60.     return ½á¹û.trim();
  61. }

  62. /**
  63. * °²È«Ö´ÐÐÃüÁî²¢·µ»ØÇåÏ´ºóµÄ½á¹û
  64. * @param {string} ÃüÁî - shell ÃüÁî
  65. * @param {boolean} ÊÇ·ñroot - ÊÇ·ñÒÔ root ȨÏÞÖ´ÐÐ
  66. * @returns {string} ÇåÏ´ºóµÄÊä³ö
  67. */
  68. function Ö´ÐÐÃüÁî(ÃüÁî, ÊÇ·ñroot) {
  69.     try {
  70.         var ԭʼ = adb.exec(ÃüÁî, ÊÇ·ñroot || false);
  71.         return ÇåÏ´Êä³ö(String(ԭʼ));
  72.     } catch (e) {
  73.         print.log("  [Òì³£] " + ÃüÁî + " ¡ú " + e.message);
  74.         return "";
  75.     }
  76. }

  77. /**
  78. * °²È«Ö´ÐÐÃüÁ²»¹ØÐÄ·µ»ØÖµ£¬Ö»¹ØÐÄÊÇ·ñ³É¹¦£©
  79. * @returns {boolean} ÊÇ·ñÖ´ÐÐÎÞÒì³£
  80. */
  81. function Ö´ÐÐÃüÁĬ(ÃüÁî, ÊÇ·ñroot) {
  82.     try {
  83.         adb.exec(ÃüÁî, ÊÇ·ñroot || false);
  84.         return true;
  85.     } catch (e) {
  86.         return false;
  87.     }
  88. }


  89. // =============================================================================
  90. // Ä£¿éÒ»£ºÉ豸ÐÅÏ¢²É¼¯
  91. // =============================================================================

  92. var AdbUtil = {};

  93. /**
  94. * »ñÈ¡É豸»ù´¡ÐÅÏ¢£¨ÐͺÅ/Æ·ÅÆ/°²×¿°æ±¾/SDK/ÐòÁкţ©
  95. * @returns {Object} É豸ÐÅÏ¢¶ÔÏó
  96. */
  97. AdbUtil.»ñÈ¡É豸ÐÅÏ¢ = function() {
  98.     return {
  99.         ÐͺÅ:   Ö´ÐÐÃüÁî("getprop ro.product.model", false),
  100.         Æ·ÅÆ:   Ö´ÐÐÃüÁî("getprop ro.product.brand", false),
  101.         °²×¿°æ±¾: Ö´ÐÐÃüÁî("getprop ro.build.version.release", false),
  102.         SDK°æ±¾:  Ö´ÐÐÃüÁî("getprop ro.build.version.sdk", false),
  103.         ÖÆÔìÉÌ:  Ö´ÐÐÃüÁî("getprop ro.product.manufacturer", false),
  104.         ÐòÁкÅ:  Ö´ÐÐÃüÁî("getprop ro.serialno", false)
  105.     };
  106. };

  107. /**
  108. * »ñÈ¡ÆÁÄ»·Ö±æÂʺÍÃܶÈ
  109. * @returns {Object} {·Ö±æÂÊ:"Physical size: 1080x2400", ÃܶÈ:"Physical density: 440"}
  110. */
  111. AdbUtil.»ñÈ¡ÆÁÄ»ÐÅÏ¢ = function() {
  112.     return {
  113.         ·Ö±æÂÊ: Ö´ÐÐÃüÁî("wm size", false),
  114.         ÃܶÈ:   Ö´ÐÐÃüÁî("wm density", false)
  115.     };
  116. };

  117. /**
  118. * »ñÈ¡µç³ØÐÅÏ¢£¨¶à²ßÂÔ£ºdumpsys battery ¡ú sysfs Îļþ½âÎö£©
  119. * @returns {Object} {µçÁ¿:"85", ζÈ:"32.5¡ãC", ״̬:"³äµçÖÐ", ¼¼Êõ:"Li-ion"}
  120. */
  121. AdbUtil.»ñÈ¡µç³ØÐÅÏ¢ = function() {
  122.     var µç³Ø = { µçÁ¿: "", ζÈ: "", ״̬: "", ¼¼Êõ: "" };
  123.     var ״̬ӳÉä = {
  124.         "Charging": "³äµçÖÐ", "Discharging": "·ÅµçÖÐ",
  125.         "Full": "ÒѳäÂú", "Not charging": "δ³äµç",
  126.         "2": "³äµçÖÐ", "3": "·ÅµçÖÐ", "4": "ÒѳäÂú", "5": "δ³äµç"
  127.     };

  128.     // ²ßÂÔ1£ºdumpsys battery£¨ÐèÒª root ȨÏÞ£¬ÆÕͨȨÏÞȱÉÙ DUMP ȨÏÞ£©
  129.     var µç³ØÔ­Ê¼ = Ö´ÐÐÃüÁî("dumpsys battery", true);
  130.     if (µç³ØÔ­Ê¼ && µç³ØÔ­Ê¼.length > 0 && µç³ØÔ­Ê¼.indexOf("Permission Denial") === -1) {
  131.         var ÐÐ1 = µç³ØÔ­Ê¼.split("\n");
  132.         for (var i = 0; i < ÐÐ1.length; i++) {
  133.             var r = ÐÐ1[i].trim();
  134.             if (r.indexOf("level:") !== -1)
  135.                 µç³Ø.µçÁ¿ = r.replace("level:", "").trim();
  136.             if (r.indexOf("temperature:") !== -1) {
  137.                 var t = parseInt(r.replace("temperature:", "").trim(), 10);
  138.                 µç³Ø.ÎÂ¶È = isNaN(t) ? "" : (t / 10) + "¡ãC";
  139.             }
  140.             if (r.indexOf("status:") !== -1) {
  141.                 var s = r.replace("status:", "").trim();
  142.                 µç³Ø.״̬ = ״̬ӳÉä[s] || s || "";
  143.             }
  144.             if (r.indexOf("technology:") !== -1)
  145.                 µç³Ø.¼¼Êõ = r.replace("technology:", "").trim();
  146.         }
  147.     }

  148.     // ²ßÂÔ2£ºsysfs Îļþϵͳ£¨root ȨÏÞ£¬Â·¾¶¿ÉÄÜÒòÉ豸²»Í¬¶øÒ죩
  149.     if (!µç³Ø.µçÁ¿) {
  150.         var ·¾¶Áбí = [
  151.             "/sys/class/power_supply/battery",
  152.             "/sys/class/power_supply/bms",
  153.             "/sys/class/power_supply/max170xx_battery"
  154.         ];
  155.         for (var pi = 0; pi < ·¾¶Áбí.length && !µç³Ø.µçÁ¿; pi++) {
  156.             var »ù´¡Â·¾¶ = ·¾¶Áбí[pi];
  157.             var cap = Ö´ÐÐÃüÁî("cat " + »ù´¡Â·¾¶ + "/capacity", true);
  158.             if (cap && /^\d+$/.test(cap.trim())) µç³Ø.µçÁ¿ = cap.trim();
  159.             var ζÈԭʼ = Ö´ÐÐÃüÁî("cat " + »ù´¡Â·¾¶ + "/temp", true);
  160.             if (ζÈԭʼ && /^\d+$/.test(ζÈԭʼ.trim())) {
  161.                 var t2 = parseInt(ζÈԭʼ.trim(), 10);
  162.                 µç³Ø.ÎÂ¶È = isNaN(t2) ? "" : (t2 / 10) + "¡ãC";
  163.             }
  164.             var ״̬ԭʼ = Ö´ÐÐÃüÁî("cat " + »ù´¡Â·¾¶ + "/status", true);
  165.             if (״̬ԭʼ && ״̬ԭʼ.indexOf("No such") === -1 && ״̬ԭʼ.indexOf("Permission") === -1)
  166.                 µç³Ø.״̬ = ״̬ӳÉä[״̬ԭʼ.trim()] || ״̬ԭʼ.trim() || "";
  167.             var ¼¼Êõԭʼ = Ö´ÐÐÃüÁî("cat " + »ù´¡Â·¾¶ + "/technology", true);
  168.             if (¼¼Êõԭʼ && ¼¼Êõԭʼ.indexOf("No such") === -1 && ¼¼Êõԭʼ.indexOf("Permission") === -1)
  169.                 µç³Ø.¼¼Êõ = ¼¼Êõԭʼ.trim();
  170.         }
  171.     }

  172.     return µç³Ø;
  173. };

  174. /**
  175. * »ñÈ¡ÄÚ´æÐÅÏ¢
  176. * @returns {string} MemTotal / MemFree / MemAvailable ÐÐ
  177. */
  178. AdbUtil.»ñÈ¡ÄÚ´æÐÅÏ¢ = function() {
  179.     return Ö´ÐÐÃüÁî("cat /proc/meminfo | head -3", false);
  180. };

  181. /**
  182. * »ñÈ¡´æ´¢ÐÅÏ¢
  183. * @returns {string} df Êä³ö
  184. */
  185. AdbUtil.»ñÈ¡´æ´¢ÐÅÏ¢ = function() {
  186.     return Ö´ÐÐÃüÁî("df /sdcard", false);
  187. };


  188. // =============================================================================
  189. // Ä£¿é¶þ£ºÓ¦ÓùÜÀí
  190. // =============================================================================

  191. /**
  192. * ÁгöËùÓеÚÈý·½Ó¦ÓðüÃû
  193. * @returns {Array} °üÃûÊý×飬Èç ["com.tencent.mm", "com.taobao.taobao", ...]
  194. */
  195. AdbUtil.ÁгöµÚÈý·½Ó¦Óà = function() {
  196.     var Êä³ö = Ö´ÐÐÃüÁî("pm list packages -3", false);
  197.     if (!Êä³ö) return [];
  198.     var ÐÐ = Êä³ö.split("\n");
  199.     var ½á¹û = [];
  200.     for (var i = 0; i < ÐÐ.length; i++) {
  201.         var °üÃû = ÐÐ[i].replace("package:", "").trim();
  202.         if (°üÃû) ½á¹û.push(°üÃû);
  203.     }
  204.     return ½á¹û;
  205. };

  206. /**
  207. * ¼ì²éÓ¦ÓÃÊÇ·ñÒѰ²×°
  208. * @param {string} °üÃû - Ó¦ÓðüÃû
  209. * @returns {boolean} ÊÇ·ñÒѰ²×°
  210. */
  211. AdbUtil.Ó¦ÓÃÊÇ·ñ°²×° = function(°üÃû) {
  212.     var ½á¹û = Ö´ÐÐÃüÁî("pm list packages " + °üÃû, false);
  213.     return !!(½á¹û && ½á¹û.indexOf(°üÃû) !== -1);
  214. };

  215. /**
  216. * Æô¶¯Ó¦ÓÃ
  217. * @param {string} °üÃû - Ó¦ÓðüÃû
  218. * @returns {boolean} ÊÇ·ñÖ´Ðгɹ¦
  219. */
  220. AdbUtil.Æô¶¯Ó¦Óà = function(°üÃû) {
  221.     // ·½Ê½1£ºmonkey Æô¶¯£¨×îͨÓã©
  222.     var ½á¹û = Ö´ÐÐÃüÁĬ("monkey -p " + °üÃû + " 1 2>/dev/null", false);
  223.     if (½á¹û) return true;
  224.     // ·½Ê½2£ºam start£¨ÐèÒªÖªµÀÖ÷ Activity£¬ÕâÀïÓðüÃû³¢ÊÔ£©
  225.     return Ö´ÐÐÃüÁĬ("am start -n " + °üÃû + "/.MainActivity 2>/dev/null", false);
  226. };

  227. /**
  228. * ͨ¹ý Action Æô¶¯ÏµÍ³Ò³Ãæ
  229. * @param {string} action - Android action ³£Á¿
  230. * @returns {boolean}
  231. */
  232. AdbUtil.Æô¶¯Action = function(action) {
  233.     return Ö´ÐÐÃüÁĬ("am start -a " + action, false);
  234. };

  235. /**
  236. * Ç¿ÖÆÍ£Ö¹Ó¦ÓÃ
  237. * @param {string} °üÃû
  238. * @returns {boolean}
  239. */
  240. AdbUtil.Í£Ö¹Ó¦Óà = function(°üÃû) {
  241.     return Ö´ÐÐÃüÁĬ("am force-stop " + °üÃû, false);
  242. };

  243. /**
  244. * °²×° APK
  245. * @param {string} apk·¾¶ - APK Îļþ·¾¶£¬Èç /sdcard/app.apk
  246. * @param {boolean} ¸²¸Ç°²×° - true ʹÓà -r ¸²¸Ç°²×°
  247. * @returns {boolean}
  248. */
  249. AdbUtil.°²×°Ó¦Óà = function(apk·¾¶, ¸²¸Ç°²×°) {
  250.     var ²ÎÊý = ¸²¸Ç°²×° ? "-r " : "";
  251.     var ½á¹û = Ö´ÐÐÃüÁî("pm install " + ²ÎÊý + apk·¾¶, false);
  252.     return !!(½á¹û && ½á¹û.indexOf("Success") !== -1);
  253. };

  254. /**
  255. * Ð¶ÔØÓ¦ÓÃ
  256. * @param {string} °üÃû
  257. * @returns {boolean}
  258. */
  259. AdbUtil.Ð¶ÔØÓ¦Óà = function(°üÃû) {
  260.     var ½á¹û = Ö´ÐÐÃüÁî("pm uninstall " + °üÃû, false);
  261.     return !!(½á¹û && ½á¹û.indexOf("Success") !== -1);
  262. };

  263. /**
  264. * »ñȡӦÓð汾ÐÅÏ¢
  265. * @param {string} °üÃû
  266. * @returns {Object} {°æ±¾Ãû:"1.0.0", °æ±¾ºÅ:"10", °²×°Â·¾¶:"/data/app/..."}
  267. */
  268. AdbUtil.»ñȡӦÓÃÐÅÏ¢ = function(°üÃû) {
  269.     var ÐÅÏ¢ = { °æ±¾Ãû: "", °æ±¾ºÅ: "", °²×°Â·¾¶: "" };

  270.     // ²ßÂÔ1£ºpm path »ñÈ¡°²×°Â·¾¶£¨ÇáÁ¿ÃüÁ²»¿¨ËÀ£©
  271.     var ·¾¶ = Ö´ÐÐÃüÁî("pm path " + °üÃû, false);
  272.     if (·¾¶) ÐÅÏ¢.°²×°Â·¾¶ = ·¾¶.replace("package:", "").trim();

  273.     // ²ßÂÔ2£ºdumpsys package | grep version£¨grep ¶ÁÈ¡ÍêÕûÊä³öµ«Ö»Êä³öÆ¥ÅäÐУ¬JSON·µ»ØÖµºÜС£©
  274.     // ×¢Ò⣺²»ÄÜÓà head ½Ø¶Ï£¨°æ±¾ÐÅÏ¢ÔÚÊä³öĩβµÄ Packages ¶Î£¬head »á½Øµô£©
  275.     var °æ±¾Êä³ö = Ö´ÐÐÃüÁî("dumpsys package " + °üÃû + " | grep version", true);
  276.     if (°æ±¾Êä³ö && °æ±¾Êä³ö.length > 0 && °æ±¾Êä³ö.indexOf("Permission Denial") === -1) {
  277.         var ÐÐÊý×é = °æ±¾Êä³ö.split("\n");
  278.         for (var i = 0; i < ÐÐÊý×é.length; i++) {
  279.             var r = ÐÐÊý×é[i].trim();
  280.             if (r.indexOf("versionName=") !== -1 && !ÐÅÏ¢.°æ±¾Ãû) {
  281.                 ÐÅÏ¢.°æ±¾Ãû = r.replace("versionName=", "").split(" ")[0].trim();
  282.             } else if (r.indexOf("versionName ") !== -1 && !ÐÅÏ¢.°æ±¾Ãû) {
  283.                 ÐÅÏ¢.°æ±¾Ãû = r.replace("versionName ", "").split(" ")[0].trim();
  284.             }
  285.             if (r.indexOf("versionCode=") !== -1 && !ÐÅÏ¢.°æ±¾ºÅ) {
  286.                 ÐÅÏ¢.°æ±¾ºÅ = r.replace("versionCode=", "").split(" ")[0].trim();
  287.             } else if (r.indexOf("versionCode ") !== -1 && !ÐÅÏ¢.°æ±¾ºÅ) {
  288.                 ÐÅÏ¢.°æ±¾ºÅ = r.replace("versionCode ", "").split(" ")[0].trim();
  289.             }
  290.             // Ò²´¦Àí "versionName=xxx" ¸ñʽ£¨²»´ø¿Õ¸ñµÄÕûÐУ©
  291.             if (r.indexOf("versionName=") !== -1 && !ÐÅÏ¢.°æ±¾Ãû) {
  292.                 var m = r.match(/versionName=(\S+)/);
  293.                 if (m) ÐÅÏ¢.°æ±¾Ãû = m[1];
  294.             }
  295.             if (r.indexOf("versionCode=") !== -1 && !ÐÅÏ¢.°æ±¾ºÅ) {
  296.                 var m2 = r.match(/versionCode=(\S+)/);
  297.                 if (m2) ÐÅÏ¢.°æ±¾ºÅ = m2[1];
  298.             }
  299.         }
  300.     }

  301.     // ²ßÂÔ3£ºpm dump | grep version£¨»ØÍË·½°¸£©
  302.     if (!ÐÅÏ¢.°æ±¾Ãû) {
  303.         var pmÊä³ö = Ö´ÐÐÃüÁî("pm dump " + °üÃû + " | grep version", true);
  304.         if (pmÊä³ö && pmÊä³ö.length > 0 && pmÊä³ö.indexOf("Permission Denial") === -1) {
  305.             var pmÐÐ = pmÊä³ö.split("\n");
  306.             for (var j = 0; j < pmÐÐ.length; j++) {
  307.                 var pr = pmÐÐ[j].trim();
  308.                 if (pr.indexOf("versionName=") !== -1 && !ÐÅÏ¢.°æ±¾Ãû) {
  309.                     var pmM = pr.match(/versionName=(\S+)/);
  310.                     if (pmM) ÐÅÏ¢.°æ±¾Ãû = pmM[1];
  311.                 }
  312.                 if (pr.indexOf("versionCode=") !== -1 && !ÐÅÏ¢.°æ±¾ºÅ) {
  313.                     var pmM2 = pr.match(/versionCode=(\S+)/);
  314.                     if (pmM2) ÐÅÏ¢.°æ±¾ºÅ = pmM2[1];
  315.                 }
  316.             }
  317.         }
  318.     }

  319.     return ÐÅÏ¢;
  320. };


  321. // =============================================================================
  322. // Ä£¿éÈý£ºÎļþ²Ù×÷
  323. // =============================================================================

  324. /**
  325. * ÁгöĿ¼ÄÚÈÝ
  326. * @param {string} Ŀ¼·¾¶
  327. * @returns {string} ls -la Êä³ö
  328. */
  329. AdbUtil.ÁÐĿ¼ = function(Ŀ¼·¾¶) {
  330.     return Ö´ÐÐÃüÁî("ls -la " + Ŀ¼·¾¶, false);
  331. };

  332. /**
  333. * ¶ÁÈ¡ÎļþÄÚÈÝ
  334. * @param {string} Îļþ·¾¶
  335. * @returns {string} ÎļþÄÚÈÝ
  336. */
  337. AdbUtil.¶ÁÎļþ = function(Îļþ·¾¶) {
  338.     return Ö´ÐÐÃüÁî("cat " + Îļþ·¾¶ + " 2>/dev/null", false);
  339. };

  340. /**
  341. * дÈëÎļþ£¨¸²¸ÇдÈ룩
  342. * @param {string} Îļþ·¾¶
  343. * @param {string} ÄÚÈÝ - ½öÖ§³Ö²»º¬µ¥ÒýºÅµÄÄÚÈÝ£¬º¬µ¥ÒýºÅÐè×ÔÐÐתÒå
  344. * @returns {boolean}
  345. */
  346. AdbUtil.дÎļþ = function(Îļþ·¾¶, ÄÚÈÝ) {
  347.     return Ö´ÐÐÃüÁĬ("echo '" + ÄÚÈÝ + "' > " + Îļþ·¾¶, false);
  348. };

  349. /**
  350. * ×·¼ÓдÈëÎļþ
  351. * @param {string} Îļþ·¾¶
  352. * @param {string} ÄÚÈÝ
  353. * @returns {boolean}
  354. */
  355. AdbUtil.×·¼ÓдÎļþ = function(Îļþ·¾¶, ÄÚÈÝ) {
  356.     return Ö´ÐÐÃüÁĬ("echo '" + ÄÚÈÝ + "' >> " + Îļþ·¾¶, false);
  357. };

  358. /**
  359. * ¸´ÖÆÎļþ
  360. * @param {string} Դ·¾¶
  361. * @param {string} Ä¿±ê·¾¶
  362. * @returns {boolean}
  363. */
  364. AdbUtil.¸´ÖÆÎļþ = function(Դ·¾¶, Ä¿±ê·¾¶) {
  365.     return Ö´ÐÐÃüÁĬ("cp " + Դ·¾¶ + " " + Ä¿±ê·¾¶ + " 2>/dev/null", false);
  366. };

  367. /**
  368. * ´´½¨Ä¿Â¼£¨µÝ¹é´´½¨£©
  369. * @param {string} Ŀ¼·¾¶
  370. * @returns {boolean}
  371. */
  372. AdbUtil.´´½¨Ä¿Â¼ = function(Ŀ¼·¾¶) {
  373.     return Ö´ÐÐÃüÁĬ("mkdir -p " + Ŀ¼·¾¶, false);
  374. };

  375. /**
  376. * ɾ³ýÎļþ»òĿ¼
  377. * @param {string} ·¾¶
  378. * @returns {boolean}
  379. */
  380. AdbUtil.ɾ³ý = function(·¾¶) {
  381.     return Ö´ÐÐÃüÁĬ("rm -rf " + ·¾¶ + " 2>/dev/null", false);
  382. };

  383. /**
  384. * »ñÈ¡Îļþ´óС£¨×Ö½Ú£©
  385. * @param {string} Îļþ·¾¶
  386. * @returns {number} Îļþ´óС£¨×Ö½Ú£©£¬Ê§°Ü·µ»Ø -1
  387. */
  388. AdbUtil.Îļþ´óС = function(Îļþ·¾¶) {
  389.     var ½á¹û = Ö´ÐÐÃüÁî("stat -c %s " + Îļþ·¾¶ + " 2>/dev/null", false);
  390.     var ´óС = parseInt(½á¹û.trim(), 10);
  391.     return isNaN(´óС) ? -1 : ´óС;
  392. };


  393. // =============================================================================
  394. // Ä£¿éËÄ£ºÊäÈëÄ£Äâ
  395. // =============================================================================

  396. /**
  397. * Ä£Äâµã»÷×ø±ê
  398. * @param {number} x - X ×ø±ê
  399. * @param {number} y - Y ×ø±ê
  400. * @returns {boolean}
  401. */
  402. AdbUtil.µã»÷ = function(x, y) {
  403.     return Ö´ÐÐÃüÁĬ("input tap " + x + " " + y, false);
  404. };

  405. /**
  406. * Ä£Ä⻬¶¯
  407. * @param {number} x1 - Æðµã X
  408. * @param {number} y1 - Æðµã Y
  409. * @param {number} x2 - ÖÕµã X
  410. * @param {number} y2 - ÖÕµã Y
  411. * @param {number} ʱ³¤ - »¬¶¯Ê±³¤£¨ºÁÃ룩£¬Ä¬ÈÏ 300
  412. * @returns {boolean}
  413. */
  414. AdbUtil.»¬¶¯ = function(x1, y1, x2, y2, ʱ³¤) {
  415.     ʱ³¤ = ʱ³¤ || 300;
  416.     return Ö´ÐÐÃüÁĬ("input swipe " + x1 + " " + y1 + " " + x2 + " " + y2 + " " + ʱ³¤, false);
  417. };

  418. /**
  419. * Ä£Äⳤ°´£¨ÆðµãÖÕµãÏàͬ£¬Ê±³¤ > 500ms£©
  420. * @param {number} x
  421. * @param {number} y
  422. * @param {number} ʱ³¤ - ³¤°´Ê±³¤£¨ºÁÃ룩£¬Ä¬ÈÏ 1000
  423. * @returns {boolean}
  424. */
  425. AdbUtil.³¤°´ = function(x, y, ʱ³¤) {
  426.     ʱ³¤ = ʱ³¤ || 1000;
  427.     return Ö´ÐÐÃüÁĬ("input swipe " + x + " " + y + " " + x + " " + y + " " + ʱ³¤, false);
  428. };

  429. /**
  430. * Ä£ÄâÊäÈëÎÄ×Ö£¨½öÖ§³Ö ASCII£©
  431. * @param {string} ÎÄ×Ö
  432. * @returns {boolean}
  433. */
  434. AdbUtil.ÊäÈëÎÄ×Ö = function(ÎÄ×Ö) {
  435.     // input text ²»Ö§³Ö¿Õ¸ñ£¬ÐèÓà %s Ìæ´ú
  436.     var Ìæ»» = ÎÄ×Ö.replace(/ /g, "%s");
  437.     return Ö´ÐÐÃüÁĬ("input text '" + Ìæ»» + "'", false);
  438. };

  439. /**
  440. * Ä£Äâ°´¼üʼþ
  441. * @param {number|string} ¼üÂë - KeyEvent ¼üÂ룬Èç 4=·µ»Ø, 3=Home, 26=µçÔ´
  442. * @returns {boolean}
  443. *
  444. * ³£ÓüüÂëËٲ飺
  445. *   3=HOME  4=BACK  5=ºô½Ð  6=¹Ò¶Ï  24=ÒôÁ¿+  25=ÒôÁ¿-
  446. *   26=µçÔ´  27=Ïà»ú  66=»Ø³µ  82=²Ëµ¥  84=ËÑË÷  279=Õ³Ìù
  447. */
  448. AdbUtil.°´¼ü = function(¼üÂë) {
  449.     return Ö´ÐÐÃüÁĬ("input keyevent " + ¼üÂë, false);
  450. };

  451. /**
  452. * Ä£Äâ·µ»Ø¼ü
  453. */
  454. AdbUtil.·µ»Ø¼ü = function() {
  455.     return AdbUtil.°´¼ü(4);
  456. };

  457. /**
  458. * Ä£Äâ Home ¼ü
  459. */
  460. AdbUtil.Home¼ü = function() {
  461.     return AdbUtil.°´¼ü(3);
  462. };


  463. // =============================================================================
  464. // Ä£¿éÎ壺ǰ̨ӦÓüì²â + ½ø³Ì¹ÜÀí
  465. // =============================================================================

  466. /**
  467. * »ñÈ¡µ±Ç°Ç°Ì¨°üÃû£¨¶à²ßÂÔ£ºdumpsys window ¡ú dumpsys activity ¡ú Ô­Éú·½·¨£©
  468. * @returns {string} ǰ̨°üÃû£¬Èç "com.tencent.mm"
  469. */
  470. AdbUtil.»ñȡǰ̨°üÃû = function() {
  471.     // ²ßÂÔ1£ºdumpsys activity activities | head -50£¨ÏÞÖÆÊä³ö·ÀÖ¹¿¨ËÀ£¬mResumedActivityÔÚǰ30ÐÐÄÚ£©
  472.     var activityÊä³ö = Ö´ÐÐÃüÁî("dumpsys activity activities | head -50", true);
  473.     if (activityÊä³ö && activityÊä³ö.length > 0 && activityÊä³ö.indexOf("Permission Denial") === -1) {
  474.         var ÐÐÊý×é = activityÊä³ö.split("\n");
  475.         for (var fi = 0; fi < ÐÐÊý×é.length; fi++) {
  476.             var ÐÐ = ÐÐÊý×é[fi].trim();
  477.             if (ÐÐ.indexOf("mResumedActivity") !== -1 ||
  478.                 ÐÐ.indexOf("topResumedActivity") !== -1 ||
  479.                 ÐÐ.indexOf("ResumedActivity") !== -1) {
  480.                 var б¸Ü = ÐÐ.indexOf("/");
  481.                 if (б¸Ü !== -1) {
  482.                     var ǰ¶Î = ÐÐ.substring(0, б¸Ü);
  483.                     var ¿Õ¸ñ = ǰ¶Î.lastIndexOf(" ");
  484.                     if (¿Õ¸ñ !== -1) {
  485.                         var °üÃû = ǰ¶Î.substring(¿Õ¸ñ + 1).trim();
  486.                         if (°üÃû && °üÃû.indexOf(".") !== -1) return °üÃû;
  487.                     }
  488.                 }
  489.             }
  490.         }
  491.     }

  492.     // ²ßÂÔ2£ºdumpsys window | head -30£¨ÏÞÖÆÊä³ö·ÀÖ¹¿¨ËÀ£¬mCurrentFocusÔÚǰ10ÐÐÄÚ£©
  493.     var windowÊä³ö = Ö´ÐÐÃüÁî("dumpsys window | head -30", true);
  494.     if (windowÊä³ö && windowÊä³ö.length > 0 && windowÊä³ö.indexOf("Permission Denial") === -1) {
  495.         var winÐÐ = windowÊä³ö.split("\n");
  496.         for (var wi = 0; wi < winÐÐ.length; wi++) {
  497.             var wÐÐ = winÐÐ[wi].trim();
  498.             if (wÐÐ.indexOf("mCurrentFocus") !== -1 ||
  499.                 wÐÐ.indexOf("mFocusedApp") !== -1 ||
  500.                 wÐÐ.indexOf("mFocusedWindow") !== -1) {
  501.                 var wб¸Ü = wÐÐ.indexOf("/");
  502.                 if (wб¸Ü !== -1) {
  503.                     var wǰ¶Î = wÐÐ.substring(0, wб¸Ü);
  504.                     var w¿Õ¸ñ = wǰ¶Î.lastIndexOf(" ");
  505.                     if (w¿Õ¸ñ !== -1) {
  506.                         var w°üÃû = wǰ¶Î.substring(w¿Õ¸ñ + 1).trim();
  507.                         if (w°üÃû && w°üÃû.indexOf(".") !== -1) return w°üÃû;
  508.                     }
  509.                 }
  510.             }
  511.         }
  512.     }

  513.     // ²ßÂÔ3£ºAIWROK Ô­Éú·½·¨
  514.     try {
  515.         if (typeof auto !== "undefined") {
  516.             if (auto.getTopPackName) {
  517.                 var p = String(auto.getTopPackName());
  518.                 if (p && p.length > 0) return p;
  519.             }
  520.         }
  521.     } catch (e) {}

  522.     return "";
  523. };

  524. /**
  525. * »ñÈ¡µ±Ç°Ç°Ì¨ Activity È«Ãû
  526. * @returns {string} Èç "com.tencent.mm/.ui.LauncherUI"
  527. */
  528. AdbUtil.»ñȡǰ̨Activity = function() {
  529.     // ²ßÂÔ1£ºdumpsys activity activities | head -50£¨ÏÞÖÆÊä³ö·ÀÖ¹¿¨ËÀ£©
  530.     var activityÊä³ö = Ö´ÐÐÃüÁî("dumpsys activity activities | head -50", true);
  531.     if (activityÊä³ö && activityÊä³ö.length > 0 && activityÊä³ö.indexOf("Permission Denial") === -1) {
  532.         var ÐÐÊý×é = activityÊä³ö.split("\n");
  533.         for (var fi = 0; fi < ÐÐÊý×é.length; fi++) {
  534.             var ÐÐ = ÐÐÊý×é[fi].trim();
  535.             if (ÐÐ.indexOf("mResumedActivity") !== -1 ||
  536.                 ÐÐ.indexOf("topResumedActivity") !== -1) {
  537.                 var m = ÐÐ.match(/(\w+\.\w+\.\w+\/\S+)/);
  538.                 if (m) return m[1].replace(/[}]/g, "").trim();
  539.             }
  540.         }
  541.     }
  542.     // ²ßÂÔ2£ºdumpsys window | head -30£¨ÏÞÖÆÊä³ö·ÀÖ¹¿¨ËÀ£©
  543.     var windowÊä³ö = Ö´ÐÐÃüÁî("dumpsys window | head -30", true);
  544.     if (windowÊä³ö && windowÊä³ö.length > 0 && windowÊä³ö.indexOf("Permission Denial") === -1) {
  545.         var winÐÐ = windowÊä³ö.split("\n");
  546.         for (var wi = 0; wi < winÐÐ.length; wi++) {
  547.             var wÐÐ = winÐÐ[wi].trim();
  548.             if (wÐÐ.indexOf("mCurrentFocus") !== -1 ||
  549.                 wÐÐ.indexOf("mFocusedApp") !== -1) {
  550.                 var m2 = wÐÐ.match(/(\w+\.\w+\.\w+\/\S+)/);
  551.                 if (m2) return m2[1].replace(/[}]/g, "").trim();
  552.             }
  553.         }
  554.     }
  555.     return "";
  556. };

  557. /**
  558. * ¼ì²éÖ¸¶¨Ó¦ÓÃÊÇ·ñÔÚǰ̨
  559. * @param {string} °üÃû
  560. * @returns {boolean}
  561. */
  562. AdbUtil.ÊÇ·ñÔÚǰ̨ = function(°üÃû) {
  563.     var ǰ̨ = AdbUtil.»ñȡǰ̨°üÃû();
  564.     return ǰ̨ === °üÃû;
  565. };

  566. /**
  567. * ¼ì²éÖ¸¶¨½ø³ÌÊÇ·ñÔÚÔËÐÐ
  568. * @param {string} °üÃû»ò½ø³ÌÃû
  569. * @returns {boolean}
  570. */
  571. AdbUtil.½ø³ÌÊÇ·ñ´æÔÚ = function(°üÃû) {
  572.     // ²ßÂÔ1£ºps -A | grep£¨ÐèÒª root ȨÏÞ£¬Android 14 ÆÕͨȨÏÞÖ»ÄÜ¿´µ½µ±Ç°»á»°½ø³Ì£©
  573.     var ½á¹û = Ö´ÐÐÃüÁî("ps -A | grep " + °üÃû, true);
  574.     if (½á¹û && ½á¹û.length > 0 && ½á¹û.indexOf(°üÃû) !== -1) return true;
  575.     // ²ßÂÔ2£ºpgrep -f£¨ÐèÒª root ȨÏÞ£©
  576.     var pgrep½á¹û = Ö´ÐÐÃüÁî("pgrep -f " + °üÃû, true);
  577.     if (pgrep½á¹û && pgrep½á¹û.length > 0 && /^\d+/.test(pgrep½á¹û.trim())) return true;
  578.     // ²ßÂÔ3£ºpidof£¨ÐèÒª root ȨÏÞ£©
  579.     var pidof½á¹û = Ö´ÐÐÃüÁî("pidof " + °üÃû, true);
  580.     if (pidof½á¹û && pidof½á¹û.length > 0 && pidof½á¹û.indexOf("pidof:") === -1 && /^\d+/.test(pidof½á¹û.trim())) return true;
  581.     // ²ßÂÔ4£ºps -A È«Á¿Êä³öÔÚ JS ÖÐËÑË÷£¨root ȨÏÞ£©
  582.     var psÊä³ö = Ö´ÐÐÃüÁî("ps -A", true);
  583.     if (psÊä³ö && psÊä³ö.length > 0) {
  584.         var psÐÐ = psÊä³ö.split("\n");
  585.         for (var pi = 0; pi < psÐÐ.length; pi++) {
  586.             if (psÐÐ[pi].indexOf(°üÃû) !== -1) return true;
  587.         }
  588.     }
  589.     return false;
  590. };

  591. /**
  592. * »ñÈ¡ CPU Õ¼ÓÃ×î¸ßµÄ½ø³Ì
  593. * @returns {string} top ÃüÁîǰ 15 ÐÐ
  594. */
  595. AdbUtil.»ñÈ¡CPUÕ¼Óà = function() {
  596.     // ÐèÒª root ȨÏÞ£¬ÆÕͨȨÏÞ top Ö»ÏÔʾµ±Ç°»á»°µÄ 3 ¸ö½ø³Ì
  597.     return Ö´ÐÐÃüÁî("top -n 1 -b | head -15", true);
  598. };

  599. /**
  600. * ɱËÀÖ¸¶¨½ø³Ì£¨ÐèÒª root »òͬ UID£©
  601. * @param {number|string} pid - ½ø³Ì ID »ò°üÃû
  602. * @param {boolean} ÊÇ·ñroot
  603. * @returns {boolean}
  604. */
  605. AdbUtil.ɱËÀ½ø³Ì = function(pid, ÊÇ·ñroot) {
  606.     // Èç¹û´«ÈëµÄÊǰüÃû£¬ÏÈ»ñÈ¡ PID£¨ÐèÒª root ȨÏÞ£©
  607.     if (typeof pid === "string" && pid.indexOf(".") !== -1) {
  608.         var ps½á¹û = Ö´ÐÐÃüÁî("ps -A | grep " + pid, true);
  609.         if (ps½á¹û && ps½á¹û.indexOf(pid) !== -1) {
  610.             var ×Ö¶Î = ps½á¹û.trim().split(/\s+/);
  611.             if (×Ö¶Î.length >= 2) pid = ×Ö¶Î[1]; // ps Êä³öµÚ¶þÁÐÊÇ PID
  612.         }
  613.     }
  614.     return Ö´ÐÐÃüÁĬ("kill " + pid, ÊÇ·ñroot || true);
  615. };


  616. // =============================================================================
  617. // Ä£¿éÁù£º½ØÍ¼ + ÍøÂçÕï¶Ï
  618. // =============================================================================

  619. /**
  620. * ½ØÍ¼±£´æµ½Îļþ
  621. * @param {string} ±£´æÂ·¾¶ - Èç /sdcard/screenshot.png
  622. * @returns {boolean} ÊÇ·ñ³É¹¦
  623. */
  624. AdbUtil.½ØÍ¼ = function(±£´æÂ·¾¶) {
  625.     ±£´æÂ·¾¶ = ±£´æÂ·¾¶ || ("/sdcard/screenshot_" + Date.now() + ".png");

  626.     // ²ßÂÔ1£ºscreencap ÆÕͨȨÏÞ£¨Ôö¼ÓÑÓʱȷ±£ÎļþдÈëÍê³É£©
  627.     Ö´ÐÐÃüÁĬ("screencap -p " + ±£´æÂ·¾¶, false);
  628.     sleep.millisecond(1000);
  629.     var ´óС1 = AdbUtil.Îļþ´óС(±£´æÂ·¾¶);
  630.     if (´óС1 > 0) {
  631.         print.log("  ½ØÍ¼Òѱ£´æ: " + ±£´æÂ·¾¶);
  632.         return true;
  633.     }

  634.     // ²ßÂÔ2£ºscreencap root ȨÏÞ
  635.     Ö´ÐÐÃüÁĬ("screencap -p " + ±£´æÂ·¾¶, true);
  636.     sleep.millisecond(1000);
  637.     var ´óС2 = AdbUtil.Îļþ´óС(±£´æÂ·¾¶);
  638.     if (´óС2 > 0) {
  639.         print.log("  ½ØÍ¼Òѱ£´æ(root): " + ±£´æÂ·¾¶);
  640.         return true;
  641.     }

  642.     // ²ßÂÔ3£ºÏȽØÍ¼µ½ÁÙʱÎļþÔÙ¸´ÖÆ£¨²¿·ÖÉ豸 screencap ²»Ö§³ÖÖ±½Óд sdcard£©
  643.     var ÁÙʱ·¾¶ = "/data/local/tmp/screenshot_tmp.png";
  644.     Ö´ÐÐÃüÁĬ("screencap -p " + ÁÙʱ·¾¶, false);
  645.     sleep.millisecond(1000);
  646.     var ´óС3 = AdbUtil.Îļþ´óС(ÁÙʱ·¾¶);
  647.     if (´óС3 > 0) {
  648.         Ö´ÐÐÃüÁĬ("cp " + ÁÙʱ·¾¶ + " " + ±£´æÂ·¾¶, false);
  649.         sleep.millisecond(300);
  650.         Ö´ÐÐÃüÁĬ("rm -f " + ÁÙʱ·¾¶, false);
  651.         print.log("  ½ØÍ¼Òѱ£´æ(ÁÙʱÎļþÖÐת): " + ±£´æÂ·¾¶);
  652.         return true;
  653.     }

  654.     // ²ßÂÔ4£ºÊ¹Óà input keyevent 120 (KEYCODE_SYSRQ) ½ØÆÁϵͳ¿ì½Ý¼ü
  655.     Ö´ÐÐÃüÁĬ("input keyevent 120", false);
  656.     sleep.millisecond(1500);
  657.     // ϵͳ½ØÍ¼Ä¬Èϱ£´æµ½ /sdcard/Pictures/Screenshots/
  658.     var ϵͳ½ØÍ¼Ä¿Â¼ = Ö´ÐÐÃüÁî("ls -t /sdcard/Pictures/Screenshots/ | head -1", false);
  659.     if (ϵͳ½ØÍ¼Ä¿Â¼ && ϵͳ½ØÍ¼Ä¿Â¼.length > 0) {
  660.         var ϵͳ½ØÍ¼Â·¾¶ = "/sdcard/Pictures/Screenshots/" + ϵͳ½ØÍ¼Ä¿Â¼.trim();
  661.         var ϵͳ´óС = AdbUtil.Îļþ´óС(ϵͳ½ØÍ¼Â·¾¶);
  662.         if (ϵͳ´óС > 0) {
  663.             Ö´ÐÐÃüÁĬ("cp " + ϵͳ½ØÍ¼Â·¾¶ + " " + ±£´æÂ·¾¶, false);
  664.             sleep.millisecond(300);
  665.             print.log("  ½ØÍ¼Òѱ£´æ(ϵͳ¿ì½Ý¼ü): " + ±£´æÂ·¾¶);
  666.             return true;
  667.         }
  668.     }

  669.     print.log("  ½ØÍ¼Ê§°Ü£¨screencap ²»¿ÉÓûòȨÏÞ²»×㣩");
  670.     return false;
  671. };

  672. /**
  673. * Ping ²âÊÔ
  674. * @param {string} µØÖ· - ÓòÃû»ò IP£¬Ä¬ÈÏ www.baidu.com
  675. * @param {number} ´ÎÊý - ping ´ÎÊý£¬Ä¬ÈÏ 3
  676. * @returns {string} ping Êä³ö
  677. */
  678. AdbUtil.Ping = function(µØÖ·, ´ÎÊý) {
  679.     µØÖ· = µØÖ· || "www.baidu.com";
  680.     ´ÎÊý = ´ÎÊý || 3;
  681.     return Ö´ÐÐÃüÁî("ping -c " + ´ÎÊý + " " + µØÖ·, false);
  682. };

  683. /**
  684. * »ñÈ¡ WiFi IP µØÖ·
  685. * @returns {string} Èç "192.168.1.100"
  686. */
  687. AdbUtil.»ñÈ¡WiFiIP = function() {
  688.     var Êä³ö = Ö´ÐÐÃüÁî("ip addr show wlan0 2>/dev/null", false);
  689.     if (Êä³ö) {
  690.         var m = Êä³ö.match(/inet\s+(\d+\.\d+\.\d+\.\d+)/);
  691.         if (m) return m[1];
  692.     }
  693.     return "";
  694. };

  695. /**
  696. * »ñÈ¡ÍøÂç½Ó¿ÚÐÅÏ¢
  697. * @returns {string} ip addr Êä³ö
  698. */
  699. AdbUtil.»ñÈ¡ÍøÂç½Ó¿Ú = function() {
  700.     return Ö´ÐÐÃüÁî("ip addr", false);
  701. };

  702. /**
  703. * »ñȡ·Óɱí
  704. * @returns {string}
  705. */
  706. AdbUtil.»ñȡ·Óɱí = function() {
  707.     return Ö´ÐÐÃüÁî("ip route", false);
  708. };


  709. // =============================================================================
  710. // Ä£¿éÆß£ºÏµÍ³ÉèÖ㨲¿·ÖÐèÒª root£©
  711. // =============================================================================

  712. /**
  713. * »ñȡϵͳÉèÖÃÖµ
  714. * @param {string} ÃüÃû¿Õ¼ä - "system" / "secure" / "global"
  715. * @param {string} ¼üÃû - ÉèÖüüÃû
  716. * @param {boolean} ÊÇ·ñroot
  717. * @returns {string} ÉèÖÃÖµ
  718. */
  719. AdbUtil.»ñÈ¡ÉèÖà = function(ÃüÃû¿Õ¼ä, ¼üÃû, ÊÇ·ñroot) {
  720.     // ²ßÂÔ1£ºsettings get
  721.     var ½á¹û = Ö´ÐÐÃüÁî("settings get " + ÃüÃû¿Õ¼ä + " " + ¼üÃû, ÊÇ·ñroot || false);
  722.     if (½á¹û && ½á¹û.indexOf("Exception") === -1 && ½á¹û.indexOf("null") !== 0) {
  723.         return ½á¹û.trim();
  724.     }
  725.     // ²ßÂÔ2£ºcontent query£¨·Ç root »ØÍË£©
  726.     var ²éѯ = Ö´ÐÐÃüÁî(
  727.         "content query --uri content://settings/" + ÃüÃû¿Õ¼ä +
  728.         " --where \"name='" + ¼üÃû + "'\"", false
  729.     );
  730.     if (²éѯ && ²éѯ.indexOf("value=") !== -1) {
  731.         var vIdx = ²éѯ.indexOf("value=");
  732.         return ²éѯ.substring(vIdx + 6).split(",")[0].trim();
  733.     }
  734.     return "";
  735. };

  736. /**
  737. * ÐÞ¸ÄϵͳÉèÖÃÖµ£¨Í¨³£ÐèÒª root£©
  738. * @param {string} ÃüÃû¿Õ¼ä
  739. * @param {string} ¼üÃû
  740. * @param {string} Öµ
  741. * @param {boolean} ÊÇ·ñroot
  742. * @returns {boolean}
  743. */
  744. AdbUtil.ÉèÖÃÖµ = function(ÃüÃû¿Õ¼ä, ¼üÃû, Öµ, ÊÇ·ñroot) {
  745.     return Ö´ÐÐÃüÁĬ(
  746.         "settings put " + ÃüÃû¿Õ¼ä + " " + ¼üÃû + " " + Öµ,
  747.         ÊÇ·ñroot || false
  748.     );
  749. };

  750. /**
  751. * »ñÈ¡ÆÁÄ»³¬Ê±Ê±¼ä£¨ºÁÃ룩
  752. * @returns {string}
  753. */
  754. AdbUtil.»ñÈ¡ÆÁÄ»³¬Ê± = function() {
  755.     return AdbUtil.»ñÈ¡ÉèÖÃ("system", "screen_off_timeout", true);
  756. };

  757. /**
  758. * ÉèÖÃÆÁÄ»³¬Ê±Ê±¼ä
  759. * @param {number} ºÁÃë - ³¬Ê±Ê±¼ä£¬Èç 60000=60Ãë
  760. * @returns {boolean}
  761. */
  762. AdbUtil.ÉèÖÃÆÁÄ»³¬Ê± = function(ºÁÃë) {
  763.     return AdbUtil.ÉèÖÃÖµ("system", "screen_off_timeout", ºÁÃë, true);
  764. };


  765. // =============================================================================
  766. // ×ÛºÏʵսÑÝʾ ¡ª¡ª È«²¿¹¦ÄÜÔËÐÐÒ»±é£¬Ã¿¸ö¹¦ÄÜǰ 3 Ãëµ¹¼ÆÊ±
  767. // =============================================================================

  768. /**
  769. * 3Ãëµ¹¼ÆÊ±º¯Êý ¡ª¡ª ÿ¸ö¹¦ÄÜǰִÐУ¬Ôö¼Ó½Ú×à¸Ð
  770. * @param {string} ¹¦ÄÜÃû³Æ - ¼´½«Ö´ÐеŦÄÜÃû³Æ
  771. */
  772. function µ¹¼ÆÊ±(¹¦ÄÜÃû³Æ) {
  773.     print.log("\n©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤");
  774.     print.log("  ¼´½«Ö´ÐÐ: " + ¹¦ÄÜÃû³Æ);
  775.     for (var i = 3; i > 0; i--) {
  776.         print.log("  ⏳ µ¹¼ÆÊ± " + i + " Ãë...");
  777.         sleep.second(1);
  778.     }
  779.     print.log("  ▶ ¿ªÊ¼Ö´ÐÐ: " + ¹¦ÄÜÃû³Æ);
  780.     print.log("©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤\n");
  781. }

  782. print.log("¨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¨[");
  783. print.log("¨U  adb.exec() È«¹¦ÄÜʵ»úÔËÐÐÑÝʾ        ¨U");
  784. print.log("¨U  ¹² 12 ¸ö¹¦ÄÜÄ£¿é£¬Ã¿¸ö¼ä¸ô 3 Ãëµ¹¼ÆÊ±  ¨U");
  785. print.log("¨^¨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");


  786. // ===== ÑÝʾ1£ºÉ豸ÐÅÏ¢Ò»¼ü²É¼¯ =====
  787. µ¹¼ÆÊ±("ÑÝʾ1 / É豸ÐÅÏ¢Ò»¼ü²É¼¯");
  788. print.log("¡¾ÑÝʾ1¡¿É豸ÐÅÏ¢Ò»¼ü²É¼¯");
  789. var É豸 = AdbUtil.»ñÈ¡É豸ÐÅÏ¢();
  790. print.log("  ÐͺÅ: " + É豸.ÐͺÅ);
  791. print.log("  Æ·ÅÆ: " + É豸.Æ·ÅÆ);
  792. print.log("  °²×¿°æ±¾: " + É豸.°²×¿°æ±¾ + " (SDK " + É豸.SDK°æ±¾ + ")");
  793. print.log("  ÖÆÔìÉÌ: " + É豸.ÖÆÔìÉÌ);
  794. print.log("  ÐòÁкÅ: " + É豸.ÐòÁкÅ);

  795. var ÆÁÄ» = AdbUtil.»ñÈ¡ÆÁÄ»ÐÅÏ¢();
  796. print.log("  ·Ö±æÂÊ: " + ÆÁÄ».·Ö±æÂÊ);
  797. print.log("  ÃܶÈ: " + ÆÁÄ».ÃܶÈ);

  798. var µç³Ø = AdbUtil.»ñÈ¡µç³ØÐÅÏ¢();
  799. print.log("  µçÁ¿: " + (µç³Ø.µçÁ¿ || "?") + "% | ζÈ: " + (µç³Ø.ÎÂ¶È || "?") + " | ״̬: " + (µç³Ø.״̬ || "?"));
  800. print.log("  µç³Ø¼¼Êõ: " + (µç³Ø.¼¼Êõ || "?"));
  801. // Õï¶Ï£ºÈç¹ûµç³ØÐÅϢΪ¿Õ£¬´òÓ¡ dumpsys battery ǰ5ÐаïÖúÅŲé
  802. if (!µç³Ø.µçÁ¿) {
  803.     print.log("  [Õï¶Ï] dumpsys battery ǰ5ÐÐ:");
  804.     var Õï¶Ïµç³Ø = Ö´ÐÐÃüÁî("dumpsys battery", true);
  805.     if (Õï¶Ïµç³Ø && Õï¶Ïµç³Ø.length > 0) {
  806.         var Õï¶ÏÐÐ = Õï¶Ïµç³Ø.split("\n");
  807.         for (var di = 0; di < Math.min(5, Õï¶ÏÐÐ.length); di++) {
  808.             print.log("    " + Õï¶ÏÐÐ[di].trim());
  809.         }
  810.     } else {
  811.         print.log("    dumpsys battery ·µ»Ø¿Õ!");
  812.     }
  813. }

  814. var ÄÚ´æ = AdbUtil.»ñÈ¡ÄÚ´æÐÅÏ¢();
  815. print.log("  ÄÚ´æÐÅÏ¢:");
  816. var ÄÚ´æÐÐ = ÄÚ´æ.split("\n");
  817. for (var mi = 0; mi < ÄÚ´æÐÐ.length; mi++) {
  818.     if (ÄÚ´æÐÐ[mi].trim()) print.log("    " + ÄÚ´æÐÐ[mi].trim());
  819. }
  820. print.log("✅ ÑÝʾ1 Íê³É");


  821. // ===== ÑÝʾ2£ºÇ°Ì¨Ó¦Óüì²â =====
  822. µ¹¼ÆÊ±("ÑÝʾ2 / ǰ̨ӦÓüì²â");
  823. print.log("¡¾ÑÝʾ2¡¿Ç°Ì¨Ó¦Óüì²â");
  824. var ǰ̨°üÃû = AdbUtil.»ñȡǰ̨°üÃû();
  825. print.log("  µ±Ç°Ç°Ì¨°üÃû: " + (ǰ̨°üÃû || "»ñȡʧ°Ü"));
  826. var ǰ̨Activity = AdbUtil.»ñȡǰ̨Activity();
  827. print.log("  µ±Ç°Ç°Ì¨Activity: " + (ǰ̨Activity || "»ñȡʧ°Ü"));
  828. // Õï¶Ï£ºÈç¹ûǰ̨°üÃûΪ¿Õ£¬´òÓ¡ dumpsys activity activities Öаüº¬ Resumed µÄÐÐ
  829. if (!ǰ̨°üÃû) {
  830.     print.log("  [Õï¶Ï] dumpsys activity activities ÖÐ Resumed Ïà¹ØÐÐ:");
  831.     var Õï¶Ïactivity = Ö´ÐÐÃüÁî("dumpsys activity activities | head -100", true);
  832.     if (Õï¶Ïactivity && Õï¶Ïactivity.length > 0) {
  833.         var Õï¶ÏÐÐ = Õï¶Ïactivity.split("\n");
  834.         var ÕÒµ½ = 0;
  835.         for (var di2 = 0; di2 < Õï¶ÏÐÐ.length && ÕÒµ½ < 3; di2++) {
  836.             if (Õï¶ÏÐÐ[di2].indexOf("Resumed") !== -1 ||
  837.                 Õï¶ÏÐÐ[di2].indexOf("resumed") !== -1 ||
  838.                 Õï¶ÏÐÐ[di2].indexOf("topResumed") !== -1) {
  839.                 print.log("    " + Õï¶ÏÐÐ[di2].trim());
  840.                 ÕÒµ½++;
  841.             }
  842.         }
  843.         if (ÕÒµ½ === 0) print.log("    δÕÒµ½ Resumed Ïà¹ØÐУ¬Êä³öǰ3ÐÐ:");
  844.         for (var di3 = 0; di3 < Math.min(3, Õï¶ÏÐÐ.length); di3++) {
  845.             print.log("    " + Õï¶ÏÐÐ[di3].trim());
  846.         }
  847.     } else {
  848.         print.log("    dumpsys activity activities ·µ»Ø¿Õ!");
  849.     }
  850. }
  851. if (ǰ̨°üÃû) {
  852.     print.log("  ÊÇ·ñÔÚǰ̨ÅжÏ: " + (AdbUtil.ÊÇ·ñÔÚǰ̨(ǰ̨°üÃû) ? "ÊÇ ✓" : "·ñ"));
  853. }
  854. print.log("✅ ÑÝʾ2 Íê³É");


  855. // ===== ÑÝʾ3£ºµÚÈý·½Ó¦ÓÃÁбí =====
  856. µ¹¼ÆÊ±("ÑÝʾ3 / µÚÈý·½Ó¦ÓÃÁбí");
  857. print.log("¡¾ÑÝʾ3¡¿µÚÈý·½Ó¦ÓÃÁÐ±í£¨Ç°5¸ö£©");
  858. var Ó¦ÓÃÁбí = AdbUtil.ÁгöµÚÈý·½Ó¦ÓÃ();
  859. print.log("  ¹² " + Ó¦ÓÃÁбí.length + " ¸öµÚÈý·½Ó¦ÓÃ");
  860. for (var i = 0; i < Math.min(5, Ó¦ÓÃÁбí.length); i++) {
  861.     var ÐÅÏ¢ = AdbUtil.»ñȡӦÓÃÐÅÏ¢(Ó¦ÓÃÁбí[i]);
  862.     print.log("  " + (i + 1) + ". " + Ó¦ÓÃÁбí[i] + " v" + (ÐÅÏ¢.°æ±¾Ãû || "?"));
  863.     // Õï¶Ï£ºµÚÒ»¸öÓ¦Óð汾Ϊ¿Õʱ£¬´òÓ¡ grep version µÄԭʼÊä³ö
  864.     if (!ÐÅÏ¢.°æ±¾Ãû && i === 0) {
  865.         print.log("    [Õï¶Ï] dumpsys package " + Ó¦ÓÃÁбí[i] + " | grep version Êä³ö:");
  866.         var Õï¶Ïpkg = Ö´ÐÐÃüÁî("dumpsys package " + Ó¦ÓÃÁбí[i] + " | grep version", true);
  867.         if (Õï¶Ïpkg && Õï¶Ïpkg.length > 0) {
  868.             var pkgÐÐ = Õï¶Ïpkg.split("\n");
  869.             for (var dpk = 0; dpk < Math.min(5, pkgÐÐ.length); dpk++) {
  870.                 print.log("      " + pkgÐÐ[dpk].trim());
  871.             }
  872.         } else {
  873.             print.log("      dumpsys package | grep version ·µ»Ø¿Õ!");
  874.         }
  875.     }
  876. }
  877. print.log("✅ ÑÝʾ3 Íê³É");


  878. // ===== ÑÝʾ4£º½ø³Ì¼ì²é =====
  879. µ¹¼ÆÊ±("ÑÝʾ4 / ½ø³Ì¼ì²é");
  880. print.log("¡¾ÑÝʾ4¡¿½ø³Ì¼ì²é");
  881. print.log("  Î¢ÐÅÊÇ·ñÔËÐÐ: " + (AdbUtil.½ø³ÌÊÇ·ñ´æÔÚ("com.tencent.mm") ? "ÊÇ ✓" : "·ñ"));
  882. print.log("  ÌÔ±¦ÊÇ·ñÔËÐÐ: " + (AdbUtil.½ø³ÌÊÇ·ñ´æÔÚ("com.taobao.taobao") ? "ÊÇ ✓" : "·ñ"));
  883. print.log("  QQÊÇ·ñÔËÐÐ: " + (AdbUtil.½ø³ÌÊÇ·ñ´æÔÚ("com.tencent.mobileqq") ? "ÊÇ ✓" : "·ñ"));
  884. print.log("  ÉèÖÃÊÇ·ñÔËÐÐ: " + (AdbUtil.½ø³ÌÊÇ·ñ´æÔÚ("com.android.settings") ? "ÊÇ ✓" : "·ñ"));
  885. print.log("✅ ÑÝʾ4 Íê³É");


  886. // ===== ÑÝʾ5£ºÍøÂçÕï¶Ï =====
  887. µ¹¼ÆÊ±("ÑÝʾ5 / ÍøÂçÕï¶Ï");
  888. print.log("¡¾ÑÝʾ5¡¿ÍøÂçÕï¶Ï");
  889. var ip = AdbUtil.»ñÈ¡WiFiIP();
  890. print.log("  WiFi IP: " + (ip || "δÁ¬½Ó WiFi"));
  891. print.log("  Ping °Ù¶È: ");
  892. var ping½á¹û = AdbUtil.Ping("www.baidu.com", 3);
  893. var pingÐÐ = ping½á¹û.split("\n");
  894. var ͳ¼ÆÐÐ = [];
  895. for (var j = pingÐÐ.length - 1; j >= 0 && ͳ¼ÆÐÐ.length < 3; j--) {
  896.     if (pingÐÐ[j].trim()) ͳ¼ÆÐÐ.unshift(pingÐÐ[j].trim());
  897. }
  898. for (var k = 0; k < ͳ¼ÆÐÐ.length; k++) {
  899.     print.log("    " + ͳ¼ÆÐÐ[k]);
  900. }
  901. print.log("✅ ÑÝʾ5 Íê³É");


  902. // ===== ÑÝʾ6£ºÎļþ²Ù×÷ =====
  903. µ¹¼ÆÊ±("ÑÝʾ6 / Îļþ²Ù×÷");
  904. print.log("¡¾ÑÝʾ6¡¿Îļþ²Ù×÷");
  905. AdbUtil.´´½¨Ä¿Â¼("/sdcard/aiwrok_test");
  906. print.log("  ✓ ´´½¨Ä¿Â¼ /sdcard/aiwrok_test");
  907. var дÈëʱ¼ä = new Date().toLocaleString();
  908. AdbUtil.дÎļþ("/sdcard/aiwrok_test/test.txt", "AIWROK adb.exec ²âÊÔ " + дÈëʱ¼ä);
  909. print.log("  ✓ дÈëÎļþ: AIWROK adb.exec ²âÊÔ " + дÈëʱ¼ä);
  910. var ÄÚÈÝ = AdbUtil.¶ÁÎļþ("/sdcard/aiwrok_test/test.txt");
  911. print.log("  ✓ ¶ÁÈ¡Îļþ: " + ÄÚÈÝ);
  912. var ´óС = AdbUtil.Îļþ´óС("/sdcard/aiwrok_test/test.txt");
  913. print.log("  ✓ Îļþ´óС: " + ´óС + " ×Ö½Ú");
  914. // ²âÊÔ×·¼ÓдÈë
  915. AdbUtil.×·¼ÓдÎļþ("/sdcard/aiwrok_test/test.txt", "¡ª¡ª×·¼ÓµÄµÚ¶þÐÐ");
  916. var ÄÚÈÝ2 = AdbUtil.¶ÁÎļþ("/sdcard/aiwrok_test/test.txt");
  917. print.log("  ✓ ×·¼ÓºóÄÚÈÝ: " + ÄÚÈÝ2.replace(/\n/g, " | "));
  918. // ²âÊÔÁÐĿ¼
  919. var Ŀ¼ÄÚÈÝ = AdbUtil.ÁÐĿ¼("/sdcard/aiwrok_test/");
  920. print.log("  ✓ Ŀ¼ÄÚÈÝ:");
  921. var Ŀ¼ÐÐ = Ŀ¼ÄÚÈÝ.split("\n");
  922. for (var di = 0; di < Math.min(5, Ŀ¼ÐÐ.length); di++) {
  923.     if (Ŀ¼ÐÐ[di].trim()) print.log("    " + Ŀ¼ÐÐ[di].trim());
  924. }
  925. // ²âÊÔ¸´ÖÆÎļþ
  926. AdbUtil.¸´ÖÆÎļþ("/sdcard/aiwrok_test/test.txt", "/sdcard/aiwrok_test/test_backup.txt");
  927. print.log("  ✓ ¸´ÖÆÎļþ ¡ú test_backup.txt");
  928. print.log("✅ ÑÝʾ6 Íê³É");


  929. // ===== ÑÝʾ7£º½ØÍ¼ =====
  930. µ¹¼ÆÊ±("ÑÝʾ7 / ½ØÍ¼");
  931. print.log("¡¾ÑÝʾ7¡¿½ØÍ¼");
  932. var ½ØÍ¼Â·¾¶ = "/sdcard/aiwrok_test/screenshot_" + Date.now() + ".png";
  933. AdbUtil.½ØÍ¼(½ØÍ¼Â·¾¶);
  934. var ½ØÍ¼´óС = AdbUtil.Îļþ´óС(½ØÍ¼Â·¾¶);
  935. print.log("  ½ØÍ¼Îļþ´óС: " + ½ØÍ¼´óС + " ×Ö½Ú");
  936. print.log("✅ ÑÝʾ7 Íê³É");


  937. // ===== ÑÝʾ8£ºÆÁÄ»³¬Ê± =====
  938. µ¹¼ÆÊ±("ÑÝʾ8 / ÆÁÄ»³¬Ê±ÉèÖÃ");
  939. print.log("¡¾ÑÝʾ8¡¿ÆÁÄ»³¬Ê±");
  940. var ³¬Ê± = AdbUtil.»ñÈ¡ÆÁÄ»³¬Ê±();
  941. print.log("  µ±Ç°ÆÁÄ»³¬Ê±: " + (³¬Ê± || "»ñȡʧ°Ü") + " ºÁÃë");
  942. if (³¬Ê±) {
  943.     var ÃëÊý = Math.floor(parseInt(³¬Ê±, 10) / 1000);
  944.     print.log("  ¼´: " + ÃëÊý + " Ãë");
  945. }
  946. print.log("✅ ÑÝʾ8 Íê³É");


  947. // ===== ÑÝʾ9£ºÊäÈëÄ£Äâ =====
  948. µ¹¼ÆÊ±("ÑÝʾ9 / ÊäÈëÄ£Ä⣨Home/µã»÷/»¬¶¯/°´¼ü£©");
  949. print.log("¡¾ÑÝʾ9¡¿ÊäÈëÄ£Äâ£¨ÕæÊµÖ´ÐУ©");

  950. print.log("  [9.1] °´ Home ¼ü»Øµ½×ÀÃæ...");
  951. AdbUtil.Home¼ü();
  952. sleep.second(1);
  953. print.log("    ✓ ÒѰ´ Home ¼ü");
  954. var »Ø×ÀÃæºó = AdbUtil.»ñȡǰ̨°üÃû();
  955. print.log("    µ±Ç°Ç°Ì¨: " + (»Ø×ÀÃæºó || "δ֪"));

  956. var ÆÁÄ»ÐÅÏ¢9 = AdbUtil.»ñÈ¡ÆÁÄ»ÐÅÏ¢();
  957. var ·Ö±æÂÊÎı¾ = ÆÁÄ»ÐÅÏ¢9.·Ö±æÂÊ || "";
  958. var ³ß´çÆ¥Åä = ·Ö±æÂÊÎı¾.match(/(\d+)x(\d+)/);
  959. if (³ß´çÆ¥Åä) {
  960.     var ¿í¶È = parseInt(³ß´çÆ¥Åä[1], 10);
  961.     var ¸ß¶È = parseInt(³ß´çÆ¥Åä[2], 10);
  962.     var ÖÐÐÄX = Math.floor(¿í¶È / 2);
  963.     var ÖÐÐÄY = Math.floor(¸ß¶È / 2);
  964.     print.log("  [9.2] ÆÁÄ»·Ö±æÂÊ " + ¿í¶È + "x" + ¸ß¶È + "£¬ÖÐÐĵã (" + ÖÐÐÄX + ", " + ÖÐÐÄY + ")");

  965.     print.log("  [9.3] µã»÷ÆÁÄ»ÖÐÐÄ...");
  966.     AdbUtil.µã»÷(ÖÐÐÄX, ÖÐÐÄY);
  967.     sleep.millisecond(500);
  968.     print.log("    ✓ Òѵã»÷ (" + ÖÐÐÄX + ", " + ÖÐÐÄY + ")");

  969.     print.log("  [9.4] ÏòÉÏ»¬¶¯...");
  970.     AdbUtil.»¬¶¯(ÖÐÐÄX, Math.floor(¸ß¶È * 0.8), ÖÐÐÄX, Math.floor(¸ß¶È * 0.2), 300);
  971.     sleep.millisecond(500);
  972.     print.log("    ✓ ÒÑÏòÉÏ»¬¶¯");

  973.     print.log("  [9.5] ÏÂÀ­Í¨ÖªÀ¸...");
  974.     AdbUtil.»¬¶¯(ÖÐÐÄX, Math.floor(¸ß¶È * 0.1), ÖÐÐÄX, Math.floor(¸ß¶È * 0.5), 300);
  975.     sleep.second(1);
  976.     print.log("    ✓ ÒÑÏÂÀ­Í¨ÖªÀ¸");
  977.     print.log("  [9.6] ÊÕÆð֪ͨÀ¸...");
  978.     AdbUtil.»¬¶¯(ÖÐÐÄX, Math.floor(¸ß¶È * 0.5), ÖÐÐÄX, Math.floor(¸ß¶È * 0.1), 300);
  979.     sleep.millisecond(500);
  980.     print.log("    ✓ ÒÑÊÕÆð֪ͨÀ¸");
  981. } else {
  982.     print.log("  [9.2] ÎÞ·¨½âÎöÆÁÄ»·Ö±æÂÊ: " + ·Ö±æÂÊÎı¾);
  983. }

  984. print.log("  [9.7] °´·µ»Ø¼ü...");
  985. AdbUtil.·µ»Ø¼ü();
  986. sleep.millisecond(500);
  987. print.log("    ✓ ÒѰ´·µ»Ø¼ü");

  988. print.log("  [9.8] °´ÒôÁ¿¼õ¼ü...");
  989. AdbUtil.°´¼ü(25);
  990. sleep.millisecond(500);
  991. print.log("    ✓ ÒѰ´ÒôÁ¿¼õ¼ü");

  992. print.log("  [9.9] °´ÒôÁ¿¼Ó¼ü»Ö¸´...");
  993. AdbUtil.°´¼ü(24);
  994. sleep.millisecond(500);
  995. print.log("    ✓ ÒѰ´ÒôÁ¿¼Ó¼ü");

  996. print.log("✅ ÑÝʾ9 Íê³É");


  997. // ===== ÑÝʾ10£ºÓ¦ÓùÜÀí =====
  998. µ¹¼ÆÊ±("ÑÝʾ10 / Ó¦ÓùÜÀí£¨°²×°¼ì²â/Æô¶¯ÉèÖÃ/½ØÍ¼£©");
  999. print.log("¡¾ÑÝʾ10¡¿Ó¦ÓùÜÀí£¨ÕæÊµÖ´ÐУ©");

  1000. print.log("  [10.1] ¼ì²é³£¼ûÓ¦Óð²×°×´Ì¬");
  1001. var ³£¼ûÓ¦ÓÃ = [
  1002.     "com.tencent.mm",       // ΢ÐÅ
  1003.     "com.taobao.taobao",    // ÌÔ±¦
  1004.     "com.android.settings", // ϵͳÉèÖÃ
  1005.     "com.tencent.mobileqq", // QQ
  1006.     "com.eg.android.AlipayGphone" // Ö§¸¶±¦
  1007. ];
  1008. for (var ai = 0; ai < ³£¼ûÓ¦ÓÃ.length; ai++) {
  1009.     var ÒѰ²×° = AdbUtil.Ó¦ÓÃÊÇ·ñ°²×°(³£¼ûÓ¦ÓÃ[ai]);
  1010.     print.log("    " + ³£¼ûÓ¦ÓÃ[ai] + ": " + (ÒѰ²×° ? "ÒѰ²×° ✓" : "δ°²×°"));
  1011. }

  1012. print.log("\n  [10.2] »ñÈ¡ÒѰ²×°Ó¦ÓÃÏêϸÐÅÏ¢");
  1013. var ÒѰ²×°Ó¦Óà = null;
  1014. for (var bi = 0; bi < ³£¼ûÓ¦ÓÃ.length; bi++) {
  1015.     if (AdbUtil.Ó¦ÓÃÊÇ·ñ°²×°(³£¼ûÓ¦ÓÃ[bi])) {
  1016.         ÒѰ²×°Ó¦Óà = ³£¼ûÓ¦ÓÃ[bi];
  1017.         break;
  1018.     }
  1019. }
  1020. if (ÒѰ²×°Ó¦ÓÃ) {
  1021.     var ÏêÇé = AdbUtil.»ñȡӦÓÃÐÅÏ¢(ÒѰ²×°Ó¦ÓÃ);
  1022.     print.log("    °üÃû: " + ÒѰ²×°Ó¦ÓÃ);
  1023.     print.log("    °æ±¾Ãû: " + (ÏêÇé.°æ±¾Ãû || "δ֪"));
  1024.     print.log("    °æ±¾ºÅ: " + (ÏêÇé.°æ±¾ºÅ || "δ֪"));
  1025.     print.log("    °²×°Â·¾¶: " + (ÏêÇé.°²×°Â·¾¶ || "δ֪"));
  1026. } else {
  1027.     print.log("    ³£¼ûÓ¦Óþùδ°²×°");
  1028. }

  1029. print.log("\n  [10.3] Æô¶¯ÏµÍ³ÉèÖÃ");
  1030. var Æô¶¯½á¹û = AdbUtil.Æô¶¯Action("android.settings.SETTINGS");
  1031. sleep.second(2);
  1032. print.log("    Æô¶¯ÃüÁîÒÑÖ´ÐÐ: " + (Æô¶¯½á¹û ? "✓" : "✗"));

  1033. var ÉèÖÃǰ̨ = AdbUtil.»ñȡǰ̨°üÃû();
  1034. print.log("    µ±Ç°Ç°Ì¨°üÃû: " + (ÉèÖÃǰ̨ || "δ֪"));
  1035. if (ÉèÖÃǰ̨ && ÉèÖÃǰ̨.indexOf("settings") !== -1) {
  1036.     print.log("    ✓ ϵͳÉèÖÃÒÑ´ò¿ª");
  1037. } else {
  1038.     print.log("    £¨ÉèÖÃÒ³Ãæ¿ÉÄÜÕýÔÚ¼ÓÔØ»òÉ豸²»Ö§³Ö£©");
  1039. }

  1040. var ÉèÖÃActivity = AdbUtil.»ñȡǰ̨Activity();
  1041. print.log("    µ±Ç°Ç°Ì¨Activity: " + (ÉèÖÃActivity || "δ֪"));

  1042. print.log("\n  [10.4] ½ØÍ¼±£´æÉèÖÃÒ³Ãæ");
  1043. AdbUtil.½ØÍ¼("/sdcard/aiwrok_test/settings_page.png");

  1044. print.log("  [10.5] ¼ì²éÉèÖýø³Ì״̬");
  1045. var ÉèÖÃÔËÐÐ = AdbUtil.½ø³ÌÊÇ·ñ´æÔÚ("com.android.settings");
  1046. if (!ÉèÖÃÔËÐÐ) ÉèÖÃÔËÐÐ = AdbUtil.½ø³ÌÊÇ·ñ´æÔÚ("settings");
  1047. print.log("    ÉèÖýø³ÌÔËÐÐÖÐ: " + (ÉèÖÃÔËÐÐ ? "ÊÇ ✓" : "·ñ"));

  1048. print.log("  [10.6] °´ Home ¼ü»Øµ½×ÀÃæ");
  1049. AdbUtil.Home¼ü();
  1050. sleep.second(1);
  1051. var »Ø×ÀÃæºó2 = AdbUtil.»ñȡǰ̨°üÃû();
  1052. print.log("    µ±Ç°Ç°Ì¨: " + (»Ø×ÀÃæºó2 || "δ֪"));
  1053. print.log("✅ ÑÝʾ10 Íê³É");


  1054. // ===== ÑÝʾ11£º´æ´¢ÓëCPUÐÅÏ¢ =====
  1055. µ¹¼ÆÊ±("ÑÝʾ11 / ´æ´¢ÓëCPUÐÅÏ¢");
  1056. print.log("¡¾ÑÝʾ11¡¿´æ´¢ÓëCPUÐÅÏ¢");
  1057. var ´æ´¢ = AdbUtil.»ñÈ¡´æ´¢ÐÅÏ¢();
  1058. print.log("  ´æ´¢ÐÅÏ¢:");
  1059. var ´æ´¢ÐÐ = ´æ´¢.split("\n");
  1060. for (var si = 0; si < ´æ´¢ÐÐ.length; si++) {
  1061.     if (´æ´¢ÐÐ[si].trim()) print.log("    " + ´æ´¢ÐÐ[si].trim());
  1062. }

  1063. print.log("\n  CPU Õ¼Óà TOP ½ø³Ì:");
  1064. var cpu = AdbUtil.»ñÈ¡CPUÕ¼ÓÃ();
  1065. var cpuÐÐ = cpu.split("\n");
  1066. for (var ci = 0; ci < Math.min(8, cpuÐÐ.length); ci++) {
  1067.     if (cpuÐÐ[ci].trim()) print.log("    " + cpuÐÐ[ci].trim());
  1068. }
  1069. print.log("✅ ÑÝʾ11 Íê³É");


  1070. // ===== ÑÝʾ12£ºÍøÂçÍêÕûÕï¶Ï =====
  1071. µ¹¼ÆÊ±("ÑÝʾ12 / ÍøÂçÍêÕûÕï¶Ï");
  1072. print.log("¡¾ÑÝʾ12¡¿ÍøÂçÍêÕûÕï¶Ï");
  1073. print.log("  WiFi IP: " + (AdbUtil.»ñÈ¡WiFiIP() || "δÁ¬½Ó"));

  1074. var ·ÓÉ = AdbUtil.»ñȡ·Óɱí();
  1075. print.log("  Â·Óɱí:");
  1076. var ·ÓÉÐÐ = ·ÓÉ.split("\n");
  1077. for (var ri = 0; ri < Math.min(3, ·ÓÉÐÐ.length); ri++) {
  1078.     if (·ÓÉÐÐ[ri].trim()) print.log("    " + ·ÓÉÐÐ[ri].trim());
  1079. }

  1080. print.log("  ÍøÂç½Ó¿ÚÐÅÏ¢:");
  1081. var ½Ó¿Ú = AdbUtil.»ñÈ¡ÍøÂç½Ó¿Ú();
  1082. var ½Ó¿ÚÐÐ = ½Ó¿Ú.split("\n");
  1083. for (var ni = 0; ni < Math.min(5, ½Ó¿ÚÐÐ.length); ni++) {
  1084.     if (½Ó¿ÚÐÐ[ni].trim()) print.log("    " + ½Ó¿ÚÐÐ[ni].trim());
  1085. }
  1086. print.log("✅ ÑÝʾ12 Íê³É");


  1087. // =============================================================================
  1088. // ËÙ²é±í
  1089. // =============================================================================
  1090. print.log("\n========== AdbUtil ·½·¨ËÙ²é±í ==========\n");
  1091. print.log("É豸ÐÅÏ¢:");
  1092. print.log("  AdbUtil.»ñÈ¡É豸ÐÅÏ¢()      ¡ú {ÐͺÅ,Æ·ÅÆ,°²×¿°æ±¾,SDK°æ±¾,ÖÆÔìÉÌ,ÐòÁкÅ}");
  1093. print.log("  AdbUtil.»ñÈ¡ÆÁÄ»ÐÅÏ¢()      ¡ú {·Ö±æÂÊ,ÃܶÈ}");
  1094. print.log("  AdbUtil.»ñÈ¡µç³ØÐÅÏ¢()      ¡ú {µçÁ¿,ζÈ,״̬,¼¼Êõ}");
  1095. print.log("  AdbUtil.»ñÈ¡ÄÚ´æÐÅÏ¢()      ¡ú MemTotal/MemFree/MemAvailable");
  1096. print.log("  AdbUtil.»ñÈ¡´æ´¢ÐÅÏ¢()      ¡ú df Êä³ö");
  1097. print.log("");
  1098. print.log("Ó¦ÓùÜÀí:");
  1099. print.log("  AdbUtil.ÁгöµÚÈý·½Ó¦ÓÃ()    ¡ú [°üÃûÊý×é]");
  1100. print.log("  AdbUtil.Ó¦ÓÃÊÇ·ñ°²×°(°üÃû)  ¡ú true/false");
  1101. print.log("  AdbUtil.Æô¶¯Ó¦ÓÃ(°üÃû)      ¡ú true/false");
  1102. print.log("  AdbUtil.Í£Ö¹Ó¦ÓÃ(°üÃû)      ¡ú true/false");
  1103. print.log("  AdbUtil.°²×°Ó¦ÓÃ(·¾¶,¸²¸Ç) ¡ú true/false");
  1104. print.log("  AdbUtil.Ð¶ÔØÓ¦ÓÃ(°üÃû)      ¡ú true/false");
  1105. print.log("  AdbUtil.»ñȡӦÓÃÐÅÏ¢(°üÃû)  ¡ú {°æ±¾Ãû,°æ±¾ºÅ,°²×°Â·¾¶}");
  1106. print.log("");
  1107. print.log("Îļþ²Ù×÷:");
  1108. print.log("  AdbUtil.ÁÐĿ¼(·¾¶)        ¡ú ls Êä³ö");
  1109. print.log("  AdbUtil.¶ÁÎļþ(·¾¶)        ¡ú ÎļþÄÚÈÝ");
  1110. print.log("  AdbUtil.дÎļþ(·¾¶,ÄÚÈÝ)   ¡ú true/false");
  1111. print.log("  AdbUtil.×·¼ÓдÎļþ(·¾¶,ÄÚÈÝ) ¡ú true/false");
  1112. print.log("  AdbUtil.¸´ÖÆÎļþ(Ô´,Ä¿±ê)   ¡ú true/false");
  1113. print.log("  AdbUtil.´´½¨Ä¿Â¼(·¾¶)      ¡ú true/false");
  1114. print.log("  AdbUtil.ɾ³ý(·¾¶)          ¡ú true/false");
  1115. print.log("  AdbUtil.Îļþ´óС(·¾¶)      ¡ú ×Ö½ÚÊý");
  1116. print.log("");
  1117. print.log("ÊäÈëÄ£Äâ:");
  1118. print.log("  AdbUtil.µã»÷(x, y)          ¡ú true/false");
  1119. print.log("  AdbUtil.»¬¶¯(x1,y1,x2,y2,ʱ³¤) ¡ú true/false");
  1120. print.log("  AdbUtil.³¤°´(x, y, ʱ³¤)    ¡ú true/false");
  1121. print.log("  AdbUtil.ÊäÈëÎÄ×Ö(ÎÄ×Ö)      ¡ú true/false (½öASCII)");
  1122. print.log("  AdbUtil.°´¼ü(¼üÂë)          ¡ú true/false");
  1123. print.log("  AdbUtil.·µ»Ø¼ü()            ¡ú Ä£Äâ·µ»Ø");
  1124. print.log("  AdbUtil.Home¼ü()            ¡ú Ä£ÄâHome");
  1125. print.log("");
  1126. print.log("ǰ̨¼ì²â+½ø³Ì:");
  1127. print.log("  AdbUtil.»ñȡǰ̨°üÃû()      ¡ú 'com.xxx.xxx'");
  1128. print.log("  AdbUtil.»ñȡǰ̨Activity()  ¡ú 'com.xxx/.Activity'");
  1129. print.log("  AdbUtil.ÊÇ·ñÔÚǰ̨(°üÃû)    ¡ú true/false");
  1130. print.log("  AdbUtil.½ø³ÌÊÇ·ñ´æÔÚ(°üÃû)  ¡ú true/false");
  1131. print.log("  AdbUtil.»ñÈ¡CPUÕ¼ÓÃ()       ¡ú top Êä³ö");
  1132. print.log("  AdbUtil.ɱËÀ½ø³Ì(pid,root)  ¡ú true/false");
  1133. print.log("");
  1134. print.log("½ØÍ¼+ÍøÂç:");
  1135. print.log("  AdbUtil.½ØÍ¼(·¾¶)          ¡ú true/false");
  1136. print.log("  AdbUtil.Ping(µØÖ·,´ÎÊý)    ¡ú ping Êä³ö");
  1137. print.log("  AdbUtil.»ñÈ¡WiFiIP()        ¡ú '192.168.x.x'");
  1138. print.log("  AdbUtil.»ñÈ¡ÍøÂç½Ó¿Ú()      ¡ú ip addr Êä³ö");
  1139. print.log("  AdbUtil.»ñȡ·Óɱí()        ¡ú ip route Êä³ö");
  1140. print.log("");
  1141. print.log("ϵͳÉèÖÃ:");
  1142. print.log("  AdbUtil.»ñÈ¡ÉèÖÃ(ÃüÃû¿Õ¼ä,¼üÃû,root) ¡ú ÉèÖÃÖµ");
  1143. print.log("  AdbUtil.ÉèÖÃÖµ(ÃüÃû¿Õ¼ä,¼üÃû,Öµ,root) ¡ú true/false");
  1144. print.log("  AdbUtil.»ñÈ¡ÆÁÄ»³¬Ê±()      ¡ú ºÁÃëÊý");
  1145. print.log("  AdbUtil.ÉèÖÃÆÁÄ»³¬Ê±(ºÁÃë)  ¡ú true/false");

  1146. print.log("\n✅ adb.exec() ʵÓù¤¾ß¿âÖ´ÐÐÍê±Ï");
  1147. print.log("Ìáʾ£º½«±¾ÎļþÄÚÈݸ´ÖƵ½ÄãµÄÏîÄ¿ÖУ¬¼´¿Éͨ¹ý AdbUtil.·½·¨Ãû() Ö±½Óµ÷ÓÃ");
¸´ÖÆ´úÂë


»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

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

¹Ø±Õ

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

map2

GMT+8, 2026-8-6 09:06 , Processed in 0.120563 second(s), 36 queries .

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