说明
全局模块是指直接调用方法就可以使用的模块,无需使用前缀对象名称
全局函数在无障碍模式下和代理模式下都可以调用,不区分运行模式。
插件、模块加载
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();