| | |
| | | } |
| | | ecImporter.logd(formatlog(msg), s); |
| | | } |
| | | |
| | | Console.prototype.info = function (msg) { |
| | | var s = []; |
| | | for (var i = 1; i < arguments.length; i++) { |
| | | s.push(arguments[i]); |
| | | } |
| | | ecImporter.logi(formatlog(msg), s); |
| | | } |
| | | Console.prototype.warn = function (msg) { |
| | | var s = []; |
| | | for (var i = 1; i < arguments.length; i++) { |
| | | s.push(arguments[i]); |
| | | } |
| | | ecImporter.logw(formatlog(msg), s); |
| | | } |
| | | Console.prototype.error = function (msg) { |
| | | var s = []; |
| | | for (var i = 1; i < arguments.length; i++) { |
| | | s.push(arguments[i]); |
| | | } |
| | | ecImporter.loge(formatlog(msg), s); |
| | | } |
| | | Console.prototype.logLine = function (line, msg) { |
| | | if (arguments.length <= 0) { |
| | | return |
| | | } |
| | | var s = []; |
| | | for (var i = 2; i < arguments.length; i++) { |
| | | s.push(arguments[i]); |
| | |
| | | ecImporter.logdLine(line, formatlog(msg), s); |
| | | } |
| | | |
| | | Console.prototype.infoLine = function (line, msg) { |
| | | var s = []; |
| | | for (var i = 2; i < arguments.length; i++) { |
| | | s.push(arguments[i]); |
| | | } |
| | | ecImporter.logiLine(line, formatlog(msg), s); |
| | | } |
| | | |
| | | Console.prototype.warnLine = function (line, msg) { |
| | | var s = []; |
| | | for (var i = 2; i < arguments.length; i++) { |
| | | s.push(arguments[i]); |
| | | } |
| | | ecImporter.logwLine(line, formatlog(msg), s); |
| | | } |
| | | |
| | | Console.prototype.errorLine = function (line, msg) { |
| | | var s = []; |
| | | for (var i = 2; i < arguments.length; i++) { |
| | | s.push(arguments[i]); |
| | | } |
| | | ecImporter.logeLine(line, formatlog(msg), s); |
| | | } |
| | | /** |
| | | * 计时开始 |
| | | * @param label 标签 |
| | | * @return {long} 当前时间 |
| | | * @return {number} 当前时间 |
| | | */ |
| | | Console.prototype.time = function (label) { |
| | | let t = ecImporter.time(); |
| | |
| | | /** |
| | | * 计时结束 |
| | | * @param label 标签 |
| | | * @return {long} 与计时开始的差值 |
| | | * @return {number} 与计时开始的差值 |
| | | */ |
| | | Console.prototype.timeEnd = function (label) { |
| | | let t1 = ecImporter.time(); |
| | |
| | | * @param version 当前版本,使用整形数据,例如 1这样的数字 |
| | | * @param appendDeviceInfo 是否拼接设备信息数据 true 或者 false |
| | | * @param timeout 请求超时时间 单位是毫秒 |
| | | * @return {bool} true 代表需要更新 false代表无需更新 |
| | | * @return {boolean} true 代表需要更新 false代表无需更新 |
| | | */ |
| | | HotUpdateWrapper.prototype.updateReq = function (updateUrl, version, appendDeviceInfo, timeout) { |
| | | return ecImporter.hotUpdateReq(updateUrl, version, appendDeviceInfo, timeout); |
| | |
| | | * @param timeout 自动恢复时间单位毫秒,0 代表不自动恢复,等待外部交互后恢复,大于0代表到了时间自动恢复运行 |
| | | * @return {boolean} true 代表脚本处于暂停中,false 代表继续运行中 |
| | | */ |
| | | function setScriptPause(pause,timeout) { |
| | | pauseScriptWrapper.setScriptPause(pause,timeout); |
| | | function setScriptPause(pause, timeout) { |
| | | pauseScriptWrapper.setScriptPause(pause, timeout); |
| | | return pauseScriptWrapper.isScriptPause(); |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | function formatlog(obj) { |
| | | return obj; |
| | | return obj + ""; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param level 日志等级,值分别是 debug,info,warn,error,off,排序分别是debug<info<warn<error<off, |
| | | * 例如 off代表关闭所有级别日志,debug代表打印包含logd,logi,logw,loge的日志,info代表打印包含logi,logw,loge的日志,warn 代表打印包含logw,loge的日志 |
| | | * @param displayToast 是否展示toast消息 |
| | | * @return {bool} 布尔型 true代表成功 false代表失败 |
| | | * @return {boolean} 布尔型 true代表成功 false代表失败 |
| | | */ |
| | | function setLogLevel(level, displayToast) { |
| | | ecImporter.setLogLevel(level, displayToast); |
| | |
| | | |
| | | /** |
| | | * 打印日志的时候,悬浮窗是否展示行号,正式发布,可以不展示行号,不影响调试和保存在文件的日志 |
| | | * @param ds true 代表显示, false 不显示 |
| | | * @param {boolean} true 代表显示, false 不显示 |
| | | */ |
| | | function setFloatDisplayLineNumber(ds) { |
| | | return ecImporter.setFloatDisplayLineNumber(ds); |
| | |
| | | |
| | | /** |
| | | * 打开EC系统设置页面 |
| | | * @return true 成功 false 失败 |
| | | * @return {boolean} true 成功 false 失败 |
| | | */ |
| | | function openECSystemSetting() { |
| | | return ecImporter.openECSystemSetting(); |
| | |
| | | |
| | | /** |
| | | * 打开EC云控设置 |
| | | * @return true 成功 false 失败 |
| | | * @return {boolean} true 成功 false 失败 |
| | | */ |
| | | function openECloudSetting() { |
| | | return ecImporter.openECloudSetting(); |
| | |
| | | * log_float_window : 日志悬浮窗展示 值有 是,否 两种 |
| | | * ctrl_float_window : 启停控制悬浮窗展示 值有 是,否 两种 |
| | | * |
| | | * @return 布尔型 true 是 false 否 |
| | | * @return {boolean} true 是 false 否 |
| | | */ |
| | | function setECSystemConfig(params) { |
| | | return ecImporter.setECSystemConfig(JSON.stringify(params)); |
| | |
| | | /** |
| | | * 载入dex文件 |
| | | * @param path 路径,加载顺序分别是插件目录(例如 ab.apk)或者是文件路径(例如 /sdcard/ab.apk)加载 |
| | | * @return true 载入成功, false载入失败 |
| | | * @return {boolean} true 载入成功, false载入失败 |
| | | */ |
| | | function loadDex(path) { |
| | | return ecImporter.loadDex(path); |
| | |
| | | /** |
| | | * 设置重复加载dex,apk,防止插件过大导致加载时间过长 |
| | | * @param r 是否重复加载,true 可以重复加载,false 不可以重复加载 |
| | | * @return true 载入成功, false载入失败 |
| | | * @return {boolean} true 载入成功, false载入失败 |
| | | */ |
| | | function setRepeatLoadDex(r) { |
| | | return ecImporter.setRepeatLoadDex(r); |
| | |
| | | * 执行JS文件或者内容 |
| | | * @param type 1=文件,2=直接是JS内容 |
| | | * @param content 路径例如/sdcard/a.js或者js的内容 |
| | | * @return 布尔型,true代表执行成功, false代表失败 |
| | | * @return {boolean} true代表执行成功, false代表失败 |
| | | */ |
| | | function execScript(type, content) { |
| | | if (type == 1) { |
| | |
| | | /** |
| | | * 载入jar文件 |
| | | * @param path 路径,加载顺序分别是插件目录(例如 ab.jar)或者是文件路径(例如 /sdcard/ab.jar)加载 |
| | | * @return true 载入成功, false载入失败 |
| | | * @return {boolean} true 载入成功, false载入失败 |
| | | */ |
| | | function loadJar(path) { |
| | | return ecImporter.loadJar(path); |
| | |
| | | |
| | | /** |
| | | * 判断EC运行的当前线程是否处于退出状态,可用判断脚本是否退出,或者子线程是否退出 |
| | | * @return true 已退出 |
| | | * @return {boolean} true 已退出 |
| | | */ |
| | | function isScriptExit() { |
| | | return ecImporter.isScriptExit(); |
| | |
| | | * @param path 新的IEC路径,如果不需要可以填写null |
| | | * @param stopCurrent 是否停止当前的脚本 |
| | | * @param delay 延迟多少秒后执行 |
| | | * @return bool true 代表成功 false 代表失败 |
| | | * @return {boolean} true 代表成功 false 代表失败 |
| | | */ |
| | | function restartScript(path, stopCurrent, delay) { |
| | | return ecImporter.restartScript(path, stopCurrent, delay); |
| | |
| | | * 保存res文件夹中的资源文件到指定的路径 |
| | | * @param fileName 文件名称,不要加res前缀 |
| | | * @param path 要保存到的路径地址,例如/sdcard/aa.txt |
| | | * @return boolean|布尔型 true代表保存成功 |
| | | * @return {boolean} true代表保存成功 |
| | | */ |
| | | function saveResToFile(fileName, path) { |
| | | return ecImporter.saveResToFile(fileName, path); |
| | |
| | | /** |
| | | * 读取res文件夹中的资源文件,并返回字符串 |
| | | * @param fileName 文件名称,不要加res前缀 |
| | | * @return {string} 如果是null代表没内容 |
| | | * @return {null|string} 如果是null代表没内容 |
| | | */ |
| | | function readResString(fileName) { |
| | | return javaString2string(ecImporter.readResString(fileName)); |
| | |
| | | * @param names 文件名称前缀,null代表不匹配, 例如aaa,多个前缀用|分割,例如 aaa|bb|cc |
| | | * @param ext 文件扩展名 ,null代表不匹配,例如.png,多个扩展用|分割,例如 .png|.jpg|.bmp |
| | | * @param recursion 是否递归子目录,true代表递归 |
| | | * @return {array} 文件名称JSON数组 |
| | | * @return {null|JSON} 文件名称JSON数组 |
| | | */ |
| | | function findIECFile(dir, names, ext, recursion) { |
| | | let s = ecImporter.findIECFile(dir, names, ext, recursion); |
| | |
| | | /** |
| | | * 读取IEC文件中的资源文件,并返回字符串 |
| | | * @param fileName 文件名称,如果放在某个文件夹下 需要加上文件名称 |
| | | * @return {string} 如果是null代表没内容 |
| | | * @return {null|string} 如果是null代表没内容 |
| | | */ |
| | | function readIECFileAsString(fileName) { |
| | | return javaString2string(ecImporter.getPkgContent(fileName)); |
| | |
| | | /** |
| | | * 读取IEC文件中的资源文件,并返回java的直接数组 |
| | | * @param fileName 文件名称,如果放在某个文件夹下 需要加上文件名称 |
| | | * @return {字节数组} 如果是null代表没内容 |
| | | * @return {null|字节数组|*} 如果是null代表没内容 |
| | | */ |
| | | function readIECFileAsByte(fileName) { |
| | | return ecImporter.getPkgContentAsByte(fileName); |
| | |
| | | /** |
| | | * 读取res文件夹中的资源文件,并返Bitmap图片对象 |
| | | * @param fileName 文件名称,不要加res前缀 |
| | | * @return {Bitmap} 如果是null代表没内容 |
| | | * @return {null|Bitmap} 如果是null代表没内容 |
| | | */ |
| | | function readResBitmap(fileName) { |
| | | return ecImporter.readResBitmap(fileName); |
| | |
| | | |
| | | /** |
| | | * 启动自动化环境 |
| | | * @return 布尔型 true代表启动成功,false代表启动失败 |
| | | * @return {boolean} true代表启动成功,false代表启动失败 |
| | | */ |
| | | function startEnv() { |
| | | return ecImporter.startEnv(); |
| | |
| | | * 守护自动化环境, |
| | | * 如果是激活或者无障碍保活的情况下,尽量保证自动服务不掉线 |
| | | * @param daemon 是否守护自动化环境 true 是,false 否 |
| | | * @return 布尔型 true代表启动成功,false代表启动失败 |
| | | * @return {boolean} true代表启动成功,false代表启动失败 |
| | | */ |
| | | function daemonEnv(daemon) { |
| | | return ecImporter.setDaemonAutoService(daemon); |
| | | } |
| | | |
| | | /** |
| | | * 设置代理模式下获取节点方式 |
| | | * 该方法仅对代理模式生效 |
| | | * EC 安卓 11.2.0+ |
| | | * 该方法在启动代理服务之前调用,使用2和3 可以减少检测的特征 |
| | | * 1的方式会出现 ruru检测出 AccessibilityManager.isEnabled,2和其他的方式不会出现 |
| | | * 1的方式节点能力交强,2节点功能较弱,0和3 就没有节点功能 |
| | | * @param support 1 类似无障碍一样的方式, 2 shell dump的的方式,3或者0 不开启节点服务 |
| | | * @return {boolean} true |
| | | */ |
| | | function setAgentSupportNode(support) { |
| | | return ecImporter.setAgentSupportNode(support + ""); |
| | | } |
| | | |
| | | /** |
| | | * 获取打包混淆后的真实组件名称 |
| | | * @param name 原始名称 |
| | | * @return {string} 真实的类名 |
| | | */ |
| | | function getComponentRealName(name) { |
| | | return ecImporter.getComponentRealName(name); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 关闭自动化环境 |
| | | * @param skinAccPage 无障碍模式停止失败 是否跳转到开启无障碍页面 |
| | | * @return 布尔型 true代表启动成功,false代表启动失败 |
| | | * @return {boolean} true代表启动成功,false代表启动失败 |
| | | */ |
| | | function closeEnv(skinAccPage) { |
| | | return ecImporter.closeEnv(skinAccPage); |
| | |
| | | |
| | | /** |
| | | * 设置壁纸服务函数 |
| | | * @return 布尔型 true代表启动成功,false代表启动失败 |
| | | * @return {boolean} true代表启动成功,false代表启动失败 |
| | | */ |
| | | function setWallpaperService() { |
| | | return ecImporter.setWallpaperService(); |
| | |
| | | |
| | | /** |
| | | * 是否设置壁纸成功 |
| | | * @return 布尔型 true代表成功,false代表失败 |
| | | * @return {boolean} true代表成功,false代表失败 |
| | | */ |
| | | function isWallpaperServiceSet() { |
| | | return ecImporter.isWallpaperServiceSet(); |
| | |
| | | |
| | | /** |
| | | * 自动化服务是否正常 |
| | | * @return 布尔型 true代表正常,false代表不正常 |
| | | * @return {boolean} true代表正常,false代表不正常 |
| | | */ |
| | | function isServiceOk() { |
| | | return ecImporter.isServiceOk(); |
| | |
| | | /** |
| | | * 设置要执行的IEC文件路径 |
| | | * @param path 文件路径 |
| | | * @return 布尔型,true代表成功 false代表失败 |
| | | * @return {boolean} true代表成功 false代表失败 |
| | | */ |
| | | function setIECPath(path) { |
| | | return ecImporter.setIECPath(path); |
| | |
| | | |
| | | /** |
| | | * 获取要执行的IEC文件路径 |
| | | * @return {string},null代表无。ts.iec 代表是包内iec文件,其他代代表存储路径中的文件 |
| | | * @return {null|string} null代表无。ts.iec 代表是包内iec文件,其他代代表存储路径中的文件 |
| | | */ |
| | | function getIECPath() { |
| | | return ecImporter.getIECPath(); |
| | |
| | | * auto-service-status: 自动化服务可用状态 |
| | | * |
| | | * @param callback 事件回调 |
| | | * @return {bool} | true 成功,false失败 |
| | | * @return {boolean} | true 成功,false失败 |
| | | */ |
| | | function observeEvent(event, callback) { |
| | | return observeEvents.on(event, callback); |
| | |
| | | /** |
| | | * 取消事件监听 |
| | | * @param event 事件类型 |
| | | * @return {bool} | true 成功,false失败 |
| | | * @return {boolean} | true 成功,false失败 |
| | | */ |
| | | function cancelObserveEvent(event) { |
| | | return observeEvents.cancelEvent(event); |
| | |
| | | |
| | | /** |
| | | * 时间函数 |
| | | * @return {long} 毫秒级别的long时间 |
| | | * @return {number} 毫秒级别的long时间 |
| | | */ |
| | | function time() { |
| | | return ecImporter.time(); |
| | |
| | | * 适合版本 EC 7.9.0+ |
| | | * @param permissionArray 动态权限数组,可以是多个 |
| | | * @timeout 申请超时时间 单位是毫秒 |
| | | * @return {bool} true 代表有权限 false代表无权限或申请失败 |
| | | * @return {boolean} true 代表有权限 false代表无权限或申请失败 |
| | | */ |
| | | function requestRuntimePermission(permissionArray, timeout) { |
| | | if (permissionArray == null || permissionArray == undefined) { |
| | |
| | | * 适合版本 EC 安卓 9.27.0+ |
| | | * 注意:这个需要使用参数配置,读取顺序是 优先读取单个设备配置 ,如果单个设备配置无任何数据,就读取 全局配置, |
| | | * 返回参数中 含有 __from_global__ 这样的key,代表是来源于全局参数 |
| | | * @return {JSON} 对象 |
| | | * @return {null|JSON} 对象 |
| | | **/ |
| | | function getCenterTaskInfo() { |
| | | let x = ecImporter.getCenterTaskInfo(); |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取截图自允许权限 |
| | | * 代理模式忽略这函数,这个适合弹窗权限截图模式 |
| | | * 适配EC 10.25.0+ |
| | | * 在有shell或者root权限执行,申请完毕可以关闭shell和root |
| | | * 尝试获取截图自动允许权限,申请截图不会弹窗 |
| | | * @return {boolean} true 代表成功 false代表失败 |
| | | */ |
| | | function tryGetProjectionPermission() { |
| | | return ecImporter.tryGetProjectionPermission() |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取无障碍自允许权限 |
| | | * 有权限后 无障碍可以自动启动 |
| | | * 适配EC 10.25.0+ |
| | | * 在有shell或者root权限执行,申请完毕可以关闭shell和root |
| | | * 尝试获取无障碍自动化允许的权限 |
| | | * @return {boolean} true 代表成功 false代表失败 |
| | | */ |
| | | function tryGetAccStartupPermission() { |
| | | return ecImporter.tryGetAccStartupPermission() |
| | | } |