Global Module
Overview
The global module can be used by calling methods directly, without a prefix object name.
CLI
getCliArgs Get CLI command-line arguments
- Get CLI command-line arguments
- When using with AI, prefer CLI args first; fall back elsewhere if unavailable
- Enables AI auto-parameter passing and post-pack testing from other sources
- Requires EC HarmonyOS Next 2.16.0+
- @return {null|JSON} JSON object; null means not launched from CLI
function main() { let a = getCliArgs(); if (a == null){ // Get from elsewhere } logd(JSON.stringify(a))}
main();Control Center Version
version Get control center version
- Get control center version
- @return string, e.g. 2.9.0
function main() { logd(version())}
main();Plugin Module Loading
loadDex Load jar package
- Load dex file
- @param path Path; loads from plugin dir (e.g. ab.jar) or file path (e.g. D:/ab.jar)
- @return true if loaded successfully, false if load failed
function main() { // Enter filename only; loads from project plugin directory loadDex("ocr.apk"); // Enter absolute path; loads from PC path loadDex("D:/a.jar"); // Class com.A in the apk can be used directly var obj = new com.A();}
main();require Import JS
- Import JS module
- @param path Path, e.g. local D:/a.js or EC project path slib/a.js
- @return module object
function main() { // Note: do not put JS files in js/ or subdirectories test = require("slib/a.js") logd(test.c());}
main();//Video:https://www.bilibili.com/video/BV1ES4y1f7qV?vd_source=2abc6be820f5a6382ebc0ceafc5dbe00&p=39&spm_id_from=333.788.videopod.episodesimportClass Import Java class
- Import a Java class for use in JS
- @param clz Class name, e.g. com.A
function main() { importClass(com.A); var obj = new com.A();}
main();importPackage Import Java package
- Import all classes under a Java package for JS
- @param clz Package name, e.g. com.b
function main() { importPackage(com.b); var obj = new com.b.A();}
main();Script Start & Stop
exit Exit script
exit();isScriptExit Whether script has exited
- Check whether the current EC thread has exited (main or child thread)
- @return true if exited
function main() { try { while (true) { sleep(1000) logd("222") if (isScriptExit()) { break } } logd("222") } catch (e) { logd(e) if (isScriptExit()) { return } }}
main();sleep Pause execution
- Sleep
- @param miSecond Milliseconds
function main() { sleep(1000);}
main();execScript Load JS
- Execute JS file or content, [If illegalStateException occurs, try changing how eval executes JS]
- eval is built into JS; pass JS content directly
- @param type 1 = file, 2 = JS content
- @param content Path e.g. D:/a.js or JS content
- @return Boolean; true = success, false = failure
function main() { var d = 'while(true){sleep(1000);logd(111111);}'; thread.execAsync(function () { //execScript(1,"D:/ad.js") execScript(2, d); });
while (true) { sleep(2000); loge("fsadffsad") }}
main();restartScript Restart script
- Restart script; useful for infinite loops or on exception.
- Warning: powerful; control auto-restart carefully or force-kill to stop
- @param path New IEC path, or null if not needed
- @param stopCurrent Whether to stop the current script
- @param delay Delay in seconds before execution
- @return bool; true = success, false = failure
function main() { logd("Running in script"); setStopCallback(function () { restartScript(null, true, 3) });
//setExceptionCallback(function (){ // restartScript(null,true,3) //}); sleep(1000); logd("Script ended")}
main();setScriptPause Set script pause or resume
- Set script pause or resume
- Requires EC HarmonyOS Next 1.0.0+
- @param pause true = pause, false = resume
- @param timeout Auto-resume timeout (ms); 0 = wait for external resume
- @return
{boolean}true if paused, false if running
function main() { sleep(1000); logd("start....") // Pause script execution; auto-resumes after 3 seconds // Demo only; in practice, pause based on your business logic or from the UI setScriptPause(true, 3000)
logd("Log after 3 seconds")}
main();isScriptPause Whether script is paused
- Whether the script is paused
- Requires EC HarmonyOS Next 1.0.0+
- @return
{boolean}true if script is paused
function main() { sleep(1000); logd("start....") // Pause script execution; auto-resumes after 3 seconds // Demo only; in practice, pause based on your business logic or from the UI // Function call demo only; handle per your business logic logd("isScriptPause " + isScriptPause()) setScriptPause(true, 3000) logd("isScriptPause " + isScriptPause()) logd("Log after 3 seconds")}
main();JSON Processing
JSON.stringify Format to JSON string
- Format object to JSON string
- @param object
- @return string
function main() { var m = {"sss": "a"}; var d = JSON.stringify(m); logd(d);}
main();JSON.parse Convert to JSON object
- Parse JSON string to object
- @param string
- @return object
function main() { let m = `{"sss": "a"}` let d = JSON.parse(m); logd(d);}
main();Script & Service Listeners
setStopCallback Script stop listener
- Call once at the start of the script
function main() { setStopCallback(function () { logd("Stop callback") }); var result = sleep(1000); if (result) { logd("Success"); } else { logd("Failed"); }}
main();setExceptionCallback Script exception stop listener
- Call once at the start of the script
function main() { setExceptionCallback(function (msg) { logd("Exception stop message: " + msg) }); var result = sleep(1000); if (result) { logd("Success"); } else { logd("Failed"); } // Exception thrown here result.length();}
main();Logging Methods
setLogLevel Set log level
- Set log level; enable or disable logging as needed
- Files saved under control center install dir logs/device
- @param level Log level: debug, info, warn, error, off (debug < info < warn < error < off)
- e.g. off = disable all; debug = logd/logi/logw/loge; info = logi/logw/loge; warn logw/loge only
- @param displaylogd Whether to show logd messages
- @return
{bool}Boolean true = success, false = failure
function main() { setLogLevel("info", false) for (var i = 0; i < 1; i++) { sleep(10); //logd(time()+" debug"); logi(time() + " info"); //logw(time()+" warn"); // loge(time()+" error"); logd("--- " + time()); } //logd(time()+" 222");}
main();setDisplayLineNumber Display line numbers
- Set whether logs show line numbers
- Requires EC HarmonyOS Next USB 2.0.0+
- @param display true = show line numbers
function main() { setDisplayLineNumber(true) for (var i = 0; i < 1; i++) { sleep(10); //logd(time()+" debug"); logi(time() + " info"); //logw(time()+" warn"); // loge(time()+" error"); logd("--- " + time()); } //logd(time()+" 222");}
main();setDeviceRecordLog Record log
- Record and save logs for the current device
- Off by default
- Requires EC HarmonyOS Next 1.0.0+
- @param open true = record to file, false = no action
- @param level Log level: debug, info, warn, error, off (debug < info < warn < error < off)
- e.g. off = disable all; debug = logd/logi/logw/loge; info = logi/logw/loge; warn logw/loge only
- @return
{bool}Boolean true = success, false = failure
function main() { setDeviceRecordLog(true, "", debug) for (var i = 0; i < 1; i++) { sleep(10); //logd(time()+" debug"); logi(time() + " info"); //logw(time()+" warn"); // loge(time()+" error"); logd("--- " + time()); } //logd(time()+" 222");}
main();logd Debug log
- Debug log
- @param msg Message string
function main() { logd("msg"); // Variadic arguments logd("Message {},{}", "test1", 2)}
main();loge Error log
- Error log
- @param msg Message string
function main() { loge("msg"); // Variadic arguments loge("Message {},{}", "test1", 2)}
main();logw Warning log
- Warning log
- @param msg Message string
function main() { logw("msg"); // Variadic arguments logw("Message {},{}", "test1", 2)}
main();logi Info log
- Info log
- @param msg Message string
function main() { logi("msg"); // Variadic arguments logi("Message {},{}", "test1", 2)}
main();Read IEC Package Resources
readIECFileAsString Read IEC internal file as string
- Read resource from IEC file and return string
- @param fileName File name; include folder path if in a subfolder
- @return
{string}; null means no content
function main() { var testData = readIECFileAsString("res/a.txt"); logd(testData)}
main();readIECFileAsByte Read IEC internal file as byte array
- Read resource from IEC file and return Java byte array
- @param fileName File name; include folder path if in a subfolder
- @return
{byte array}; null means no content
function main() { // Example: read an image var d = readIECFileAsByte("res/a.png") logd(d) logd(d.length)}
main();readResString Read string resource
- Read resource from res/ and return string
- @param fileName File name; do not include the res prefix
- @return string; null means no content
function main() { var testData = readResString("a.txt");}
main();readResBitmap Read Bitmap resource
- Read resource from res/ and return Bitmap
- @param fileName File name; do not include the res prefix
- @return BufferedImage; null means no content
function main() { // If under res/ directory var b = readResBitmap("a.png"); // If under res/img/ directory var b = readResBitmap("img/a.png");}
main();readResAutoImage Read Image resource
- Read resource from res/ and return AutoImage
- @param fileName File name; do not include the res prefix
- @return string; null means no content
function main() { // If under res/ directory var b = readResAutoImage("a.png"); // If under res/img/ directory var b = readResAutoImage("img/a.png");}
main();saveResToFile Save resource to file
- Save res/ resource to the given path
- @param fileName File name; do not include the res prefix
- @param path Destination path, e.g. D:/aa.txt
- @return boolean true if saved successfully
function main() { // If under res/ directory var b = saveResToFile("a.png", "D:/a.png"); // If under res/img/ directory var b = saveResToFile("img/a.png", "D:/a.png");}
main();findIECFile Find IEC file
- Find IEC files
- @param dir Folder name; null = res/ only; default res/; e.g. res/aaa/
- @param names File name prefix; null = no filter; separate with |, e.g. aaa|bb|cc
- @param ext File extension; null = no filter; separate with |, e.g..png|.jpg|.bmp
- @param recursion Whether to recurse subdirs; true = yes
- @return
{array}JSON array of file names
function main() { let res = findIECFile("res/", "dd2", ".png|.jpg", true) logd("findIECFile {}", JSON.stringify(res));}
main();Automation Service
isServiceOk Automation service status
- Whether automation service is OK
- @return true or false
function main() { var result = isServiceOk();}
main();isDeviceOnline Whether device is online
- Whether device is online
- @return true or false
function main() { var result = isDeviceOnline();}
main();startEnv Start automation
- Start automation environment and auto-correct coordinate system to prevent drift
- @return true or false
function main() { var result = startEnv();}
main();getStartEnvMsg Get automation message
- Get automation startup message
- @return string
function main() { var result = getStartEnvMsg(); logd(result)}
main();daemonEnv Daemon automation environment
- Daemon automation environment
- When activated or accessibility keep-alive, try to keep the service online
- @param daemon Whether to daemonize; true = yes, false = no
- @return Boolean; true = started successfully, false = start failed
function main() { var result = daemonEnv(true);}
main();closeEnv Close automation
- Close automation environment
- @return Boolean; true = started successfully, false = start failed
function main() { var result = closeEnv();}
main();Time
time Current timestamp in milliseconds
- Current 13-digit timestamp in milliseconds
- @return
{long}time in milliseconds
function main() { logd(time());}
main();timeFormat Format time
- Format current time, e.g.:
yyyy-MM-dd HH:mm:ss - @return
{string}formatted current time
function main() { logd(timeFormat("yyyy-MM-dd HH:mm:ss") + "");}
main();console.time Start timer
- Start timer; pair with timeEnd to measure duration
- @param label Label
- @return
{long}current time
function main() { console.time("1"); sleep(1000) logd(console.timeEnd("1"))}
main();console.timeEnd End timer
- End timer; pair with time start to measure duration
- @param label Label
- @return
{long}elapsed since timer start
function main() { console.time("1"); sleep(1000) logd(console.timeEnd("1"))}
main();other
random Random function
- Random value in range
- @param min Minimum
- @param max Maximum
- @return int between min and max inclusive
function main() { var result = random(100, 1000); sleep(result);}
main();Alert Sending
sendDingDingMsg Send DingTalk message
- Send DingTalk message
- Requires EC HarmonyOS Next 1.0.0+
- @param url Group/dept bot Webhook URL
- @param secret Bot Webhook secret; optional if using keyword filter
- @param msg Message to send
- @param atMobile Mobile numbers to @; comma-separated
- @param atAll Whether to @all; true or false
- @return
{string}DingTalk JSON result, e.g.{"errcode":0,"errmsg":"ok"}; errcode=0 = success
function main() { // Demo URL and secret. See this page for details: https://www.dingtalk.com/qidian/help-detail-20781541.html // https://blog.csdn.net/weixin_44646065/article/details/110637713 let url = "https://oapi.dingtalk.com/robot/send?access_token=59735fa75d835dbfaa502bb42886fca982960d20sac5e1df6bba4dd1aba02999c" let sec = "SEC2305788ab08e9534a33b86ae376697d3c9ee3095f331345d5ccd6e2e065ca8069" var res = sendDingDingMsg(url, sec, "My message", "", true); logd("sendDingDingMsg:" + res);}
main();authorization
isDeviceAuthOk Whether authorization is valid
- Check whether device authorization is expired
- @param type 1 = control center device auth, 2 = screen mirroring auth
- @return
{boolean}true = expired, false = not expired
function main() { var result = isDeviceAuthOk(1); logd(result);}
main();getDeviceAuth Get device authorization time
- Get device authorization expiry
- Requires EC HarmonyOS Next USB 2.7.0+
- @param type 1 = control center device auth, 2 = screen mirroring auth
- @return
{string}JSON string; useSerialNo: 1 = serial-number auth, else device ID auth; isExp: 1 = expired; expTime = expiry time
function main() { var result = getDeviceAuth(1); logd(result);}
main();