panchengyong
10 days ago b2d3f7caf927e5b83ec52efb74f1f818dbb15236
rpa/libs/basic.js
@@ -11,8 +11,31 @@
    }
    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]);
@@ -20,10 +43,33 @@
    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();
@@ -35,7 +81,7 @@
/**
 * 计时结束
 * @param label 标签
 * @return {long} 与计时开始的差值
 * @return {number} 与计时开始的差值
 */
Console.prototype.timeEnd = function (label) {
    let t1 = ecImporter.time();
@@ -79,7 +125,7 @@
 * @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);
@@ -133,8 +179,8 @@
 * @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();
}
@@ -161,7 +207,7 @@
function formatlog(obj) {
    return obj;
    return obj + "";
}
/**
@@ -169,7 +215,7 @@
 * @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);
@@ -281,7 +327,7 @@
/**
 * 打印日志的时候,悬浮窗是否展示行号,正式发布,可以不展示行号,不影响调试和保存在文件的日志
 * @param ds  true 代表显示, false 不显示
 * @param {boolean}  true 代表显示, false 不显示
 */
function setFloatDisplayLineNumber(ds) {
    return ecImporter.setFloatDisplayLineNumber(ds);
@@ -298,7 +344,7 @@
/**
 * 打开EC系统设置页面
 * @return true 成功 false 失败
 * @return {boolean} true 成功 false 失败
 */
function openECSystemSetting() {
    return ecImporter.openECSystemSetting();
@@ -306,7 +352,7 @@
/**
 * 打开EC云控设置
 * @return true 成功 false 失败
 * @return {boolean} true 成功 false 失败
 */
function openECloudSetting() {
    return ecImporter.openECloudSetting();
@@ -336,7 +382,7 @@
 *  log_float_window : 日志悬浮窗展示 值有 是,否 两种
 *  ctrl_float_window : 启停控制悬浮窗展示 值有 是,否 两种
 *
 * @return 布尔型 true 是 false 否
 * @return {boolean} true 是 false 否
 */
function setECSystemConfig(params) {
    return ecImporter.setECSystemConfig(JSON.stringify(params));
@@ -346,7 +392,7 @@
/**
 * 载入dex文件
 * @param path 路径,加载顺序分别是插件目录(例如 ab.apk)或者是文件路径(例如 /sdcard/ab.apk)加载
 * @return true 载入成功, false载入失败
 * @return {boolean} true 载入成功, false载入失败
 */
function loadDex(path) {
    return ecImporter.loadDex(path);
@@ -355,7 +401,7 @@
/**
 * 设置重复加载dex,apk,防止插件过大导致加载时间过长
 * @param r 是否重复加载,true 可以重复加载,false 不可以重复加载
 * @return true 载入成功, false载入失败
 * @return {boolean} true 载入成功, false载入失败
 */
function setRepeatLoadDex(r) {
    return ecImporter.setRepeatLoadDex(r);
@@ -366,7 +412,7 @@
 * 执行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) {
@@ -386,7 +432,7 @@
/**
 * 载入jar文件
 * @param path 路径,加载顺序分别是插件目录(例如 ab.jar)或者是文件路径(例如 /sdcard/ab.jar)加载
 * @return true 载入成功, false载入失败
 * @return {boolean} true 载入成功, false载入失败
 */
function loadJar(path) {
    return ecImporter.loadJar(path);
@@ -402,7 +448,7 @@
/**
 * 判断EC运行的当前线程是否处于退出状态,可用判断脚本是否退出,或者子线程是否退出
 * @return true 已退出
 * @return {boolean} true 已退出
 */
function isScriptExit() {
    return ecImporter.isScriptExit();
@@ -414,7 +460,7 @@
 * @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);
@@ -425,7 +471,7 @@
 * 保存res文件夹中的资源文件到指定的路径
 * @param fileName 文件名称,不要加res前缀
 * @param path 要保存到的路径地址,例如/sdcard/aa.txt
 * @return boolean|布尔型 true代表保存成功
 * @return {boolean} true代表保存成功
 */
function saveResToFile(fileName, path) {
    return ecImporter.saveResToFile(fileName, path);
@@ -434,7 +480,7 @@
/**
 * 读取res文件夹中的资源文件,并返回字符串
 * @param fileName 文件名称,不要加res前缀
 * @return {string} 如果是null代表没内容
 * @return {null|string} 如果是null代表没内容
 */
function readResString(fileName) {
    return javaString2string(ecImporter.readResString(fileName));
@@ -447,7 +493,7 @@
 * @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);
@@ -467,7 +513,7 @@
/**
 * 读取IEC文件中的资源文件,并返回字符串
 * @param fileName 文件名称,如果放在某个文件夹下 需要加上文件名称
 * @return {string} 如果是null代表没内容
 * @return {null|string} 如果是null代表没内容
 */
function readIECFileAsString(fileName) {
    return javaString2string(ecImporter.getPkgContent(fileName));
@@ -476,7 +522,7 @@
/**
 * 读取IEC文件中的资源文件,并返回java的直接数组
 * @param fileName 文件名称,如果放在某个文件夹下 需要加上文件名称
 * @return {字节数组} 如果是null代表没内容
 * @return {null|字节数组|*} 如果是null代表没内容
 */
function readIECFileAsByte(fileName) {
    return ecImporter.getPkgContentAsByte(fileName);
@@ -486,7 +532,7 @@
/**
 * 读取res文件夹中的资源文件,并返Bitmap图片对象
 * @param fileName 文件名称,不要加res前缀
 * @return {Bitmap} 如果是null代表没内容
 * @return {null|Bitmap} 如果是null代表没内容
 */
function readResBitmap(fileName) {
    return ecImporter.readResBitmap(fileName);
@@ -495,7 +541,7 @@
/**
 * 启动自动化环境
 * @return 布尔型  true代表启动成功,false代表启动失败
 * @return {boolean}  true代表启动成功,false代表启动失败
 */
function startEnv() {
    return ecImporter.startEnv();
@@ -505,17 +551,40 @@
 * 守护自动化环境,
 * 如果是激活或者无障碍保活的情况下,尽量保证自动服务不掉线
 * @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);
@@ -523,7 +592,7 @@
/**
 * 设置壁纸服务函数
 * @return 布尔型  true代表启动成功,false代表启动失败
 * @return {boolean}  true代表启动成功,false代表启动失败
 */
function setWallpaperService() {
    return ecImporter.setWallpaperService();
@@ -531,7 +600,7 @@
/**
 * 是否设置壁纸成功
 * @return 布尔型  true代表成功,false代表失败
 * @return {boolean}  true代表成功,false代表失败
 */
function isWallpaperServiceSet() {
    return ecImporter.isWallpaperServiceSet();
@@ -540,7 +609,7 @@
/**
 * 自动化服务是否正常
 * @return 布尔型  true代表正常,false代表不正常
 * @return {boolean}  true代表正常,false代表不正常
 */
function isServiceOk() {
    return ecImporter.isServiceOk();
@@ -549,7 +618,7 @@
/**
 * 设置要执行的IEC文件路径
 * @param path 文件路径
 * @return 布尔型,true代表成功  false代表失败
 * @return {boolean} true代表成功  false代表失败
 */
function setIECPath(path) {
    return ecImporter.setIECPath(path);
@@ -558,7 +627,7 @@
/**
 * 获取要执行的IEC文件路径
 * @return {string},null代表无。ts.iec 代表是包内iec文件,其他代代表存储路径中的文件
 * @return {null|string} null代表无。ts.iec 代表是包内iec文件,其他代代表存储路径中的文件
 */
function getIECPath() {
    return ecImporter.getIECPath();
@@ -594,7 +663,7 @@
 * auto-service-status: 自动化服务可用状态
 *
 * @param callback 事件回调
 * @return {bool}  | true 成功,false失败
 * @return {boolean}  | true 成功,false失败
 */
function observeEvent(event, callback) {
    return observeEvents.on(event, callback);
@@ -603,7 +672,7 @@
/**
 * 取消事件监听
 * @param event 事件类型
 * @return {bool} | true 成功,false失败
 * @return {boolean} | true 成功,false失败
 */
function cancelObserveEvent(event) {
    return observeEvents.cancelEvent(event);
@@ -611,7 +680,7 @@
/**
 * 时间函数
 * @return {long} 毫秒级别的long时间
 * @return {number} 毫秒级别的long时间
 */
function time() {
    return ecImporter.time();
@@ -622,7 +691,7 @@
 * 适合版本 EC 7.9.0+
 * @param permissionArray 动态权限数组,可以是多个
 * @timeout 申请超时时间 单位是毫秒
 * @return {bool} true 代表有权限  false代表无权限或申请失败
 * @return {boolean} true 代表有权限  false代表无权限或申请失败
 */
function requestRuntimePermission(permissionArray, timeout) {
    if (permissionArray == null || permissionArray == undefined) {
@@ -698,7 +767,7 @@
 * 适合版本 EC 安卓 9.27.0+
 * 注意:这个需要使用参数配置,读取顺序是 优先读取单个设备配置 ,如果单个设备配置无任何数据,就读取 全局配置,
 * 返回参数中 含有 __from_global__ 这样的key,代表是来源于全局参数
 * @return {JSON} 对象
 * @return {null|JSON} 对象
 **/
function getCenterTaskInfo() {
    let x = ecImporter.getCenterTaskInfo();
@@ -712,3 +781,27 @@
}
/**
 * 获取截图自允许权限
 * 代理模式忽略这函数,这个适合弹窗权限截图模式
 * 适配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()
}