参考链接:http://www.infoq.com/cn/articles/hybrid-app/
Native App(以下简称Native)和Mobile Web(以下简称Web)二者混合开发的产物被称为Hybrid App(以下简称Hybrid)。
Hybrid并不是什么新概念,最早可以追溯到Symbian时代,直到iOS和Android出现之后才充分展现出价值。
Hybrid既利用了Native App丰富的设备API(Device API),又能拥有Mobile Web的跨平台、高效开发、快速发布的能力,对于相当庞大的应用场景而言都是适用的。
跨平台
Web内容可以做到开发一次,所有平台生效,诸多产品需要这种能力。
快速发布
iOS平台,Apple Store平均审核周期1~2周不等,甚至更长,产品的发布周期从2周到1月,这对需要快速发布的产品而言难以接受。
Android平台,应用商店众多,发布过程烦琐。虽然可以应用内升级,但是带来的问题是新App需要通过应用商店,此外APK体积庞大,2G/3G环境下体验差。
高效开发
Web开发经过20年的发展,已经将结构(HTML)、表现(CSS)、行为(JavaScript)3部分很好地分离开,在分工协作、开发效率上会具明显优势。
丰富的Device API
Web(HTML5)强调通用性,受限于标准和浏览器实现,许多有用的系统功能未能得到支持(或部分支持)。
而Native最大的优势在于设备API的调用能力,只要桥接Native和Web,Web也就能够拥有这种能力。
雏形
雏形阶段大致为:
Symbian V3/5时代已经有Hybrid雏形。
iOS最初的App都是由Objective-C编写而成的,受限应用商店的发布周期,内容经常变化的部分开始通过使用内置浏览器控件(WebView)加载服务端页面来实现。
Android出现并流行之后,可以将更多的App功能通过Hybrid来实现,这样在不同平台上就可以只维护一个版本。
发展
“跨平台”成了Hybrid最大的卖点,以PhoneGap[1]为首的Hybrid框架陆续出现,带来了诸多改变。
成熟 随着PhoneGap这类Hybrid框架在全球的流行,一些问题暴露了出来,也正是这些问题的解决,让Hybrid走向成熟。
以上便是Hybrid的发展概述,从国内最新的资料可以看出,Hybrid的趋势也是非常明显的。
越来越多的开发者决定使用Hybrid(跨平台技术),最近两年的总量已经有54%;而接近60%的开发者在Hybrid的技术方案上选择了PhoneGap。
无论Android还是iOS,实现一个最简单的Hybrid App只需要几行代码:实例化WebView、加载页面,之后便是页面自身的代码。要想实现更为复杂的、完整的Hybrid还需要不少知识。
目前一个Hybrid框架通常提供以下功能。
PhoneGap几乎成了Hybrid的代名词,Titanium和PhoneGap的设计理念差异较大,
下图形象地展示了PhoneGap和Titanium的组成部分。
PhoneGap开发商Notibi 2010年将PhoneGap代码贡献给Apache软件基金(ASF), PhoneGap核心引擎成为新的开源项目Cordova,同时PhoneGap成了Cordova的一个发行版本。 2011年10月,Notibi被Adobe收购,但没有影响到PhoneGap和Cordova的开源性质。
PhoneGap主要的功能为:
Titanium设计思路和PhoneGap有很大不同,Titanium目的为移动开发提供一种跨平台的JavaScript运行时环境和API。
Titanium设计的核心思路如下:
Titanium从设计理念上不追求“written once, run everywhere”,这是它的缺点,但同时它追求平台差异的更佳的用户体验,因而也受到一部分用户的追捧。 Titanium的另一个缺陷是插件难于扩展,要想支持新平台则更加困难。
Installing Cordova
npm install -g cordova
Create a project
cordova create MyApp
//--help:
//cordova help create.
Add a platform
cordova platform add browser
//cordova platform add <platform name>
Run your app
cordova run browser
//cordova run <platform name>.
// npm hosted (new) id
cordova plugin add cordova-plugin-splashscreen
// you may also install directly from this repo
cordova plugin add https://github.com/apache/cordova-plugin-splashscreen.git