安卓脚本开发工程化

安卓自动化脚本 NPM + TypeScript 工程化:类型安全与第三方库实战

安卓自动化脚本工程化指南:给工程开启 NPM 支持安装第三方库(md5 等)、开启 TypeScript 支持获得类型提示,js/ts 混编两种写法(js 目录免 require 与 ts 目录 export+require),附混编建议与注意事项。

约 6 分钟

脚本写多了,很多人会陷入一个尴尬:几百上千行的 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.tsCar.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 手机自动化平台落地。官网提供完整文档、开发工具与群控云控产品,免费体验。

访问 EasyClick 官网 →