Cordova 是一个开源的移动开发框架,允许使用标准的 Web 技术——HTML5、CSS3 和 JavaScript 进行跨平台开发。应用在每个平台的具体执行被封装起来,并依靠符合标准的 API 绑定去访问设备功能。本系列教程旨在带领读者上手实战,掌握 Cordova 环境搭建、创建项目、添加插件等核心技能,从而能够打包自己的 App 应用。
近年来,随着移动设备类型与操作系统的增多,用户需求日益增长,因此在项目启动前,团队需要考虑需求、成本、时间投入、成员技术成熟度等因素。在这种情况下,App 的开发方案也尽显多元。曾经 Html5 有一段小浪潮,引发过关于原生开发、混合开发和 Web 开发哪个是最佳实践的讨论。笔者认为,只有实践过的人才能知道答案,尤其是在当今充满变数的移动互联网时代。
混合移动应用程序开发目前非常流行,因为它提供了一种适合多种场景的方式。在本地应用程序、基于网络的移动应用程序和混合移动应用程序中,混合开发最具优势。混合应用程序开发指的是开发 App 时一部分功能用原生构建,另一部分功能用 Html5 构建,介于 Web App 和 Native App 之间,英文名为 Hybrid App。这种模式早在几年前就已出现,到2014年末开始流行,2016年被广泛使用,2017年达到鼎盛期。
混合开发模式的流行离不开其自身优势:Hybrid App 总体特性更接近 Native App,但使用网页语言编码,开发成本和难度比 Native App 小很多。因此,它兼具“Native App 良好用户交互体验的优势”和“Web App 跨平台开发的优势”。目前有名的混合开发框架包括 Cordova、React-Native、Weex 和 Ionic。
Cordova 是 Apache 的一个开源项目,其体系架构从上往下分为前端(HTML、JS)、Html 渲染引擎(各平台的浏览器组件)和 Cordova Plugin。Cordova Plugin 是核心部分,扩展了 JS 访问手机硬件和原生 API 的接口。开发者可自定义 Cordova Plugin 扩展自己的原生接口,添加到 Cordova。总体来说,Cordova 既可以简单部署到多平台,也支持单平台的深层定制。
ReactNative 是 Facebook 推出的跨平台框架,使用 JS 和 React 开发 App。用 ReactNative 开发的界面会完全转化为原生界面,部署时不用重新编译,支持热加载并可植入原生代码。ReactNative 通过 JavaScript 将原生方法映射到 JS 中,没有使用浏览器组件(除低版本 iOS),严格意义上开发出来的并不是 Hybrid App。开发时依赖 ReactNative 暴露的接口,学习成本较高,且前端代码不能复用到 PC、手机浏览器或微信公众号网页。
Weex 是阿里推出的跨平台框架,理念是“write once run anywhere”,即三端体验一致,让开发者专注于业务,写一份代码适用于 iOS、Android 和 H5。其技术架构采用 JS 引擎 V8 和基于 Vue.js 的 JS 开发框架,学习成本也较高。
Ionic 是一个专注于用 Web 开发技术、基于 Html5 创建类似于手机平台原生应用的开发框架,绑定 AngularJS 和 Sass。它基于 Cordova 的编译平台,可以编译成各个平台的应用程序,并提供了很多 UI 组件和封装的 Cordova 常用 Native API,但学习成本同样较高。
Cordova 的优势在于,一旦熟悉其开发方式并踩过 Html5 开发手机 App 的坑,开发第二个 App 时会极大提高速度。因此,对于会 Html5 技术、想掌握跨平台高性能 App 开发技术的前端人员,Cordova 是优秀的第一选择。
在众多混合型框架中,Apache 作为幕后老大,背景强大,Cordova 可以说是佼佼者。它基于标准的 Web 技术——HTML、JavaScript 和 CSS,用 JavaScript 包装平台的 API 供开发者调用,具备强大的编译工具为不同平台生成应用,同时拥有丰富的第三方资源和产业链。
Cordova 的特点包括插件丰富和可移植性。其插件是生态系统的重要组成部分,能帮助快速访问移动设备的原生 API,提供了 Cordova 和原生组件相互通信的接口,绑定到标准设备 API 上,使你能通过 JavaScript 调用原生代码。Apache Cordova 项目维护着一组核心插件,让应用程序访问设备功能如电源、相机、联系人、摄像头、麦克风、传感器、数据和网络状态等,此外还有第三方插件提供附加功能。
基于浏览器的移动 Web 可移植性和跨平台最突出表现为混合 App 能节省跨平台的时间与成本,开发者只需编写一次核心代码就可部署到多个平台,而原生 App 的跨平台性能最差。目前已有开发商采取只编写一次应用程序,就可以在 iOS、Android、BlackBerry、webOS、Bada 以及 Symbian 等主要移动平台和应用程序商店发布。这种方式存在性能不够好和兼容性较差的缺点,但随着 Android 5.0+ 和 iOS 9.0+ 的普及,这些缺陷在减少。如果未来 Android 最低支持版本从5.0开始、iOS 从9.0开始,混合开发 App 的缺点将变得不明显。
随着移动互联网发展,App 满天飞,用户下载 App 时通常有 Android 和 iOS 版本选择,安装后还需更新才能享用新功能。Cordova 提供了一种方式,只需开发一个 App 版本,就能适配通用操作系统如 Android、iOS、Windows Phone、Palm WebOS、Blackberry 等,实现“代码写一次,到处运行”,类似于开发网站效果,基于 Web App 根据输出平台要求提供不同类型安装包。Cordova 的设计初衷是通过跨平台开发降低原生开发成本,为此开发人员需要安装原生开发环境、配置工程,使用 HTML5、CSS3、JS 和原生 SDK 生成应用。
使用 Apache Cordova 的人群包括:移动应用开发者想扩展应用使用平台而不通过每个平台的语言和工具集重新实现;Web 开发者想包装部署自己的 Web App 分发到各个应用商店;移动应用开发者有兴趣混合原生应用组件和 WebView 接触设备 API 或开发插件接口。或许在未来几年,Android 和 iOS 开发人员需求量将逐渐减少,而 Html5 开发人员需求量会与日俱增,从 Android 或 iOS 转型为 Html5 的开发人员将更加走俏。