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 USB 9.31.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();
ipaVersion Get IPA version
- Get IPA version
- Requires EC iOS USB 6.6.0+
- @return
{string}e.g. 6.6.0
function main() {
logd(ipaVersion())
}
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() {
// Loads from the IEC plugin directory first
//loadDex("ocr.apk");
// Or load from an absolute 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
// Note: EC 3.5 is not supported
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, false, 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 iOS 6.46.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 iOS 6.46.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() {
var m = {"sss": "a"};
var d = JSON.stringify(m);
d = JSON.parse(d);
logd(d);
}
main();
Script & Service Listeners
setStopCallback Script stop listener
function main() {
setStopCallback(function () {
logd("Stop callback")
});
var result = sleep(1000);
if (result) {
logd("Success");
} else {
logd("Failed");
}
}
main();
setExceptionCallback Script exception stop listener
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 USB 8.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 USB 7.16.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() {
var b = readResBitmap("a.txt");
}
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() {
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() {
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
- On iOS 17+, can start but cannot auto-close previous tunnel.
- If automation drops, call startTunnel first, then this function
- @return true or false
function main() {
// iOS 17+: use this to restart tunnel
startTunnel();
var result = startEnv();
}
main();
startTunnel Start tunnel
- Start tunnel
- Requires EC iOS USB 9.22.0+
- Closes previous tunnel; effective on iOS 17+
- @returns
{string}empty = success, else failure
function main() {
var result = startTunnel();
logd(result)
}
main();
closeTunnel Close tunnel
- Close tunnel
- Requires EC iOS USB 9.22.0+
- Closes previous tunnel; effective on iOS 17+
- @returns
{string}empty = success, else failure
function main() {
var result = closeTunnel();
logd(result)
}
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 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
isReleaseIec Whether release version
- Whether IEC script is release version
- Requires EC USB 8.13.0+
- @return boolean; true = release, else debug
function main() {
var result = isReleaseIec();
logd(result);
}
main();
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 USB 6.16.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 = not expired, false = expired
function main() {
var result = isDeviceAuthOk(1);
logd(result);
}
main();
getDeviceAuth Get device authorization time
- Get device authorization expiry
- Requires EC iOS USB 8.10.0+
- @param type 1 = control center device auth, 2 = screen mirroring auth
- @return
{string}JSON string; useEcid: 1 = ECID auth, else device ID auth; isExp: 1 = expired; expTime = expiry time
function main() {
var result = getDeviceAuth(1);
logd(result);
}
main();