概述
注意:V7 版本目前处于开发中,本文档描述的功能模块在 V6 版本不可用
启用 nodejs 引擎
默认情况下 js 文件由第一代引擎(Rhino)运行,当文件名由 mjs,cjs,node.js 结尾时使用 nodejs 引擎运行,以 mjs 结尾还会启用 esm 模块特性,这是推荐的运行方式
从全局变量改为导入模块
在第 2 代 api,所有模块全部需要使用import 关键字导入,暂不支持require()和import()动态导入
例如
import { showToast } from "toast";
多线程与异步
在 nodejs 引擎将不再支持多线程,取而代之的是Promise和异步函数,第二代 大多数 api 都尽可能返回Promise表示异步操作,对于来自 java 的阻塞调用(如 io 读写)可通过java模块中的相关函数转换成一个Promise而不阻塞 nodejs 线程。
注意
nodejs使用一个线程锁来确保代码不被并发运行,
这意味着如果在其他线程(如java.lang.Thread类)运行 js 代码将被阻塞直到获取线程锁,js代码的执行顺序始终是同步的。
java 交互性
nodejs引擎同样提供了与java交互的功能,这些功能都封装在 java 模块中,使用方式与Rhino类似,但有些不同
该功能目前是基于javet的代理转换器实现, 可阅读javet相关文档获取更详细的信息。
在nodejs引擎,js代码的执行速度远快于第一代Rhino引擎,但这并不代表调用java的速度要更好, java的运行速度不会因为引擎变更而变快,而且由于存在额外的jni调用以及数据转换,频繁调用java方法的速度比 Rhino 要慢一些
........待补充
autox v7 开发进度
- 分离脚本引擎运行的进程 使脚本运行在与 app 不同的进程,彻底解决脚本崩溃连同 app 一起崩溃的问题
- 迁移 app 界面至 m3 风格
- 完善的插件扩展功能 使用一个独立的页面显示已安装和可下载的插件,采用激活/禁用的方式在每次运行脚本时自动加载插件,无需在代码中显式加载
- 集成基于Javet的 v8/nodejs 引擎
- nodejs 引擎功能模块适配
- 全新的 ui 设计框架,采用 vue3 的vue-core框架与htm模板引擎 基于新的引擎设计,支持组件和 vue 一样的响应式状态
参与开发基本操作
V7 版本开发目前由开发者【aiselp】组成,如有兴趣共同参与开发和测试可加入本人创建的tg 开发群交流
- 首先确保你已经 fork 了此仓库,并且已拉取到本地并能够完成构建
- 打开一个终端切换到项目目录输入
git remote add aiselp git@github.com:aiselp/AutoX.git
#更新远程仓库
git fetch --all
- 创建并拉取 v7 分支
git checkout -b setup-v7 aiselp/setup-v7
- 推送到你的远程仓库并设置为默认
git push -u origin setup-v7其中 origin 表示你的远程仓库名,可能并非为 origin