全局模块

说明

全局模块是指直接调用方法就可以使用的模块,无需使用前缀对象名称

全局函数在无障碍模式下和代理模式下都可以调用,不区分运行模式。

插件、模块加载

loadDex(path)

载入dex或者apk

@param path 路径,加载顺序分别是插件目录(例如 ab.apk)或者是文件路径(例如 /sdcard/ab.apk)加载
@return true 载入成功, false载入失败

function main(){ //类似这样会先从IEC文件的插件目录查找 //loadDex("ocr.apk"); //下面这个是从sdcard查找 loadDex("/sdcard/a.apk"); // a.apk中存在com.A这个这个类,可以直接使用 var obj = new com.A(); } main();

加载java文件中的class

// 混合开发 if (loadDex("defaultplugin.apk")) { importPackage(com.plugin.util); let utilsClass = new com.plugin.util.NetworkUtil(); if (utilsClass) { logd('是否联网:' + utilsClass.isNetConnected(context)); logd('运营商:' + utilsClass.getOperatorName(context)); logd('网络类型:' + utilsClass.getNetworkState(context)); logd('是否为WIFI:' + utilsClass.isWifiConnected(context)); logd('连接是否有效:' + utilsClass.isConnected(context)); logd('是否正在联网:' + utilsClass.isConnectedOrConnecting(context)); logd('移动连接:' + utilsClass.isMobileConnected(context)); logd('wifi可用:' + utilsClass.isWifiAvailable(context)); logd('移动网络可用:' + utilsClass.isMobileAvailable(context)); logd('移动网络开关:' + utilsClass.isMobileEnabled(context)); logd('网络可用:' + utilsClass.isAvailable(context)); } } else { loge("工具包加载失败"); }

require(path)

导入JS模块

@param path 路径,例如 本地/sdcard/a.js或者 EC工程中的文件路径 slib/a.js
@return 模块对象

function main(){ test = require("slib/a.js") logd(test.c()); } main();

importClass(clz)

导入java的class给js用

@param clz class的名称例如: com.A

function main(){ importClass(com.A); var obj = new com.A(); } main();

检测网络是否正常

// 网络检测 function isNetwork() { importClass(android.net.ConnectivityManager); var cm = context.getSystemService(context.CONNECTIVITY_SERVICE); var net = cm.getActiveNetworkInfo(); if (net == null || !net.isAvailable()) { return false; } else { return true; } }

importPackage(clz)

导入java包下面所有类给js用

@param clz class的名称例如: com.b

function main(){ importPackage(com.b); var obj = new com.b.A(); } main();

判断设备屏幕方向

logd(getScreenDirection()); //判断设备屏幕方向:1竖屏;2横屏 function getScreenDirection() { importPackage(android.content); return context.getResources().getConfiguration().orientation; }

脚本启停

exit()

退出脚本

sleep(miSecond)

暂停执行、休眠

@param miSecond 毫秒

function main(){ var result = sleep(1000); if (result){ toast("成功"); } else { toast("失败"); } } main();

execScript(type,content)

执行JS文件或者内容

@param type 1=文件,2=直接是JS内容
@param content 路径例如/sdcard/a.js或者js的内容
@return 布尔型,true代表执行成功, false代表失败

function main(){ var d ='while(true){sleep(1000);logd(111111);}'; thread.execAsync(function() { //execScript(1,"/sdcard/ad.js") execScript(2,d); }); while(true){ sleep(2000); loge("fsadffsad") } } main();

restartScript(path,stopCurrent,delay)

重启脚本,适合无限循环,或者有异常的情况可以下载最新的iec再次执行,避免进入UI才能热更新

该方法威力巨大,请自行控制好是否自动重启,否则只能强杀进程才能停止

@param path 新的IEC路径,如果不需要可以填写null
@param stopCurrent 是否停止当前的脚本
@param delay 延迟多少秒后执行
@return bool true 代表成功 false 代表失败

function main(){ logd("我是在脚本运行的"); setStopCallback(function(){ restartScript(null,false,3) }); //setExceptionCallback(function (){ // restartScript(null,true,3) //}); sleep(1000); logd("脚本结束") } main();

监听脚本和服务

setStopCallback()

脚本停止监听

function main(){ setStopCallback(function (){ logd("fdsafsad 我是停止回调") }); var result = sleep(1000); if (result){ toast("成功"); } else { toast("失败"); } } main();

setExceptionCallback()

脚本异常停止监听

function main(){ setExceptionCallback(function (msg){ logd(" 异常停止消息: "+msg) }); var result = sleep(1000); if (result){ toast("成功"); } else { toast("失败"); } //这里有异常抛出 result.length(); } main();

observeEvent(event,callback)

(无障碍模式)对系统事件进行监听

@param event 事件类型 类型有:

  • activity-change 页面切换,OK
  • notification-show:状态栏通知展示, OK
  • toast-show:Toast消息展示, OK
  • key-down:按键按下, OK
  • key-up:按键弹起 OK
  • acc-service-interrupt:无障碍服务被中断 OK
  • acc-service-destroy: 无障碍服务被销毁 OK
  • acc-event:无障碍节点事件 OK
  • acc-service-connected: 无障碍服务连接成功 OK
  • auto-service-status: 自动化服务可用状态

@param callback 事件回调
@return {bool} | true 成功,false失败

function main(){ startEnv(); logd("开始监听"); observeEvent("activity-change",function (key,data){ logd("页面切换: "+typeof data) logd("页面切换: "+data) }); //监听无障碍节点事件 observeEvent("acc-event",function (key,data){ logd("acc-event: "+typeof data) logd("acc-event: "+data) }); while(true){ sleep(1000) } //取消事件监听 cancelObserveEvent("acc-event") } main();

监听页面变化数据

if(isAccMode()) { logd('无障碍模式'); observeEvent("acc-event",function (key,data){ logd("acc-event: "+typeof data) logd("acc-event: "+data) }); while(true){ sleep(1000) } } else { loge('非无障碍模式'); }

cancelObserveEvent(event)

取消对系统事件监听

@param event 事件类型
@return {bool} | true 成功,false失败

function main(){ startEnv(); logd("开始监听"); observeEvent("activity-change",function (key,data){ logd("页面切换: "+typeof data) logd("页面切换: "+data) }); //监听无障碍节点事件 observeEvent("acc-event",function (key,data){ logd("acc-event: "+typeof data) logd("acc-event: "+data) }); sleep(10000) //取消事件监听 cancelObserveEvent("acc-event") } main();

读取IEC包资源

readResString(fileName)

读取res文件夹中的资源文件,并返回字符串

@param fileName 文件名称,不要加res前缀
@return string 如果是null代表没内容

function main(){ var testData = readResString("a.txt"); } main();

readResBitmap(fileName)

读取res文件夹中的资源文件,并返Bitmap图片对象

@param fileName 文件名称,不要加res前缀
@return string 如果是null代表没内容

function main(){ var b = readResBitmap("a.txt"); } main();

readResAutoImage(fileName)

读取res文件夹中的资源文件,并返 AutoImage 图片对象

@param fileName 文件名称,不要加res前缀
@return string 如果是null代表没内容

function main(){ var b = readResAutoImage("img/a.png"); } main();

saveResToFile(fileName,path)

保存res文件夹中的资源文件到指定的路径

@param fileName 文件名称,不要加res前缀
@param path 要保存到的路径地址,例如/sdcard/aa.txt
@return boolean|布尔型 true代表保存成功

function main(){ var b = saveResToFile("img/a.png","/sdcard/a.png"); } main();

UI参数读取

readConfigString(key)

读取UI界面中的参数,返回是字符串

@param key 在UI界面中配置的key
@return 字符串 找不到就返回空字符串

function main(){ var testData = readConfigString("test_key"); } main();

readConfigInt(key)

读取UI界面中的参数,返回是整型

@param key 在UI界面中配置的key
@return 整型,找不到就返回0

function main(){ var testData = readConfigInt("test_key"); } main();

readConfigDouble(key)

读取UI界面中的参数,返回是Double型

@param key 在UI界面中配置的key
@return double

function main(){ var testData = readConfigDouble("test_key"); } main();

readConfigBoolean(key)

读取UI界面中的参数,返回是布尔型

@param key 在UI界面中配置的key
@return true 或者 false

function main(){ var testData = readConfigDouble("test_key"); } main();

deleteConfig(key)

删除配置值

@param key 在UI界面中配置的key
@return {bool} true 代表成功 false 代表失败

function main(){ var testData = deleteConfig("test_key"); } main();

getConfigJSON()

取得配置的JSON

@return JSON数据

function main(){ var testData = getConfigJSON(); } main();

updateConfig(key,value)

更新配置

@param key 键
@param value 值
@return {boolean} true 成功,false失败

function main(){ updateConfig("a","sss"); } main();

封装简单的本地存储读写方法

// Demo By 飞云编程学院 logd(setStorageData('feiyun', 'http://www.feiyunjs.com')); logi(getStorageData('feiyun')); //保存本地数据 function setStorageData(key, value) { return updateConfig(key, value); } //读取本地数据 function getStorageData(key) { let result = readConfigString(key); if (result) { return result; } else { //找不到则返回undefined } } //删除本地数据 function delStorageData(key) { return deleteConfig(key); }

系统设置

setECSystemConfig(params)

设置EC的系统参数

@param params map形式例如

{ "running_mode":"无障碍", "auto_start_service":"是", "log_float_window":"否", "ctrl_float_window":"否" }

参数解释有:

  • running_mode : 运行模式 值有 无障碍,代理两种
  • auto_start_service: 开机自启动 值有 是,否 两种
  • log_float_window : 日志悬浮窗展示 值有 是,否 两种
  • ctrl_float_window : 启停控制悬浮窗展示 值有 是,否 两种

@return 布尔型 true 是 false 否

function main(){ var m = { "node_service":"需要", "proxy_service":"不需要", "running_mode":"无障碍", "log_float_window":"否", "ctrl_float_window":"否" }; setECSystemConfig(m); } main();

openECSystemSetting()

打开EC系统设置页面

@return true 成功 false 失败

function main(){ var result = openECSystemSetting(); } main();

openECloudSetting()

打开EC云控界面

@return true 成功 false 失败

function main(){ var result = openECloudSetting(); } main();

设置IEC文件(脚本中的热更新)

setIECPath()

设置要执行的IEC文件路径

@return true 成功 false 失败

function main(){ var result = setIECPath("/sdcard/release.iec"); logd("result : "+result); logd("当前路径 "+getIECPath()); //开启定时任务准备下一次执行 var id2 =startJob("task2","2",true); logd("job id "+id2); } main();

运行模式

isAccMode()

是否是无障碍模式

@return true或者false

function main(){ var result = isAccMode(); } main();

isAgentMode()

是否是代理模式

@return true或者false

function main(){ var result = isAgentMode(); } main();

isServiceOk()

自动化服务是否正常

@return true或者false

function main(){ var result = isServiceOk(); } main();

startEnv()

启动自动化服务环境

@return true或者false

function main(){ var result = startEnv(); } main();

closeEnv()

关闭自动化服务环境

适用版本(EC 5.14.0+)

@return true或者false

function main(){ var result = closeEnv(); } main();

activeSelf()

激活自己
条件:1 开启USB调试,2 开启本机ADB WIFI调试,请参考激活章节文档

适用版本(EC 5.15.0+)

@param activeType 激活类型,0 自动,1 模式1 2 模式2
@param timeout 超时时间
@return {string} 激活成功:代表成功,其他都是错误消息

function main(){ var result = activeSelf(0,10*1000); logd(result) } main();

activeDevice()

通过设备的IP激活设备

条件:1 开启目标设备USB调试,2 开启目标设备ADB WIFI调试,请参考激活章节文档

适用版本(EC 5.15.0+)

@param ip 设备的IP
@param activeType 激活类型,0 自动,1 模式1 2 模式2
@param timeout 超时时间
@return {string} 激活成功:代表成功,其他都是错误消息

function main(){ var result = activeDevice("192.168.1.108",0,10*1000); logd(result) } main();

自动启动服务

/** @description 自动启动服务 @param time:失败后重启次数 @return boolean:返回是否启动成功 */ function autoServiceStart(time) { if (isAccMode()) { logd('运行模式:无障碍'); } else if (isAgentMode()) { logd('运行模式:代理'); } else { loge('运行模式:未知'); } for (var i = 0; i < time; i++) { if (isServiceOk()) { return true; } else { var started = startEnv(); logd("第" + (i + 1) + "次启动服务: " + started); if (isServiceOk()) { return true; } } } return isServiceOk(); };

时间

time()

适用版本(EC 5.14.0+)

毫秒时间函数

@return {long} 毫秒级别的long时间

function main(){ logd(time()); } main();

timeFormat()

适用版本(EC 5.14.0+)

格式化时间函数例如:yyyy-MM-dd HH:mm:ss

@return {string} 格式化之后的当前时间

function main(){ logd(timeFormat("yyyy-MM-dd HH:mm:ss")); } main();

console.time()

适用版本(EC 5.14.0+)

计时开始,和timeEnd成对出现计算用时

@param label 标签
@return {long} 当前时间

function main(){ console.time("1"); sleep(1000) logd(console.timeEnd("1")) } main();

console.timeEnd()

适用版本(EC 5.14.0+)

计时结束,和timeEnd成对出现计算用时

@param label 标签
@return {long} 与计时开始的差值

function main(){ console.time("1"); sleep(1000) logd(console.timeEnd("1")) } main();