|
|
¶àÏß³ÌGETÏÂÔØÂÖѯµÈ´ý¹¤¾ß
- /**
- * AIWROK ÂÖѯµÈ´ý¹¤¾ß - ÑÝʾ½Å±¾£¨Â¼ÆÁ°æ£©
- * ¹ÊÊÂÏߣºÄ£Äâ APK ÏÂÔØ ¡ú µÈ´ýÎļþÉú³É ¡ú µÈ´ý°²×°Íê³É ¡ú ³É¹¦Æô¶¯
- *
- */
- importClass(java.lang.Thread);
- // ======================== »ù´¡ ========================
- function doSleep(ms) { try { Thread.sleep(ms); } catch (e) {} }
- // ´ø½Ú×àµÄ´òÓ¡£º»»ÐÐ + ÑÓʱ
- function step(msg, delayMs) {
- printl(msg);
- doSleep(delayMs || 300);
- }
- function separator() {
- printl("");
- printl("©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤");
- printl("");
- }
- // ======================== ͨÓÃÂÖѯ£¨ºËÐÄ£© ========================
- /**
- * ÂÖѯµÈ´ýij¸öÌõ¼þ³ÉÁ¢
- * @param {Function} condition ¡ª¡ª ÿ´Î·µ»Ø truthy ±íʾ³ÉÁ¢
- * @param {int} timeoutMs ¡ª¡ª ×ܳ¬Ê±£¨Ä¬ÈÏ 10s£©
- * @param {int} intervalMs ¡ª¡ª ÂÖѯ¼ä¸ô£¨Ä¬ÈÏ 200ms£©
- * @param {String} label ¡ª¡ª ÈÕÖ¾±êÇ©
- * @returns {Object} { success, waitedMs, lastValue, rounds }
- */
- function poll(condition, timeoutMs, intervalMs, label) {
- timeoutMs = timeoutMs || 10000;
- intervalMs = intervalMs || 200;
- label = label || "ÂÖѯ";
- var start = new Date().getTime();
- var rounds = 0;
- var lastVal = null;
- while (true) {
- lastVal = condition();
- if (lastVal) {
- var waited = new Date().getTime() - start;
- printl(" ✅ [" + label + "] Ìõ¼þ´ï³É£¡µÚ " + rounds + " ´ÎÂÖѯ ¡¤ ºÄʱ " + waited + " ms");
- return { success: true, waitedMs: waited, lastValue: lastVal, rounds: rounds };
- }
- // ÿ 5 ´Î´òÒ»´Î½ø¶È£¨Â¼ÆÁ¿´×Ų»Ãܲ»Ê裩
- if (rounds % 5 === 0) {
- var elapsed = rounds * intervalMs;
- printl(" ⏳ [" + label + "] µÈ´ýÖÐ... ÒÑÂÖѯ " + rounds + " ´Î ¡¤ " + elapsed + " / " + timeoutMs + " ms");
- }
- if (new Date().getTime() - start >= timeoutMs) {
- printl(" ❌ [" + label + "] ³¬Ê±£¡£¨" + timeoutMs + " ms ÄÚδ´ï³É£©");
- return { success: false, waitedMs: timeoutMs, lastValue: lastVal, rounds: rounds };
- }
- doSleep(intervalMs);
- rounds++;
- }
- }
- // ======================== ±ã½Ý·½·¨ ========================
- /** µÈ´ýÎļþ´æÔÚ */
- function waitForFile(path, timeoutMs, intervalMs) {
- return poll(function() {
- try { return new java.io.File(path).exists(); } catch (e) { return false; }
- }, timeoutMs, intervalMs, "Îļþ³öÏÖ " + path);
- }
- /** µÈ´ýÎļþ´óС >= minBytes£¨Ä£ÄâÏÂÔØÖУ© */
- function waitForFileSize(path, minBytes, timeoutMs, intervalMs) {
- var label = "Îļþ´óС ¡Ý " + minBytes + " ×Ö½Ú";
- return poll(function() {
- try {
- var f = new java.io.File(path);
- if (!f.exists()) return false;
- var size = f.length();
- // ˳±ã´òÓ¡µ±Ç°½ø¶È£¨Â¼ÆÁºÃ¿´£©
- if (size > 0 && Math.random() < 0.3) {
- printl(" 📥 µ±Ç°´óС: " + size + " / " + minBytes + " ×Ö½Ú " +
- Math.floor(size / minBytes * 100) + "%");
- }
- return size >= minBytes;
- } catch (e) { return false; }
- }, timeoutMs, intervalMs, label);
- }
- /** µÈ´ý HTTP 200 */
- function waitForHttp(url, timeoutMs, intervalMs) {
- return poll(function() {
- try {
- var res = http.get(url);
- return res && res.code === 200;
- } catch (e) { return false; }
- }, timeoutMs, intervalMs, "½Ó¿Ú " + url);
- }
- /** µÈ´ýijÌõ¼þ·µ»Ø true£¬Í¬Ê±´òÓ¡½×¶Î±êÌâ */
- function stage(title, condition, timeoutMs, intervalMs, label) {
- printl("");
- printl(" ▶ " + title);
- // ÔìÒ»ÌõÏ»®Ïߣ¨ES5 ¼æÈÝ£©
- var line = " ";
- for (var i = 0; i < title.length + 2; i++) line += "©¤";
- printl(line);
- return poll(condition, timeoutMs, intervalMs, label || title);
- }
- // ======================== ¼ÆÁÑÝʾ ========================
- function demo() {
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- // ¿ª³¡
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- printl("¨X¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨[");
- printl("¨U ¨U");
- printl("¨U 🛠️ AIWROK sleep ÂÖѯµÈ´ý¹¤¾ß ÑÝʾ ¨U");
- printl("¨U ¨U");
- printl("¨U ¡¸Ä£ÄâÍêÕû APK ÏÂÔØ ¡ú °²×°Á÷³Ì¡¹ ¨U");
- printl("¨U ¨U");
- printl("¨^¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨a");
- doSleep(1200); // ¸øÂ¼ÆÁÒ»¸ö"±êÌⶨ֡"ʱ¼ä
- printl("");
- printl("📖 ³¡¾°ËµÃ÷£º");
- printl(" ÎÒÃǽ«Ä£ÄâÒ»¸öÍêÕûµÄ×Ô¶¯»¯Á÷³Ì ¡ª¡ª");
- printl(" ´Ó·þÎñÆ÷ÏÂÔØ APK Îļþ ¡ú µÈ´ýдÈë´ÅÅÌ ¡ú");
- printl(" µÈ´ýÎļþ´óС´ï±ê ¡ú ×îºóÑéÖ¤½Ó¿Ú¾ÍÐ÷¡£");
- printl("");
- printl(" Óõ½µÄºËÐĺ¯ÊýÖ»ÓÐÒ»¸ö£ºpoll()");
- printl(" Ëü¸ºÔð£ºÃ¿¸ô N ms ¼ì²éÒ»´ÎÌõ¼þ£¬");
- printl(" Ìõ¼þ³ÉÁ¢Á¢¼´·µ»Ø£¬³¬Ê±Ôò·µ»ØÊ§°Ü¡£");
- printl("");
- doSleep(1500);
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- // µÚһĻ£ººǫ́Ïß³ÌÄ£ÄâÏÂÔØ
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- separator();
- printl("¡¾µÚһĻ¡¿Æô¶¯ºǫ́ÏÂÔØÈÎÎñ");
- doSleep(800);
- var apkPath = "/sdcard/Download/demo_app_v1.2.apk";
- var targetSize = 4096; // Ä£Äâ 4KB µÄ"APK"£¨Êµ¼ÊдÎÄ×Ö½øÈ¥£©
- // ÏÈÇåÀí²ÐÁô
- try { new java.io.File(apkPath).delete(); } catch (e) {}
- step("📱 Ä¿±ê APK: " + apkPath, 500);
- step("📦 Ä£Äâ´óС: " + targetSize + " ×Ö½Ú", 500);
- step("🚀 Æô¶¯ÏÂÔØÏß³Ì...", 800);
- // ºǫ́Ị̈߳º·Ö 4 ´ÎÖð²½Ð´ÈëÎļþ£¨Ä£Äâ½¥½øÏÂÔØ£©
- new thread().runJsCode(function() {
- printl(" [ºǫ́] Á¬½Ó·þÎñÆ÷...");
- doSleep(400);
- printl(" [ºǫ́] ¿ªÊ¼ÏÂÔØ...");
- var w = new java.io.FileWriter(apkPath);
- var chunk = 1024;
- var total = 0;
- for (var i = 0; i < 4; i++) {
- // д 1KB£ºÑ»·Ð´µ¥×Ö·û
- var data = "";
- for (var j = 0; j < chunk; j++) data += String.fromCharCode(65 + i);
- w.write(data);
- w.flush();
- total += chunk;
- printl(" [ºǫ́] ÒÑдÈë " + total + " / " + targetSize + " ×Ö½Ú");
- doSleep(500); // ¹ÊÒâÂýÒ»µã£¬ÈÃÂÖѯÓж«Î÷¿É¿´
- }
- w.close();
- printl(" [ºǫ́] ✅ ÏÂÔØÍê³É£¬ÎļþÒÑÂäÅÌ");
- }, "APKÏÂÔØÏß³Ì");
- doSleep(800); // Èúǫ́Ïß³ÌÏÈÅÜÆðÀ´´òÒ»ÐÐ
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- // µÚ¶þÄ»£ºÂÖѯµÈ´ýÎļþ³öÏÖ
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- separator();
- printl("¡¾µÚ¶þÄ»¡¿Ö÷Ïß³ÌÂÖѯµÈ´ýÎļþ³öÏÖ");
- printl(" ³¡¾°£ººǫ́ÔÚÏÂÔØ£¬Ö÷Ï̲߳»Äܸɵȣ¬");
- printl(" ÐèҪʱ¿Ì¶¢×ÅÎļþÊÇ·ñÒÑ´´½¨¡£");
- doSleep(1000);
- var r1 = stage("µÈ´ý APK Îļþ³öÏÖ...", function() {
- try { return new java.io.File(apkPath).exists(); } catch (e) { return false; }
- }, 5000, 200, "waitForFile");
- if (r1.success) {
- step("📂 ÎļþÒÑÔÚ´ÅÅÌÉÏ£¡ºÄʱ " + r1.waitedMs + " ms", 600);
- } else {
- step("❌ Îļþ³Ù³Ùû³öÏÖ£¬ÏÂÔØ¿ÉÄÜ¿¨×¡ÁË", 600);
- }
- doSleep(1000);
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- // µÚÈýÄ»£ºÂÖѯµÈ´ýÎļþ´óС´ï±ê
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- separator();
- printl("¡¾µÚÈýÄ»¡¿¼ÌÐøµÈ ¡ª¡ª Îļþ´óС´ï±ê²ÅËãÏÂÔØÍê³É");
- printl(" ³¡¾°£ºÎļþËäÈ»´´½¨ÁË£¬µ«¿ÉÄÜֻдÁËÒ»°ë¡£");
- printl(" ÐèÒªµÈ´óС ¡Ý ÆÚÍûÖµ£¬²ÅÄÜ¿ªÊ¼°²×°¡£");
- doSleep(1000);
- var r2 = waitForFileSize(apkPath, targetSize, 8000, 300);
- if (r2.success) {
- step("📊 Îļþ´óС´ï±ê£¡ÒÑÍêÕûдÈë " + targetSize + " ×Ö½Ú", 600);
- }
- doSleep(1000);
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- // µÚËÄÄ»£ºÑÝʾ³¬Ê±³¡¾°£¨µÈÒ»¸ö²»´æÔڵĶ«Î÷£©
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- separator();
- printl("¡¾µÚËÄÄ»¡¿ÑÝʾ£ºÌõ¼þÓÀÔ¶²»³ÉÁ¢ ¡ú ´¥·¢³¬Ê±");
- printl(" ³¡¾°£ºÊµ¼ÊÒµÎñÖо³£Óöµ½ ¡ª¡ª");
- printl(" ÍøÂç¶ÏÁË¡¢½Ó¿Ú¹ÒÁË¡¢È¨ÏÞû¸ø...");
- printl(" poll() ²»»áÎÞÏ޵ȣ¬µ½µã¾Í·µ»Ø false¡£");
- doSleep(1200);
- var fakePath = "/sdcard/this_file_never_exists.xyz";
- step("🔍 È¥µÈÒ»¸ö²»´æÔÚµÄÎļþ: " + fakePath, 600);
- step("⏱️ ³¬Ê±ÉèΪ 1.5 Ã룬¼ä¸ô 300 ms", 600);
- var r3 = waitForFile(fakePath, 1500, 300);
- step("📝 poll() ·µ»ØÖµ: { success: " + r3.success + ", waitedMs: " + r3.waitedMs + " }", 800);
- step("💡 ÒµÎñ´úÂëÀï¿ÉÒÔÕâÑùд£º", 400);
- printl(" var r = waitForFile(xxx, 5000);");
- printl(" if (!r.success) { printl(\"ÏÂÔØ³¬Ê±£¬ÖØÊÔ»ò±¨´í\"); }");
- doSleep(1200);
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- // µÚÎåÄ»£º×Ô¶¨ÒåÌõ¼þ ¡ª¡ª ×éºÏʹÓÃ
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- separator();
- printl("¡¾µÚÎåÄ»¡¿×Ô¶¨ÒåÌõ¼þ & ×éºÏʹÓÃ");
- printl(" poll() µÄµÚÒ»¸ö²ÎÊýÊÇÈÎÒ⺯Êý ¡ª¡ª");
- printl(" ÏëµÈɶ¾Íдɶ£¬ÍêÈ«²»Ìô¡£");
- doSleep(1000);
- // ÑÝʾ£ºµÈÎļþ³öÏÖ AND ´óС´ï±ê£¨ºÏ²¢Ìõ¼þ£©
- step("🎯 ʾÀý£ºµÈ¡¸Îļþ´æÔÚ AND ´óС ¡Ý 80%¡¹¡ª¡ª Ò»Ìõ poll ¸ã¶¨", 800);
- var r4 = poll(function() {
- try {
- var f = new java.io.File(apkPath);
- if (!f.exists()) return false;
- return f.length() >= targetSize * 0.8;
- } catch (e) { return false; }
- }, 5000, 200, "Îļþ´æÔÚ + ´óС ¡Ý 80%");
- if (r4.success) {
- step("🎊 Á½ÌõÌõ¼þͬʱÂú×㣡ÎļþÒÑ×¼±¸ºÃ°²×°", 800);
- }
- doSleep(1200);
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- // ÊÕβ
- // ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T
- separator();
- printl("¨X¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨[");
- printl("¨U ¨U");
- printl("¨U ✨ ÑÝʾ×Ü½á ¨U");
- printl("¨U ¨U");
- printl("¨U poll(condition, timeout, interval, label) ¨U");
- printl("¨U ¨U");
- printl("¨U ¡¤ ÏëµÈ¿Ø¼þ£¿ ¡ú waitForView() ¨U");
- printl("¨U ¡¤ ÏëµÈÎÄ×Ö£¿ ¡ú waitForText() ¨U");
- printl("¨U ¡¤ ÏëµÈÎļþ£¿ ¡ú waitForFile() ¨U");
- printl("¨U ¡¤ ÏëµÈ½Ó¿Ú£¿ ¡ú waitForHttp() ¨U");
- printl("¨U ¡¤ ÏëµÈɶ¶¼ÐÐ ¡ú poll(function(){ ... }) ¨U");
- printl("¨U ¨U");
- printl("¨^¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨a");
- doSleep(2000);
- // ÇåÀí
- try { new java.io.File(apkPath).delete(); } catch (e) {}
- printl("");
- printl("🎬 ÑÝʾ½áÊø£¬¸Ðл¹Û¿´£¡");
- }
- demo();
¸´ÖÆ´úÂë
|
|