脚本写多了,很多人会陷入一个尴尬:几百上千行的 js 堆在一起,改一个功能要翻半天,参数类型全靠记,第三方能力要么手写要么放弃。安卓自动化脚本也到了该“工程化”的时候。
EC 安卓版(11.0+)为脚本工程提供了两把利器:NPM 支持(装第三方库)和 TypeScript 支持(类型安全)。这篇文章把两条路都走一遍。
一、NPM 支持:给脚本装第三方库
1.1 安装 npm
npm 的安装网上教程很多(B 站、博客都能搜到),也可以用关键字「安装 npm」自行搜索。装好后在命令行验证 npm -v 可用即可。
1.2 工程支持 npm
在工程上鼠标右键 → 选择「新增 NPM 支持」。
新增完成后,会在当前工程目录下生成一个 package.json 文件,表示新增完成。剩下的只需要在工程目录下执行 npm install 类库名称 即可完成类库安装,例如:
npm install md5
安装后按 md5 库的官方说明直接使用即可。
1.3 注意事项
由于 npm 类库存在不同运行环境(web、node 等),EC 的 js 环境是纯 js 的:
- 使用 npm 安装的类库,一定要找纯 js 环境的;
- 并不是所有 npm 类库都支持,装之前先确认目标库是纯 js 实现。
二、TypeScript 支持:类型安全与提示
2.1 安装 TypeScript
TypeScript 的安装教程很多(runoob、CSDN 都有),或用关键字「安装 TypeScript」搜索,装好即可。
2.2 工程支持 TypeScript
在工程上鼠标右键 → 选择「新增 TypeScript 支持」。
新增完成后,会在当前工程目录下生成一个 tsconfig.json 文件,同时会对 libs 下面的 js 生成 d.ts 引用文件——这就是“类型提示”的来源:写代码时编辑器能给出方法签名、参数类型,低级错误在编译前就被拦下来。
三、两种写 ts 的方式
3.1 方式一:js 文件夹下编写 ts(推荐,免 require)
js 文件夹下编写的 js 文件都会转换为 java 字节码,所以无法使用 require,不要使用 export 关键字导出,但可以引用其他文件的 js 文件。
在 js 文件下编写 ts 文件,例如 js/Car.ts:
// 文件名称 js/Car.ts
class Car {
test(): void {
logd("i am car.")
}
}
保存文件的时候会自动生成 Car.d.ts 和 Car.js,在其他 js 文件中直接引用:
// 文件名称 js/main.js
function main() {
let car = new Car();
car.test()
}
3.2 方式二:ts 文件夹下编写 ts(export + require)
注意 ts 文件夹下需要 export 导出,在其他地方 require 引用:
// 文件名称 ts/Car1.ts
class Car1 {
test1(): void {
logd("i am car1.")
}
}
export = { Car1 }
在其他 js 文件中调用:
// 文件名称 js/main.js
function main() {
let car = require("ts/Car1")
let car1 = new car.Car1();
car1.test1()
}
四、js 和 ts 混编建议
以下建议来自官方文档,按推荐优先级排列:
- 为安全建议脚本的 js 和 ts 文件都放到 js 文件夹下编写——免 require,直接使用;
- 为安全建议 UI 的 js 和 ts 文件都放到 subjs 文件夹下编写;
- 如果存在工程引用,js 文件夹下的可以直接使用(包括 js 和 ts 文件),其他文件下的 ts 无法被另外工程引用;
- 以上的建议无需使用 require 即可直接使用;如果非要使用 require 模式,将 js 和 ts 文件放到非 js 文件夹,建议混淆 js 文件;
- ts 文件编译后的 js 会参与 iec 的编译,ts 源文件不会——类型定义只是开发期辅助。
五、常见问题
工程化会不会影响现有脚本运行?
不会。新增 NPM/TypeScript 支持只是在工程里增加 package.json、tsconfig.json 等配置文件,不影响现有脚本;可以渐进式地把公共逻辑抽成 ts 模块。
装了第三方库打包会变大吗?
取决于库的体积。纯 js 库编译进 iec 后体积有限;装库前先确认是否需要,能用原生 API 解决的尽量不引库。
require 模式的脚本要注意什么?
使用 require 模式的 js/ts 文件放在非 js 文件夹,建议对最终脚本做代码混淆,防止核心逻辑被直接阅读(混淆配置见代码混淆专题)。
六、总结
NPM + TypeScript 让安卓自动化脚本从“一个人的脚本”走向“可维护的工程”:
- NPM:package.json 管理依赖,
npm install md5一条命令装库,前提是选纯 js 环境的库; - TypeScript:tsconfig + d.ts 提供类型提示,编译期拦截低级错误;
- 两种写法:js 文件夹免 require(推荐)、ts 文件夹 export + require,按需选择;
- 渐进式:配置不侵入现有脚本,公共逻辑逐步 ts 化,风险可控。
当你的脚本开始“养”起来——功能越来越多、维护的人不止一个——工程化就是分水岭。NPM + TypeScript 是迈过去的第一步。
想要真实跑起来?
本文介绍的方案均可在 EasyClick 手机自动化平台落地。官网提供完整文档、开发工具与群控云控产品,免费体验。