浅谈 HTML5plus 开发移动应用
什么是 HTML5plus
DCloud 公司提供的,使用传统 web 技术开发移动应用的解决方案。
增强版的手机浏览器引擎,让HTML5达到原生水平!
产品口号,总会有些夸张的成分,不要在意这些细节。
Tips
- HTML5plus 名字太长,因而又称 HTML5+,或简称 5+。
- 使用该引擎开发的移动应用,又称 5+App。
- 相关的 SDK,称为 5+SDK。
使用方式
Runtime
即使用 DCloud 公司的另一款产品 HBuilder,直接进行开发调试。
SDK
将 5+SDK 集成到自己的原生应用中,就可以在应用中使用其扩展的 JS API。
区别
- Runtime 方式可以直接使用 DCloud 提供的云端打包,不需要本地搭建打包环境。
- Runtime 方式无需掌握原生开发的能力,合理使用扩展的 API 即可。
- SDK 方式可以满足更多的需求,但是需要掌握原生开发的能力。
简单地理解下
Runtime 方式,不需要开发者自己开发原生应用的基座部分,5+ 这边帮开发者做好了,只需要提交应用资源云端打包就行了。
SDK 方式则不同,这种情况是在原有的原生应用基座基础上,扩展 5+SDK。因而,需要开发者自己搭建原生开发的环境,进行部分原生开发的工作。
基本架构
按照官方的文档说明 Android平台第三方插件开发指导,大体分为三层结构。这里为了更方便理解,扩展成四部分进行说明。
Webview
可以理解为简单的浏览器,HTML、CSS、JavaScript 都在这里。
plus
这部分在 Webview 中,在原有的浏览器环境基础上,扩展可以调用原生功能的 API,这些 API 都在 window.plus
这个对象里面。
JS Bridge
负责连接 JavaScript 层与 Native 层。
- 接收 JavaScript 层传发过来的请求,通知 Native 层做出相应的响应。
- 接收 Native 层响应的结果,通知 JavaScript 层接收结果。
Native
即 Android 和 iOS,也是 HTML5plus 的核心关键部分。
一次调用执行的过程
以获取应用版本号为例
plus.runtime.version;
- JS 层调用
plus.runtime.version
,Webview 向 JS Bridge 发起请求。 - JS Bridge 接收请求,通知 Native 层读取应用版本号信息。
- Native 层执行拿到结果,通知 JS Bridge 层相应结果。
- JS Bridge 拿到 Native 层相应的结果,通知相应的 Webview 结果信息。
- JS 层获取到应用的版本信息。
吐槽一下
个人认为,每个产品每家公司,都有其自身的设计理念以及经营策略。不同的用户,总会有不同的需求和看法。
因此,做技术选型时一定要搞清楚自己的需求和被调研的产品信息。DCloud 的社区中,经常出现“怎么没有XXX API”,“为什么不集成XXX SDK”,“不会原生开发,希望官方能够扩展XXX API”等等类似的帖子。至于出现此类问题的具体原因,大家都有自己的理解,这里不做讨论。
做技术选型时,最好亲自动手做下尝试。不要期望产品供应方给你最佳答复,因为人家不会傻傻地把用户往外推。
------华丽丽分割线------
下面,分享一下个人使用的经验和心得,希望可以帮助其他开发者在技术选型时做个参考。
优点
- 学习成本低,只要掌握了基本的 web 开发能力,即可上手。
- 云端打包,不必本地搭建 Android 与 iOS 开发环境,进行打包处理。
- 一套代码,只要做少许的兼容处理,即可编译成 Android 和 iOS 两个包。
- 没有想到,待讨论补充吧。
不足
- plus.ModuleName.* 提供的 API 有限,虽然有 Native.js 这一产品,但是需要掌握一定的原生开发能力。
- 依赖手机自身的 Webview,因此在部分手机上性能并不理想。这一点,对于某些业务产品有一定的影响。
- 接第1点,某些功能的实现,需要开发者自行集成 SDK 进行扩展。例如蓝牙、应用后台常驻等。这一点,同样需要开发者具有原生开发的能力。
- 部分功能,由于兼容性问题实现的并不完善。例如桌面图标的角标等。当然,Android 的碎片化严重,有些不足可以理解。
- 文档内容,有些地方解释地不够清楚。另外,文档的排版有点奇怪。
- 目前没遇到其它坑了,也可能在下还不够熟悉。
较合适范围
综合官方的案例展示,以及个人开发的经历。总结下来,5+App 开发比较适合以下情况或产品:
- 初创公司,需要快速上线应用。
- 新闻资讯(36Kr)、电商(HiMall)、内容分享(枫桥居花卉)、外卖等大部分的 O2O 业务产品等等。
- 核心业务功能不依赖某些原生功能
- 一部分企业应用,也可以根据具体需求情况而定。
不推荐情况
有些情况没办法一概而论,因而按照具体情形说明。
- 重度依赖某些原生功能,比如应用中需要实现地图自定义的绘线、需要蓝牙模块进行数据的通信等等。
- 核心业务涉及到即时通信(IM),并且不希望使用第三方的 JS 版 SDK 的。
- 需要读写文件,比如录制短视频、编辑图片、编辑视频等。
- 某些较为“流氓”的功能,比如应用后台常驻、推送服务常驻等等。
- 控制应用的权限,比如禁止截屏之类的。这个只能在原生层处理,而且 Android 的兼容你懂的。
上面许多情况都需要通过原生层的开发来解决,当然同时可以集成 5+SDK,相关的扩展 API 照用不误。
同类产品
- cordova
- apicloud
- appcan
- ionic
- weex
- react native
目前在下了解到的就这些,有些产品浅尝辄止,有些产品压根就没体验过,因此这里不做对比以及过多的评述。
多说两句
- HBuilder 是一款 IDE,也是真机调试时基座的名字。这两个加起来,就是开发 5+App 的环境及工具。
- HTML5plus 的名字很多,DCloud 官网上写的是 5+Runtime。负责扩展 JS API,实现 JS 调用原生功能。
- MUI 移动开发的 UI 框架,为了方便开发封装了几个涉及到 HTML5plus 的方法,经常被人误解。但它真的只是个 UI 框架,原生能力的调用和它没关系。
写在最后
入行三年,从事 5+App 开发的时间算起来也有近两年。以此为开始,后续会陆续分享一些在这方面的经验和心得。
浅谈 HTML5plus 开发移动应用的更多相关文章
- 浅谈Excel开发:十一 针对64位Excel的插件的开发和部署
自Office 2010版本开始有了32位和64位之分,对Excel来说,32位的Excel和64位的Excel在性能上的主要区别是64位的Excel能够处理2G及2G以上的大数据集. 随着64位操作 ...
- 浅谈WebService开发三(动态调用WebService)转
在前两讲里,我已经向大家演示了如何使用WebService.同步, 异步调用WebService,而在实际开发过程中,可能会有多个WebService接口供你选择,而在程序执行过程中才决定使用哪一个 ...
- 浅谈iOS开发的协议(protocol)和代理(delegate)
协议和代理对于一个新手来说确实不讨好理解,也有很多的iOS开发的老手对此是懂非懂的.网上的很多博文只是讲了怎么使用,并没有说的很明白.下面我谈一下我的理解. 1.你要先搞明白,协议和代理为什么会出现, ...
- Himi浅谈游戏开发de自学历程!(仅供参考)
李华明Himi原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/himistudy/382.html ☞ 点击订阅 ☜ 本博客 ...
- 浅谈Excel开发:十 Excel 开发中与线程相关的若干问题
采用VSTO或者Shared Add-in等技术开发Excel插件,其实是在与Excel提供的API在打交道,Excel本身的组件大多数都是COM组件,也就是说通过Excel PIA来与COM进行交互 ...
- 浅谈Excel开发:九 Excel 开发中遇到的常见问题及解决方法
Excel开发过程中有时候会遇到各种奇怪的问题,下面就列出一些本人在开发中遇到的一些比较典型的问题,并给出了解决方法,希望对大家有所帮助. 一 插件调试不了以及错误导致崩溃的问题 在开发机器上,有时可 ...
- 浅谈Excel开发:八 Excel 项目的安装部署
前面几篇文章讲解了Excel开发的几个比较主要的也是比较重要的方面,比如菜单系统,Excel对象模型,自定义函数,RTD函数,异步自定义函数,用户自定义任务面板等,在实际开发中我们还会遇到各种“千奇百 ...
- 浅谈Excel开发:七 Excel 自定义任务窗体
前面花了三篇文章讲解了Excel中的UDF函数,RTD函数和异步UDF函数,这些都是Excel开发中的重中之重.本文现在开始接着第二篇文章的菜单系统开始讲解Excel中可供开发的界面元素,本文要讲解的 ...
- 浅谈Excel开发:六 Excel 异步自定义函数
上文介绍了Excel中的自定义函数(UDF ),它极大地扩展了Excel插件的功能,使得我们可以将业务逻辑以Excel函数的形式表示,并可以根据这些细粒度的自定义函数,构建各种复杂的分析报表. 普通的 ...
随机推荐
- Sql的基础知识技巧(三)
三.技巧 1.1=1,1=2 的使用,在 SQL 语句组合时用的较多 "where 1=1" 是表示选择全部 "where 1=2"全部不选, 如:if @st ...
- Awesome-Link——我的积累、推荐和分享
积累一些自己看过的比较好的技术博客.以后忘记了可以回过头来看,毕竟有些博客已经写的非常的好了.有些自己写的也会列举在上面.同时还包含一些好用的插件.工具.网站等等. github准备长期更新,欢迎st ...
- 常见 Java 异常解释(恶搞版)
常见 Java 异常解释:(译者注:非技术角度分析.阅读有风险,理解需谨慎o(╯□╰)o) java.lang ArithmeticException 你正在试图使用电脑解决一个自己解决不了的数学问题 ...
- UVA 11039-Building designing【贪心+绝对值排序】
UVA11039-Building designing Time limit: 3.000 seconds An architect wants to design a very high build ...
- [bzoj1997][Hnoi2010]Planar(2-sat||括号序列)
开始填连通分量的大坑了= = 然后平面图有个性质m<=3*n-6..... 由平面图的欧拉定理n-m+r=2(r为平面图的面的个数),在极大平面图的情况可以代入得到m=3*n-6. 网上的证明( ...
- 2017ecjtu-summer training #5 UVA10382
题意 问最少可用几个圆覆盖矩形区域. 解析 将圆形转换成矩形有效区域,直径小于等于宽度的圆不考虑,从而转化成区间覆盖问题,然后贪心出最少圆. 贪心思想 每次选择出区域左界比上次选出的区域右界小的且区域 ...
- sass 安装
最近在安装sass的过程中遇到 了一下问题,总结一下安装过程. windows下sass的安装是依赖于ruby的,所以要先安装rubyinstaller,下载地址:https://rubyinstal ...
- Linux虚拟主机通过FTP软件创建目录时提示550 Create Directory Operation Failed
更新时间:2017-06-07 13:26:11 分享: 问题描述 通过FTP软件连接Linux虚拟主机,在尝试创建新目录时,服务器返回错误提示:550 Create Directory Oper ...
- jquery自定义进度条与h5原生进度条
介绍一款自定义的进度条 <div class="box-nine"> <div class="progress"> <!--一 ...
- HEXO+Github,搭建属于自己的博客
摘录自:http://www.jianshu.com/p/465830080ea9 1. github的准备 账号 密码 建立Repository建立与你用户名对应的仓库,仓库名必须为[your_us ...