DCloud_UNI_CHB
DCloud_UNI_CHB
  • 发布:2018-12-25 19:29
  • 更新:2019-12-03 16:49
  • 阅读:40076

uni-app插件开发指南汇总

分类:uni-app

uni-app有活跃的插件市场,https://ext.dcloud.net.cn/,日pv以万起,并提供了赞赏平台机制。
欢迎开发者为插件市场提供插件。

插件作者制作插件时,需注意以下几点:

  • 前端建议使用scss预处理并引用uni.scss中的变量定义,保持各插件风格统一,方便插件使用者通过搭积木的方式开发整体风格一致的App
  • 遵循插件目录规范,其中比较重要的是确定插件ID,详细解释下方。
  • 插件包中不需要包含 unpackage 目录
  • 插件包中不应该包含版本控制相关文件和目录,如 .git,.svn 等。

插件ID(原“插件使用名称”)命名规范:

  1. 格式为:'作者ID-插件名称',示例:'xiaoming-tag',其中作者ID和插件名称只能包含英文、数字
  2. 作者ID由插件作者自定义,不能使用'DCloud'、'uni'等关键字,长度要求至少2位字符
  3. 插件名称需直观表达插件的作用,例如:tag、button等

前端组件

我们以小明开发的tag组件(插件ID为:xiaoming-tag)为例,上传插件市场时,目录结构要求如下:

为保证代码简洁,上传插件时仅需包含必需的文件及目录。

若组件依赖三方组件,则需将三方组件一起打包上传;假设"xiaoming-tag"依赖小红开发的icon组件(xiaohong-icon),则发布"xiaoming-tag"插件时,目录结构要求如下:

Tips:

  • 通用组件、nvue组件、目录结构要求相同
  • 小程序组件的一级目录,名字需从 components 变更为 wxcomponents ,其它结构要求相同
  • 不能包含根目录的 manifest.json、pages.json、App.vue、main.js 等文件

模板

vue/nvue 页面模板

我们以小明开发的设置模板(xiaoming-setting)为例,上传插件市场时,目录结构要求如下:

若页面模板依赖其它组件,则需将依赖组件一起打包;假设"xiaoming-setting"依赖小红开发的list组件(xiaohong-list),则发布"xiaoming-setting"页面模板时,目录结构要求如下:

Tips:

  • vue 页面模板和 nvue 页面模板目录结构要求相同。
  • 页面模板打包时需要包含 manifest.json、pages.json 等文件。

项目模板

项目模板无特殊要求,注意满足 uni-app 项目目录结构要求即可,详情
Tips:

  • 项目模板打包时不需要包含 unpackage 目录;
  • 项目模板打包时需要包含 manifest.json 文件。manifest.json 里不允许有 appid,包括 DCloud appid 或微信等三方 appid;

JS SDK

开发JS SDK时,对目录结构无特殊要求,仅需将js文件命名为插件ID即可,例如:xiaoming-md5.js

Tips:

  • 不能包含根目录的 manifest.json、pages.json、App.vue、main.js 等文件

原生sdk

uni-app原生插件(native plugin)开发指南:https://ask.dcloud.net.cn/article/35428
Android开发参考:https://ask.dcloud.net.cn/article/35416
iOS开发参考:https://ask.dcloud.net.cn/article/35415
压缩包格式要求:打开zip后根目录需为插件id目录,二级目录是ios、android子目录及package.json。

注意压缩包为标准zip格式,不要把rar等其他格式改名为zip

5 关注 分享
meHaoTian admin@liaosongfa.com sonicsunsky@qq.com lazywe@163.com 无赖君子

要回复文章请先登录注册

小安迪

小安迪

* 插件包指定目录 components/littleandy-adcell 不存在
2019-12-03 16:49
892747218@qq.com

892747218@qq.com

## 主要原因
只要是锁屏状态,接收到广播启动应用都会有这个问题, 因为用户还没解锁, 不能读取受保护的内容. 但在DCloudApplication的
onCreate 和 attachBaseContext 里面调用的方法产生异常,但没有捕获. 导致程序崩溃.
上面的两个方法都会调用 io.dcloud.a.a(AdMgr.java:29), 都会产生BUG.

## 修复:
1. DCloudApplication

[内容]
2583-2583/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: uni.UNI8A57EF0, PID: 2583
java.lang.RuntimeException: Unable to instantiate application io.dcloud.application.DCloudApplication: java.lang.IllegalStateException: SharedPreferences in credential encrypted storage are not available until after user is unlocked
at android.app.LoadedApk.makeApplication(LoadedApk.java:1226)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6431)
at android.app.ActivityThread.access$1300(ActivityThread.java:219)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.IllegalStateException: SharedPreferences in credential encrypted storage are not available until after user is unlocked
at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:458)
at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:443)
at io.dcloud.common.adapter.util.SP.getOrCreateBundle(SP.java:135)
at io.dcloud.common.adapter.util.SP.getOrCreateBundle(SP.java:150)
** at io.dcloud.feature.ad.a.b(AdSplashUtil.java:90)
at io.dcloud.feature.ad.AdFeatureImplMgr.doForFeature(AdFeatureImplMgr.java:18)
at io.dcloud.a.a(AdMgr.java:29)
at io.dcloud.application.DCloudApplication.attachBaseContext(DCloudApplication.java:79)**
at android.app.Application.attach(Application.java:351)
at android.app.Instrumentation.newApplication(Instrumentation.java:1149)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1218)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6431) 
at android.app.ActivityThread.access$1300(ActivityThread.java:219) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859) 
at android.os.Handler.dispatchMessage(Handler.java:107) 
at android.os.Looper.loop(Looper.java:214) 
at android.app.ActivityThread.main(ActivityThread.java:7356) 


## 重现步骤
1.模拟器设置有锁屏. application,activity,receiver,service 添加 android:directBootAware="true" 属性.
2.Android 设置一个自启广播( android.intent.action.BLOCK_BOOT_COMPLETE)接收器,并添加android.permission.RECEIVE_BOOT_COMPLETED权限.
3. 广播启动到一个前端服务(context.startForegroundService())
4. 安装APK,并启动一次,
5. 重启模拟器, 查看Logcat输出, 有错误日志.

[运行端版本号]
XBuilder 2.3.9
Android-SDK@2.3.9.70750_20191105

[Android版本号]
Android10 API 29 模拟器
2019-11-15 11:21
cat_eat_fish

cat_eat_fish

回复 DCloud_UNI_CHB:
我也报这个错 怎么解决
2019-07-25 10:16
cat_eat_fish

cat_eat_fish

回复 lyg:
这个问题 解决了吗
2019-07-24 19:32
DCloud_UNI_CHB

DCloud_UNI_CHB (作者)

回复 lyg:
这个应该是你的插件ID,目录下到底有没有lyg-addtips文件夹?
2019-07-18 18:59
东庐

东庐

引用jar文件的代码有吗?
2019-07-18 18:22
lyg

lyg

尝试了N次,都是

插件包指定目录 components/lyg-addtips 不存在
插件包指定目录 static/lyg-addtips 不存在

自卑了都。。
2019-07-10 02:05
a543016357@163.com

a543016357@163.com

是吗,
2019-07-02 15:52
DCloud_UNI_CHB

DCloud_UNI_CHB (作者)

回复 东子:
头像上加V的,是赞助过DCloud产品的开发人员 http://dev.dcloud.net.cn/sponsor/
2019-05-31 08:42
bingchen

bingchen

回复 东子:
实名认证
2019-05-31 08:24