DCloud_App_Array
DCloud_App_Array
  • 发布:2018-12-28 17:41
  • 更新:2021-08-04 14:15
  • 阅读:103805

uni-app原生插件(native plugin)开发指南

分类:uni-app

新版原生插件开发文档已发布,请移步:https://nativesupport.dcloud.net.cn/

此文档将不再更新维护

概述

传统webview的原生扩展是通过webview桥方式,比如5+app。
uni-app的js运行在独立的jscore里,而不是webview里,它的原生扩展是另一套模式,是基于开源项目weex0.26.0版本架构的扩展机制。

weex的插件也可以拿到uni-app生态中使用。

从开发方式相比,uni-app的原生插件开发模式更简单。webview桥方式需要在原生层和js层分别做很多工作。而uni-app的原生插件开发主要在原生层做封装即可。
从使用方式相比,5+的原生扩展需要离线打包,而uni-app的插件可以在线打包,插件市场还有很多优秀原生插件可拿来即用。

uni-app的原生插件分两种类型:

  • Module模式:能力扩展,无嵌入窗体的UI控件。大部分插件都是属于此类,比如调用计步器API。代码写法为通过js进行require,然后调用该插件对象的方法。如涉及一些弹出框、全屏ui,也仍然属于Module模式。类似于前端里的js sdk。
  • Component模式:在窗体中内嵌显示某个原生ui组件。比如窗体局部内嵌某个地图厂商的map组件,上下混排其他前端内容,就需要把这个原生地图sdk封装为Componet模式。代码写法与vue组件相同,在template里写组件标签。类似于前端里的vue组件。

在uni-app中支持vue和nvue两种页面,vue页面基于webview排版引擎渲染,nvue页面基于原生排版引擎渲染。

  • vue页面中仅支持使用Module类型的原生插件,不支持调用同步方法返回数据
  • nvue页面中支持使用Module和Component两种类型的原生插件。也就是如需实现嵌入页面的ui组件,前提是该页面需要使用nvue编写。

uni原生插件上线步骤

  • 下载5+ SDK配置原生开发环境,在原生环境中开发调试插件业务逻辑
    • Android平台需使用AndroidStudio
    • iOS平台需XCode10+(需Mac环境)
  • 开发调试完成后导出原生库文件
    • Android平台可以是jar或aar包
    • iOS平台可以是a或framework包
  • 生成uni原生插件包(zip)
    • 配置package.json文件
    • 与前面导出的原生库文件一起打包
  • 在HX中使用uni原生插件包提交云端打包,验证uni原生插件包是否正确
  • 上传uni原生插件包到插件市场审核
  • 审核成功后其他开发者可购买、使用uni原生插件

uni-app原生插件开发

Android平台uni-app原生插件开发文档
iOS平台uni-app原生插件开发文档

插件开发在调测时,可能会超过40M的免费打包额度。如插件开发是为了上插件市场而不是内部使用,则可以在成功上架市场后,申请退费,返还测试产生的超限打包费用。

uni-app原生插件市场

原生插件开发后,可以上插件市场,也可以不上。如内部使用,则无需上架插件市场。

如需上插件市场,则必须按指定格式压缩为zip包,具体参考:uni-app原生插件格式说明文档

插件下架:插件下降会导致已经使用该插件的app无法再打包,这涉及到插件使用者的利益,所以原则上不允许插件下架。如有特殊原因需要下架请使用注册账号邮箱发邮件到service@dcloud.io进行申请,并详细描述下架原因

插件更新:插件作者需注意保持好版本质量和向下兼容。一旦提交市场新版插件,旧版插件就不能再使用。已经使用旧版插件的App,此后再次云打包,会直接集成新版插件。也就是插件的更新不当可能造成已经使用插件的开发者无法及时发布新版应用。

uni-app原生插件使用

uni-app原生插件使用说明文档
HBuilderX中使用本地uni-app原生插件提交云端打包
uni-app原生插件使用常见问题

原生离线打包集成 uni 插件文档

Android平台本地(离线)打包集成 uni-app原生插件
iOS平台本地(离线)打包集成 uni-app原生插件

欢迎有原生开发能力的朋友入群一起交流学习(入群请提供注册邮箱):

DCloud原生开发者群:
1群:256775471
2群:814228233
3群:455763866

6 关注 分享
DCloud_iOS_XHY Trust 虫雪浓 执笔流年 one11onew 逆风er行

要回复文章请先登录注册

SOHO

SOHO

插件中如何读取配置参数,文档没有提及.........
2020-04-30 11:57
DCloud_App_Array

DCloud_App_Array (作者)

回复 1***@qq.com :
只有uni-app才能调用uni原生插件,可以将wap2app升级为uni-app,用uni-app中web-view组件加载h5页面。
2020-04-28 14:54
1***@qq.com

1***@qq.com

请问 我们的app是react + web2app 做的;现在因为一些业务问题,需要引入自己开发的安卓SDK,怎么引用呢 ,用uni-app原生插件(native plugin)这种方式可行吗 能引入吗,因为看到一些实例都是 uni.X.X 担心这个uni 是系统集成 而不是import 的js 对象,怕不能使用,希望有人解答
2020-04-26 17:23
z***@163.com

z***@163.com

回复 DCloud_App_Array :
好的,谢谢解答。
2020-04-07 17:41
DCloud_App_Array

DCloud_App_Array (作者)

回复 z***@163.com :
云端打包仅支持uni原生插件,不支持5+插件。
2020-04-07 16:19
z***@163.com

z***@163.com

回复 DCloud_App_Array :
云端打包是不是只支持uni-app自定义插件开发,请问以5+app开发的插件可以上传到打包市场吗?如果可以上传,采用MUI前端架构的web端,可以正常调研5+app开发的云端插件吗?
2020-04-07 16:03
DCloud_App_Array

DCloud_App_Array (作者)

回复 Chason89 :
上插件市场是为了与其它开发者共享,仅自己使用可以本地离线打包,也可以跟应用资源一起上传云端打包。
2020-03-31 16:27
Chason89

Chason89

回复 DCloud_App_Array :
原生写的插件是否只能用云打包?我不打算上架插件市场的还需要云打包吗?
2020-03-31 14:16
陈锐

陈锐

回复 DCloud_App_Array :
您好,我的意思是插件开发能开发插件直接打包 service 吗,还是只能用离线打包才行
2020-01-05 14:13
DCloud_App_Array

DCloud_App_Array (作者)

回复 陈锐 :
支持的,原生实现service,扩展API在uni中调用
2020-01-03 20:02