在从事前端开发工作时,特别是当现有X工具的机能不足以满足App应用的功能要求时,开发uni原生插件便成了扩充功能的一个有效途径。然而,对于像我这样初次涉足此领域的人来说,这个过程并不简单。它充满了挑战和探索,因此,我将自己的经历分享出来,希望对那些在此方面有需求的开发者提供一些借鉴和启发。
了解需求背景
在众多场合,前端开发者会遇到各种需求上的挑战。以利用购买的安卓屏幕开发App为例,他们需要实现读取串口数据并进行通讯的功能。最初使用的安卓屏版本是V4.4,但该项目在此版本上无法正常运作。通过与厂家协商,将其升级至V6.0.1版本后,问题才得到解决。硬件版本差异对开发造成的影响是普遍现象。此次开发的是一款串口原生插件,它不属于UI特定功能,因此需要选择恰当的开发模式。对于希望扩展App功能的开发者来说,明确功能需求的来源至关重要。这些需求往往并非凭空产生,而是源于实际使用中遇到的问题,例如安卓屏的串口通讯功能就是因实际应用场景的限制而诞生的开发需求。
//导入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')
}
技术进步使得用户对应用功能的期待日益提升,单一平台的功能已不足以满足需求。因此,我们常常需要借助额外的开发方法来拓展应用功能。在此背景下,uni原生插件开发逐渐受到开发者的关注,它成为解决功能需求增长与现有功能不足之间矛盾的有效工具。
-keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}
开发前的准备
在进行uni原生插件开发之前,我们必须做好代码准备。比如,在Jy-test目录下的rules.pro文件中,我们必须添加特定的代码。此外,对于java文件,我们还需执行Root转换,这并非易事。开发者需要严格按照规则操作,每一步都至关重要。这个过程具有一定的挑战性,对不熟悉者来说可能会感到困惑。因此,在着手原生插件开发之前,开发者必须充分掌握代码相关的知识和操作流程。
开发环境同样至关重要。以2022年最新版为例,它和旧版本存在差异。我遵循旧步骤操作时,出现了错误提示。即便是有经验的开发者,在环境升级时也会格外谨慎。新环境可能缺少某些配置或需要新的设置,这导致开发者不能简单沿用以往的经验。
插件的开发流程
插件开发涉及诸多细致步骤。首先,调试插件时需注册插件,在此环节需特别留意配置中的插件名称,其首字母需大写。这一看似微不足道的细节,实则对插件开发的整体正确性至关重要。此外,在开发过程中,合理设置判断方法亦十分关键,比如通过注解判断方法是否应在UI线程上运行,或是是否为扩展方法。在此案例中,若设置为false,则表示该方法在JS线程上运行,且通过反射调用扩展方法,而该扩展方法还需属于特定类型。各个环节紧密相连,任何一处错误都可能干扰整个开发流程。
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);
}
}
}
不同功能的开发流程各有特点。以这次为安卓屏幕开发而设计的串口调试工具插件为例,它在插件构建方面与常规插件存在差异。该插件对厂家提供的串口原始示例进行了额外封装,这样原本用于调试的方法也能被利用。这种特别的操作旨在更有效地发挥插件功能,使其更贴合开发需求。
遇到的困难与解决
开发过程中并非一路畅通。在新环境中,我们无法像以往那样顺利地按照旧流程操作,遇到错误后,经过多次尝试,才发现可能是环境变动导致缺少了一些配置。此外,在开发新功能或制作插件时,由于翻墙工具故障,即便我们更新了版本,下载相应版本时却遭遇了超时,这阻碍了调试的进行。这些问题都相当棘手,但在很多情况下,我们只能依靠自己不懈的探索和试验来一一克服。
在开发阶段,个人开发者每日对云打包的使用有额度限制,这迫使开发者另寻出路。因此,结合本地打包和其他工具进行调试,成为了一种可行的方案。这些挑战是开发过程中真实存在的,我们必须持续克服这些难题,才能顺利地完成插件开发。
本地资源的配置与利用
开发阶段,合理利用本地资源至关重要。比如,打开X项目后,需在根目录设立特定文件夹,将插件置入其中,并填写相关信息。此外,还有诸如本地引入App原生插件等操作,这些均与本地资源的配置及管理有关。调试原生插件时,还需自定义基座,并将原生插件导入至基座。
此外,还有一种离线打包的操作方式,尽管本文并未深入阐述,但我们可以将打包好的本地资源放置在特定区域进行测试。这同样是一种高效利用本地资源的方法。这些本地资源的操作流程,为插件开发带来了诸多便利,从而推动了开发进程的顺利进行。
最终成果与总结
历经多个阶段及克服重重难关,我们成功完成了串口插件的初版开发,并已将其投放至插件市场。该插件已基本具备了串口的所有功能。这一过程无疑是探索与实战的结晶。在此过程中,我们不仅积累了宝贵的开发经验,还达成了项目需求的目标。
其他前端开发者可能也会遇到App功能需要扩展,但现有X的功能又无法满足的情况。这时,你们是否考虑过尝试使用uni原生插件进行开发来克服这一难题?欢迎点赞、转发本文,并在评论区分享你们的看法和经验。