安卓插件开发混合开发

安卓脚本插件开发与 Java-JS 混合编程:扩展自动化平台能力

安卓自动化脚本插件开发全流程:插件本质是 apk、IDEA 新建插件工程、目录结构(jarlibs/solibs/resources/jslibs)、打包 release.apk、脚本 loadDex 调用;以及 Java-JS 混合开发模式(defaultplugin.apk + importClass)实战。

约 7 分钟

做安卓自动化脚本,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 插件使用

  1. 将打好包的 apk 文件,放到脚本工程的 plugin 文件夹下;
  2. 使用 loadDex 函数载入插件;
  3. 使用 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 工程配置三步

  1. 配置 JDK 和输出 class 目录:在项目上点击右键,进入项目结构配置;
  2. 引用 android.jar:找到 android.jar 右键,选择“加入 lib”,确认添加;
  3. 完成后即可编写代码。

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 手机自动化平台落地。官网提供完整文档、开发工具与群控云控产品,免费体验。

访问 EasyClick 官网 →