记一次uni-app Android原生插件开发

  背景

  项目使用到了RFID射频手持设备(PDA),用于读取羊只耳标功能。原来有写过一个插件https://ext.dcloud.net.cn/plugin?id=5246

  之前没有记录,这次重新记录下过程。

  使用的硬件设备Demo 为:uhfg_v2.2.10;

  资料

  原生插件开发资料官方:https://nativesupport.dcloud.net.cn/NativePlugin/README

  步骤

  1.下载App离线SDK及demo导入

  https://nativesupport.dcloud.net.cn/AppDocs/download/android

  下载后有对应的工程文件,需要使用Android Studio导入。

  我下载的是 3.5.0,目录结构是:

  

  我们将UniPlugin-Hello-AS导入到Android Studio 中。

  导入后目录结构是这样的:

  

  我做的项目是使用原生的扫描耳标的能力,不需要界面,所以插件是 扩展 Module 的形式。

  2.新建module uhfg模块

  

  3.导入uhf的库及配置build.gradle

  

  uhfg模块 的build.gradle

  4.编写工具类

  UHFGUtil.java

  UHFGUtilListenner.java

  5.编写model类

  6.打包插件

  选择Android studio上的gradle工具,使用assembleRelease 的方式进行编译,构建。最后会在当前库下生成 build文件夹,在outputs/aar 生成 arr文件。

  

  然后将 arr文件+libs+.os文件重新放在一起,构建成uni-app所需的原生插件。到此,原生插件开发完成。

  目录结构:

  

  7.引入项目

  本地引入

  在项目下创建目录 nativeplugins 将插件包放在该目录下,插件结构参考前文。

  

  在manifest 中配置本地插件;

  

  配置完成后,需要打包为自定义基座才能使用。

  云端插件

  将插件发布到云市场,然后就可以通过使用云端插件的方式使用。同样,测试时候需要打包自定义基座。

  8.web端调用代码

  其他的坑及参考

  1.Android studio gradle 无法用Tasks assembleRelease 打包库

  解决方案:https://blog.csdn.net/shulianghan/article/details/1244893982.出现Duplicate class 的报错

  

  多半是有重复的类,或者说是不同jar包定义了相同的类导致。去掉非必要的jar包。我出现问题的原因是,在引入第三方包的时候采用了 implementation 的方式,该方式会将第三方包编译到 aar文件当中,而uniapp的插件规范是有 libs库的,所以出现两份,报 Duplicate class 的错误.

  编译时的区别

  

  3.[JS Framework] 当前运行的基座不包含原生插件[Taric-UHFG],请在manifest中配置该插件,重新制作包括该原生插件的自定义运行基座

  参考package.json 标准:https://nativesupport.dcloud.net.cn/NativePlugin/course/package

  我出错的问题是 package.json 中 id与plugins里的name不一致的问题

  

  小结

  整体上来讲,简单的集成第三方库,不太需要过多的了解android原生的知识,但需要对gradle这套有一定的理解。

  本任务耗时1.5天。

  附件

  源码:https://gitee.com/dream-as-horse/uni-app-rfid-plug-in.git