做安卓自动化脚本,JS 能力再强也有边界:要操作系统底层、要调 Android 原生 API、要跑自己写的 Java 算法——纯 JS 脚本就够不着了。
EasyClick 提供了两条路:插件开发(Java 写 apk,脚本引用)和 Java-JS 混合开发(Java 和 JS 放一起编,js 直接调 java)。这篇文章把两条路的流程讲透。
一、插件开发:用 Java 扩展脚本能力
1.1 插件是什么
插件本身是一个 apk 包,和普通的 Android 开发无任何区别。
- 开发时可以使用 Android Studio 进行开发,打包成 apk 即可;
- 本章节主要介绍使用 EasyClick 开发插件(IDEA 模板更省事)。
1.2 新建插件工程
使用 IDEA 创建项目,选择 ‘EasyClick 插件工程’,点击下一步并完成,会自动生成对应的 java 类和配置信息。
1.3 插件目录结构
| 路径 | 作用 |
|---|---|
src/js/main.js |
js 调用插件相关方法的测试入口 |
src/com/ |
Java 源码,PluginClz 类是默认生成的插件入口类 |
libs/jarlibs |
三方引用 jar 包,会被合并到插件中 |
libs/solibs |
so 封装文件,会被编译到插件的 lib 文件夹 |
libs/resources |
资源文件,会被编译到插件的 resources 文件夹 |
libs/jslibs |
JS 类库文件,不会编译到插件中,仅用来测试和调用 |
作为插件开发者,只要关注 java 代码的编写即可;如果有 jni 调用,将 so 文件放到 libs/solibs 中。
1.4 插件 java 类 PluginClz
PluginClz 是默认生成的插件 java 类,test 方法是默认生成的插件方法,实际调用请看 main.js 中的调用。
1.5 插件运行与打包
- 运行:执行菜单栏「EasyClick 开发工具 - 运行工程」,前提是要连接到手机;
- 打包:执行菜单栏「EasyClick 开发工具 - 打包插件 - 编译插件 apk 文件」,打包结果请看 EasyClick 运行日志的输出,一般在
build/release.apk。
如果打包的插件 apk 很大,很可能是这里搞错了——正常插件一般只有几到几百 kb。
1.6 插件使用
- 将打好包的 apk 文件,放到脚本工程的 plugin 文件夹下;
- 使用 loadDex 函数载入插件;
- 使用 new 方法生成插件对象实例即可调用。
二、Java-JS 混合开发:js 直接调 java
2.1 说明
混合开发是把 java 和 js 放在一起编写,js 调用 java 的方法。
编译后 java 代码和 jar 包会变成一个 defaultplugin.apk 文件作为插件使用。
2.2 新建 Java-JS 混合项目
使用 IDEA 创建项目,选择 ‘EasyClick Java-JS 混合项目’,JDK 版本要用 1.8(小版本无所谓)。点击下一步并完成,会自动生成对应的 java 类和配置信息。
2.3 目录结构
与插件工程一致:src/js/main.js(测试入口)、src/com/(Java 源码,PluginClz 入口类)、libs/jarlibs(三方 jar)、libs/solibs(so)、libs/resources(资源)、libs/jslibs(JS 类库)。
2.4 工程配置三步
- 配置 JDK 和输出 class 目录:在项目上点击右键,进入项目结构配置;
- 引用 android.jar:找到 android.jar 右键,选择“加入 lib”,确认添加;
- 完成后即可编写代码。
2.5 main.js 使用 Java
java 编译后是插件形式,插件名称是 defaultplugin.apk:
// 脚本运行的时候调用 loadDex 载入插件
loadDex("defaultplugin.apk");
// 使用 importClass 或者 importPackage 引入 java 类
// 使用 new 方法生成插件对象实例即可调用
2.6 运行与打包
- 运行:执行菜单栏「EasyClick 开发工具 - 运行工程」(需连接手机);
- 打包:执行菜单栏「EasyClick 开发工具 - 打包工程」,打包结果请看 EasyClick 运行日志的输出。
三、两种方案怎么选
| 维度 | 插件开发 | Java-JS 混合开发 |
|---|---|---|
| 代码组织 | Java 独立成 apk,脚本引用 | Java 和 JS 同工程编写 |
| 产物 | release.apk(几到几百 kb) | defaultplugin.apk |
| 适用 | 已有 Android 工程 / 复用代码 | 以脚本为主、Java 补能力 |
| 调用方式 | loadDex + new | loadDex + importClass + new |
简单说:你已经有独立的 Android 能力要做成插件,用插件开发;你的脚本需要夹带少量 Java 逻辑,用混合开发。
四、常见问题
插件能调用 Android 原生能力吗?
能。插件本身就是 Android apk,Java 代码里可以使用 Android SDK 能力;jni 调用把 so 放到 libs/solibs 即可。
打包的 apk 特别大怎么回事?
正常插件只有几到几百 kb。apk 很大通常是误把不相关的大文件放进了工程,检查 libs 目录里是否有不该合并的资源。
为什么 jslibs 里的 JS 类库没编译进插件?
设计如此:libs/jslibs 里的 JS 类库仅用来测试和调用,不会编译到插件中,避免插件膨胀。
五、总结
插件开发 + Java-JS 混合编程,给安卓自动化脚本开了两扇“原生能力”的门:
- 插件开发:Java 写 apk 扩展脚本功能,Android 原生能力随便调;
- 混合开发:js 调 java 方法,编译产出 defaultplugin.apk,脚本侧 loadDex + importClass 即可用;
- 轻量产物:正常插件几到几百 kb,不拖累脚本分发;
- 按需选择:独立能力用插件,夹带逻辑用混合,两条路可以并存。
当你的脚本需要“JS 够不着”的能力时,这两条路就是答案。
想要真实跑起来?
本文介绍的方案均可在 EasyClick 手机自动化平台落地。官网提供完整文档、开发工具与群控云控产品,免费体验。