浅谈 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函数的形式表示,并可以根据这些细粒度的自定义函数,构建各种复杂的分析报表. 普通的 ...
随机推荐
- Angular02 通过angular-cli来搭建web前端项目
利用angular-cli的常见命令: npm i --save 包名 -> 软件依赖 npm i --save-dev 包名 -> 开发依赖 ng new 项 ...
- 如何让一个DIV水平,垂直方向都居中于浏览器?
<style type="text/css"><!-- div {position:absolute;top:50%;left:50%;margin:-150px ...
- html dl dt dd标签元素语法结构与使用
dl dt dd认识及dl dt dd使用方法 标签用于定义列表类型标签. dl dt dd目录 dl dt dd介绍 结构语法 dl dt dd案例 dl dt dd总结 一.dl dt dd认识 ...
- vue 路由部署服务器子目录问题
http://blog.csdn.net/hero82748274/article/details/73436497 <Egret 引擎入门> 这两天一直在查询vue经过打包后部署服务器一 ...
- <c:forEach 的常用整理
<c:forEach items="${images}" var="img" varStatus="status"> <d ...
- ios开发 第一天
alloc 分配内存(类方法) init 调用构造函数 id可以替代任何数据类型(不加*号) 错误现象: 2013-06-27 21:44:21.769 FieldButtonFun[3465:113 ...
- Java 获取年 月 日 时 分 秒
/** * 英文简写(默认)如:2010-12-01 */ public static String FORMAT_SHORT = "yyyy-MM-dd"; /** * 英文全称 ...
- C语言知识点总结
本文采用思维导图的方式撰写,更好的表述了各知识点之间的关系,方便大家理解和记忆.这个总结尚未包含C语言数据结构与算法部分,后续会陆续更新出来,文中有漏掉的知识点,还请大家多多指正.
- python3 第二十章 - 函数式编程之Higher-order function(高阶函数)
什么是高阶函数?把函数作为参数传入或把函数做为结果值返回,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式.函数式编程的特点: 函数本身可以赋值给变量,赋值后变量为函数: 允许将函数本身 ...
- Servlet--SingleThreadModel接口,RequestDispatcher接口
SingleThreadModel接口 定义 public interface SingleThreadModel; 这是一个空接口,它指定了系统如何处理对同一个 Servlet 的调用.如果一个 S ...