uniapp开发安卓原生插件
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天
场景
使用uniapp进行安卓设备的串口通讯调试。当前HBuilder X中的能力无法满足App功能需求,因此需要通过开发uni原生插件来拓展功能,采用的module模式。类似于前端里的 js sdk。这也是我首次进行原生插件的开发,过程确实不大容易,再次记录一下,巩固自己的记忆,同时希望对其他人也有所帮助。
本文适合人群前端开发人员,熟悉uniapp开发想要用uniapp开发App,并且拓展功能想要了解uni原生插件开发过程,但是对Android 开发并不熟悉功能需求
采用购买回来的安卓屏,在使用uniapp开发的App中可以读取串口数据,并进行通讯。
环境HBuilder X 3.6.5采购的安卓屏,迈冲科技 K7G10,版本V6.0.1;初始购买回来屏为 V4.4,该版本 uniapp项目无法正常运行,因此与厂家沟通,烧录为V6.0.1版本。Android Studio 2021.3.1准备工作
进行uni原生插件开发,所需开发环境;文档链接:nativesupport.dcloud.net.cn/NativePlugi…
第一步:配置
打开下载的App离线SDK =》 UniPlugin-Hello-AS工程;在 Android Studio中导入该工程:File =》 Open =》 UniPlugin-Hello-AS,如图:本文中要开发的串口原生插件属于非UI特定功能,因此需要采用Module模式,大家可以参照源码中 uniplugin_module模块。
创建module模块
操作:File =》 New =》 New Module =》 Android Library
修改当前模块的 build.gradle
加入下面的配置,初始配置进行删除,然后点击右上角的 Try Again
//导入aar需要的配置repositories { flatDir { dirs ‘libs’ }} dependencies { //必须添加的依赖 compileOnly ‘androidx.recyclerview:recyclerview:1.0.0’ compileOnly ‘androidx.legacy:legacy-support-v4:1.0.0’ compileOnly ‘androidx.appcompat:appcompat:1.0.0’ compileOnly ‘com.alibaba:fastjson:1.1.46.android’ compileOnly fileTree(include: [‘uniapp-v8-release.aar’], dir: ‘../app/libs’)}复制代码配置混淆文件
在当前Jy-test目录下,打开proguard-rules.pro文件,加入一下代码
-keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}复制代码第二步:创建Module类 JyTest
如果您创建出来的module目录如下图:先将java文件进行转换为 Sources Root,操作如下图创建Module类
注意:uniapp的Module拓展,必须继承UniModule类
第三步:功能开发
在当前Module类中,根据所需功能定义方法,注意事项:
扩展方法必须加上@UniJSMethod (uiThread = false or true) 注解。UniApp 会根据注解来判断当前方法是否要运行在 UI 线程,和当前方法是否是扩展方法。uiThread = true 表示 运行在UI线程;uiThread = false 表示 运行在JS线程UniApp是根据反射来进行调用 Module 扩展方法,所以Module中的扩展方法必须是 public 类型例子:package com.example.jy_test;import com.alibaba.fastjson.JSONObject;import io.dcloud.feature.uniapp.annotation.UniJSMethod;import io.dcloud.feature.uniapp.bridge.UniJSCallback;import io.dcloud.feature.uniapp.common.UniModule;public class JyTest extends UniModule { @UniJSMethod(uiThread = true) public void test (String name,UniJSCallback callback) { if (callback != null) { JSONObject data = new JSONObject(); data.put(“msg”, name + “:你小子,真棒”); callback.invoke(data); } }}复制代码
有可能当前,Android Studio下面报着错,请不要担心,继续往下看!!!
第四步:插件调试1、创建uni-app项目
打开HBuilder X工具,然后创建一个项目 JyTest。
2、获取当前项目证书
根据当前项目的应用标识(APPID),然后进入DCloud开发者后台。找到对应的应用,点击进入“应用信息” 页面。在应用信息页面中,选择“Android 云端证书”,然后点击 “创建证书”。
3、根据当前证书,进行配置
下载证书放入 Android Studio 项目,app 目录下2.对 app 目录下的 build.gradle 进行配置4、注册插件注意plugins配置中name插件名,开头要大写
5、引入插件
6、打包插件
注意:
有些 Android Studio 中右侧的 gradle 只有dependens,没有tasks任务栏。此时点击左上角 File =》 Settings,按下图操作即可
问题:
有些伙伴,目前Android Studio中下方的 build 还报错,比如解决方法:有可能是当前的项目的版本配置不对:将其修改为此时项目 BUILD SUCCESSFUL。这个时候,我们就完成插件开发了,下一步将当前插件引入我们的项目中。
第五步:项目中引入插件,使用并调试1. 项目配置插件目录:
首先我们在打开HBuilder X中的项目,并在根目录下创建 nativeplugins 文件夹,将我们的插件放入,并进行相关信息的填写,如下图:
2. App原生插件本地引入,如下图:
4. 将插件导入项目中 {{title}} 测试 const JyTestPlugin = uni.requireNativePlugin(‘Jy-test’); export default { data() { return { title: ‘Hello’ } }, onLoad() { console.log(‘JyTestPlugin’, JyTestPlugin); }, methods: { /** * 测试原生插件 */ test() { JyTestPlugin.test(‘优弧’, (res) => { console.log(‘res’, res); this.title = res.msg; }) } } }复制代码5. 自定义基座
为了防止我们制定自定义调试基座出错,我们应当先将项目与插件的 minSdkVersion 与 targetSdkVersion调成一致的状态。因为我们采用了原生插件,如果要进行调试的话,需要自定义基座,将我们的原生插件导入基座中。
见证奇迹的时刻
安卓屏显示效果图:拓展:我们也可以采用离线打包,将本地打包的资源放到Android Studio 中进行调试,这个网上以及官网有相关资料,在此就不讨论了。
总结
至此uniapp原生插件的开发流程,我们已经学会了;在本次工作中,针对该安卓屏开发的串口调试工具,也是这样的流程。二者的些许不同就是,针对厂家提供的串口 原生demo,进行了一步封装,将原生调试用的方法,采用uniapp也可以使用,该插件第一版已完成,串口基本功能已实现,目前已发布到插件市场上。链接:ext.dcloud.net.cn/plugin?id=1…希望大家读完这篇文章能有所收获,也希望我们彼此在技术的路上走的更远,更宽。加油,与君共勉!