在自动化脚本中如何执行本地、离线自动化脚?

自动化脚本的执行方式灵活多样,既支持从云端拉取在线脚本,也支持直接运行存放在手机本地的 JavaScript 文件。在实际开发与调试过程中,出于网络环境受限、脚本调试需要或隐私安全等考虑,开发者往往更倾向于执行本地、离线的自动化脚本。本文将基于冰狐智能辅助的官方 API,详细梳理在冰狐平台中执行本地、离线自动化脚本的两种核心方法,并探讨其适用场景与注意事项。

一、核心 API 概述

冰狐智能辅助提供了两个用于脚本调用的核心函数:setDefaultScript 与 callScript。这两个函数均支持本地脚本的执行,但在工作机制和使用场景上存在显著差异。理解两者的区别,是正确选用 API 的前提。

二、方法一:使用 setDefaultScript 设置默认脚本

setDefaultScript 函数的作用是设置一个“默认脚本”。一旦调用该函数进行设置,其效果是永久有效的,除非开发者重新调用该函数并传入新的脚本路径,或传入空字符串来取消默认脚本的设置。

2.1 函数原型与参数

该函数接受一个字符串参数,即脚本的路径。根据官方文档,路径支持以下几种形式:

  • APK 资源内的脚本:使用 asset: 前缀,例如 'asset:xx.js'。这种方式适用于将脚本随 APK 打包发布,供内置脚本调用。

  • 相对路径脚本:直接传入文件名,例如 'xx.js'。相对路径的基准目录通常是应用的私有存储目录或脚本根目录。

  • 在线脚本:直接传入脚本名(不带路径前缀),例如 'xx'。此时平台会尝试从冰狐服务器拉取该脚本。

  • 绝对路径脚本:传入完整的文件系统路径,例如 '/sdcard/xx.js'。这是执行本地离线脚本最直接的方式。

2.2 适用场景

setDefaultScript 适用于需要全局替换当前自动化任务入口的场景。例如,在脚本开发过程中,开发者可能希望临时切换到另一个本地版本来调试特定功能,而不必修改每次调用的代码。设置默认脚本后,平台后续的自动化执行入口将自动指向该脚本,直到被重新设置或取消。

2.3 使用示例

function main() {
    // 设置绝对路径下的本地脚本为默认脚本
    setDefaultScript('/sdcard/my_script.js');
    // 此后,平台将默认执行 /sdcard/my_script.js
}

需要注意的是,该函数仅负责“设置”默认脚本,并不会立即执行该脚本。实际的执行时机取决于平台后续的自动化调度逻辑。

三、方法二:使用 callScript 直接调用脚本

与 setDefaultScript 的“设置”语义不同,callScript 函数的作用是立即调用指定的脚本。这是执行本地离线脚本更常用、更直接的方式。

3.1 函数原型与参数

callScript 的函数签名如下:

callScript(scriptName, params...)
  • scriptName(必填):字符串类型,指定要调用的脚本名称。同样支持多种路径格式:

    • APK 资源文件'asset:temp.js'

    • 本地 JS 文件'/sdcard/temp.js'

    • 在线脚本:直接传入脚本名,如 'test'

  • params...(选填):可变参数,任意数量。这些参数会直接透传给被调用脚本的 main 函数。

3.2 同步执行与线程模型

官方文档明确指出,callScript 是同步调用,它会执行移动端脚本中的 main 函数,并返回该函数的返回值。这意味着调用 callScript 的线程会被阻塞,直到被调用的脚本执行完毕。

重要限制:由于 callScript 不会创建独立的线程,而是直接在当前线程中执行,因此不能在 UI 线程(主线程)中使用,否则可能导致界面卡顿甚至 ANR(Application Not Responding)。官方文档建议,在 UI 相关代码中应使用 runTask 来替代。

3.3 参数传递与返回值

callScript 支持将任意数量的参数传递给目标脚本。目标脚本的 main 函数需要按顺序接收这些参数:

调用端代码:

// 调用本地脚本,并传递两个参数
callScript('/sdcard/test.js', 12, 'abc');

被调用的本地脚本 test.js

function main(id, name) {
    // id: 12, name: 'abc'
    console.log('id:' + id + ' name:' + name);
    return name + id;  // 返回值将作为 callScript 的返回值
}

如上所示,callScript 的返回值即为目标脚本 main 函数的返回值。这使得 callScript 不仅可以执行脚本,还可以实现脚本间的数据交换。

四、两种方法的对比与选型建议

维度setDefaultScriptcallScript
语义设置默认脚本(全局生效)立即执行指定脚本
执行时机设置后由平台调度触发调用时立即执行
线程模型取决于平台调度同步执行,阻塞当前线程
参数传递不支持动态传参支持任意数量参数透传
返回值无直接返回值返回目标脚本 main 函数的返回值
适用场景全局替换自动化入口按需调用特定脚本、脚本间协作

在实际开发中,如果只是临时执行某个本地脚本进行测试或功能调用,应优先选择 callScript,因为它更灵活、支持参数传递且能获取返回值。而 setDefaultScript 更适合需要持久化改变自动化任务入口的场景,例如在应用启动时根据配置动态决定加载哪个脚本作为主任务。

五、本地脚本路径的注意事项

在执行本地离线脚本时,路径的正确性至关重要。根据官方文档的说明,以下三种本地脚本路径是受支持的:

  1. asset: 前缀:指向打包在 APK 中的资源文件。这种方式适合将核心脚本与 APP 一起分发,无需额外从外部加载。

  2. 绝对路径:如 /sdcard/xxx.js,指向手机存储中的具体文件。这是执行外部离线脚本最通用的方式。

  3. 相对路径:如 xxx.js,其基准目录通常为应用的私有存储目录或脚本工作目录,具体行为可能取决于平台实现。

对于存放在手机外部存储(如 /sdcard/)的脚本,需要确保应用已获取相应的存储读取权限,否则文件访问可能失败。

六、总结

冰狐智能辅助平台通过 setDefaultScript 和 callScript 两个核心 API,为开发者提供了灵活且完备的本地、离线脚本执行能力。setDefaultScript 适用于全局默认脚本的设置,而 callScript 则更适合按需调用、参数传递和脚本间协作的场景。理解两者的工作机制、线程模型和适用边界,有助于开发者在编写自动化脚本时做出正确的技术选型,从而构建更稳定、高效的自动化解决方案。

在实际项目中,建议优先使用 callScript 配合绝对路径来执行本地离线脚本,并注意避免在 UI 线程中调用,以防止界面阻塞。同时,合理利用参数传递和返回值机制,可以实现脚本模块化,提升代码的复用性和可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值