项目基于uniapp开发,突然丢给你一个jar包,你会怎么办?

网上很多教程都是教你如何打包APP原生插件的。

这篇文章,是已有jar包的情况下,如何在项目内直接调用jar包中的class,初尝试了一番。

混合开发大概有2种方式。第一种是最简单,也是本文想写的。

第一种:添加本地插件的方式

按规范放置jar包

通过创建 nativeplugins 目录,把 jar 包丢进去,再配置个 package.json 声明这个插件。文件目录如图:

2022-03-31-22-39-35

package.json 原生插件描述文件,完整说明请看https://ask.dcloud.net.cn/article/35414

demo文件请看https://ext.dcloud.net.cn/plugin?id=36(为了演示,我把aar文件解压,取里面的jar包)

最后通过修改HbuilderX的 manifest.json 配置,APP原生插件配置-本地插件,选中即可。

2022-03-31-22-40-03

自定义基座

首先打自定义基座,然后以自定义基座运行到安卓模拟机。

2022-03-31-22-41-28

2022-03-31-22-41-59

调试使用

在页面中把 jar的类定义为变量,可以打印出里面的方法。

1
2
const DCloudRichAlert = uni.requireNativePlugin("DCloud-RichAlert");
console.log(DCloudRichAlert);

2022-03-31-22-44-44

方法调用也正常。

2022-03-31-22-48-47

额外提示

如何查找包名、类名、class的路径?

下载反编译工具:jd-gui http://www.downza.cn/soft/228025.html

打开 jar文件,右边第一行可以看到 package xxx,这个加上下面的class(主方法),就是插件 package.json 里的class(注册插件的类名)。

2022-03-31-22-56-02

第二种:Native.js的方式

Native.js for Android封装一条通过JS语法直接调用Native Java接口通道。

离线打包 后,在原生开发环境导入类对象,通过plus.android.importClass声明。

离线打包后的代码,感觉不方便调试,没有深入研究。适合有Android Studio开发基础的同学。

2022-03-31-23-01-24

Native.js代码:https://ask.dcloud.net.cn/article/88

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**  
* 在Android平台通过NJS显示系统提示框
*/
function njsAlertForAndroid(){
// 导入AlertDialog类
var AlertDialog = plus.android.importClass("android.app.AlertDialog");
// 创建提示框构造对象,构造函数需要提供程序全局环境对象,通过plus.android.runtimeMainActivity()方法获取
var dlg = new AlertDialog.Builder(plus.android.runtimeMainActivity());
// 设置提示框标题
dlg.setTitle("自定义标题");
// 设置提示框内容
dlg.setMessage("使用NJS的原生弹出框,可自定义弹出框的标题、按钮");
// 设置提示框按钮
dlg.setPositiveButton("确定(或者其他字符)",null);
// 显示提示框
dlg.show();
}
//...