Autox.js 中文文档 下载 App

Autox.js 的两个 JavaScript 引擎 Rhino vs Node.js 运行时对比

一个 App 里跑两个 JS 引擎

Autox.js v7 最重量级的升级,就是在原有的 Rhino 引擎之外,又引入了一个 Node.js 运行时。两个引擎同时可用、互相桥接。理解它们的关系,是写好 v7 脚本的前提。

两个引擎各自是什么

RhinoNode.js
来源Mozilla 的 Java 实现 JS 引擎Google V8 引擎
模块系统无(v7 部分支持 CommonJS)CommonJS + ES Module
npm 生态有限完整
Android 集成直接(Java 对象可 new 可调用)通过桥接层
适用场景自动化脚本、UI 界面、Android API 调用网络请求、复杂计算、npm 包复用

为什么需要两个

Rhino 擅长的:

Node.js 擅长的:

怎么区分用哪个

默认 Rhino

脚本默认在 Rhino 引擎里跑。除非你显式写了 "nodejs"; 声明:

// 默认:Rhino 模式
toast("Rhino");

// 声明使用 Node.js 运行时
"nodejs";
console.log("Node.js 模式");

Node 模式示例

"nodejs";

// 引入 npm 包(需要先在项目里 npm install)
let axios = require("axios");

// 发 HTTP 请求
axios.get("https://api.example.com/data")
    .then(res => {
        console.log("拿到数据:", res.data);
    })
    .catch(err => {
        console.error("请求失败:", err);
    });

混合使用

可以在 Rhino 里启动一个 Node 任务,或者反过来。具体桥接 API 取决于你用的版本——v7.2.4 做了较多改进,但仍然在快速迭代中。

ES6+ 语法支持

Rhino v1.8.0(v7 升级后)对 ES6+ 语法的支持大幅改善:

语法v7 Rhino说明
let / const✅块级作用域
箭头函数✅() => {}
解构✅let {a, b} = obj
模板字符串✅` hello ${name} `
for...of✅遍历可迭代对象
class✅ES6 class
Promise✅原生支持
async/await✅v7 增强
模块 import/export部分Rhino 原生不支持 ESM,Node 模式完整支持

实际开发中你可以放心用这些现代语法——v7 的 Rhino 引擎已经够用。

TypeScript 支持

v7.2.4 宣布引入 TypeScript 支持。这意味着你可以直接写 .ts 文件,Autox.js 内部会调用 TS 编译器转成 JS 再执行。

// my_script.ts
interface User {
    name: string;
    age: number;
}

function greet(user: User): string {
    return `你好,${user.name}!`;
}

const alice: User = { name: "Alice", age: 25 };
toast(greet(alice));

TypeScript 的类型检查在开发阶段(VSCode 扩展)就能帮你发现错误——比写完脚本跑起来才报错好得多。

实战选择建议

场景推荐引擎理由
自动化脚本(选择器、图像识别)Rhino直接调用 Android API,零桥接开销
带 E4X 界面的工具RhinoUI 系统只支持 Rhino
需要 npm 包Node.jsRhino 的模块生态有限
HTTP/WebSocket 请求Node.js原生支持更好
复杂计算、数据处理都行Node.js 性能略好

常见坑

1. Rhino 模式下的 npm 包

Rhino 模式里 require("axios") 不一定行。要么用 Rhino 兼容的 CommonJS 包,要么切到 Node.js 模式。

2. Node 模式下的 Android API

Node 模式不能直接 new Intent()。需要通过桥接层调用——目前桥接 API 还在完善中,具体看版本。简单的 Android 操作建议还是 Rhino 模式。

3. 两套引擎的文件路径

Rhino 的工作目录和 Node.js 不同,用 process.cwd() vs auto.rootFolder 区分。跨引擎写文件要注意路径。

总结

Autox.js v7 的双引擎设计,本质是在"贴近 Android 原生 API"和"开放 JS 生态"之间找平衡点。Rhino 负责手机端的事情,Node.js 负责通用 JS 的事情——写脚本时按需切换,灵活组合。