插件开发和 Java-JS 混合开发
安卓自动化脚本里,操作系统底层、Android 原生 API、自己写的 Java 算法,纯 JS 够不着。EasyClick 有两条路:插件开发,用 Java 写 apk,脚本再引用;Java-JS 混合开发,Java 和 JS 放在一个工程里编,js 直接调 java。
插件本身就是一个 apk,和普通 Android 开发一样。可以用 Android Studio 打包,也可以用 EasyClick 的 IDEA 模板。在 IDEA 里新建项目,选「EasyClick 插件工程」,下一步做完,会生成对应的 java 类和配置。目录是:
| 路径 | 作用 |
|---|---|
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。PluginClz 是默认生成的入口类,test 是默认方法,调用方式看 main.js。运行走菜单「EasyClick 开发工具 - 运行工程」,手机要先连上。打包走「EasyClick 开发工具 - 打包插件 - 编译插件 apk 文件」,结果在运行日志里,一般是 build/release.apk。正常插件只有几到几百 kb。包特别大,多半是 libs 里放进了不该合并的文件。脚本里用它分三步:apk 放到脚本工程的 plugin 文件夹,用 loadDex 载入,再用 new 生成实例。插件就是 Android apk,Java 里可以用 Android SDK。jslibs 里的 JS 只给测试和调用,不会打进插件,这样包不会被这些库撑大。
另一条路不拆两个工程,Java 和 JS 放在一起编。js 调 java 方法,编译后 java 代码和 jar 会变成 defaultplugin.apk,当作插件用。IDEA 新建项目时选「EasyClick Java-JS 混合项目」,JDK 用 1.8,小版本无所谓。目录和插件工程一样:src/js/main.js 是测试入口,src/com/ 放 Java(PluginClz 是入口类),libs/jarlibs 放三方 jar,libs/solibs 放 so,libs/resources 放资源,libs/jslibs 放 JS 类库。配置分两步:在项目上右键进项目结构,配好 JDK 和 class 输出目录;找到 android.jar,右键选「加入 lib」。java 编出来的插件名是 defaultplugin.apk:
// 脚本运行的时候调用 loadDex 载入插件
loadDex("defaultplugin.apk");
// 使用 importClass 或者 importPackage 引入 java 类
// 使用 new 方法生成插件对象实例即可调用
运行执行菜单栏「EasyClick 开发工具 - 运行工程」(需连接手机),打包执行「EasyClick 开发工具 - 打包工程」,打包结果看 EasyClick 运行日志的输出。
两条路怎么选,和产物大小
| 维度 | 插件开发 | Java-JS 混合开发 |
|---|---|---|
| 代码组织 | Java 独立成 apk,脚本引用 | Java 和 JS 同工程编写 |
| 产物 | release.apk(几到几百 kb) | defaultplugin.apk |
| 适用 | 已有 Android 工程 / 复用代码 | 以脚本为主、Java 补能力 |
| 调用方式 | loadDex + new | loadDex + importClass + new |
已经有一套独立的 Android 能力,做成插件再被脚本引用。脚本里只是夹带少量 Java,用混合开发,编出 defaultplugin.apk,脚本侧 loadDex,再 importClass,然后 new。正常插件几到几百 kb。两条路可以同时留着。
想要真实跑起来?
本文介绍的方案均可基于 EasyClick 能力在 iEasyClick 落地。官网提供完整文档、开发工具与自动化产品,免费体验。