Skip to main content

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 0 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.episodes

importClass 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();