注:本文作者Matt Raible是一个网络架构咨询师,在开源架构上很有研究。
一天下午,我参加了PhoneGap开发者Brian LeRoux在Devoxx的演讲,演讲内容是混搭Web应用开发中的PhoneGap技术。我曾尝试过PhoneGap,并且有着非常愉快的体验。下面是我对Brian LeRoux的演讲所作的笔记。
PhoneGap是一个使用HTML、CSS和JavaScript来创建本地应用的框架,源于2008年的一个Hack项目,后在当年秋天,被Nitobi引入其概念开发Android和BlackBerry上的实现。人们真正开始关注PhoneGap是因为苹果公司对PhonePag的封杀,原因是所有使用PhoneGap开发的应用都被命名为PhoneGap。
其后,开发者为PhoneGap增加了对Symbian和WebOS上的支持,Sony Ericsson也成为这个项目的贡献者。这让PhoneGap获得了一个好的印象,随后,Apple就让他们重新加入进来了。
在2010年,IBM开始与Nitobi (即创建了HTML5 移动应用框架PhoneGap 和PhoneGap Build的新创公司Nitobi Software)进行合作,在OSCON与他们见面后,又向这个项目增加了5个开发者。在2011年,RIM和微软也开始加入进来。随后,Adobe收购了这个公司,所以Adobe也成为这个项目的贡献者。
PhoneGap的目标:Web是第一级平台,应该让人们创建可以安装的Web应用。他们的第二个目标是扩大他们的影响力让浏览器去适应其模型。
PhoneGap不是一个runtime或者编译器,它也不是一个IDE或者预先定义的框架或者专有lockin。它获得了Apache、MIT和BSD的认证,并且可以和软件一样自由获取。你可以让它做任何你想做的事情。最近,PhoneGap加入到了Apache Software基金。
对于大家关注的Adobe vs. PhoneGap的问题,Nitobi小组仍然在为PhoneGap开发。Adobe是一个软件工具公司,并且对Apache和WebKit有所贡献。PhoneGap/Build的结合将会被加入到Adobe Creative Cloud中。
将PhoneGap应用到Apache中最大的问题是将这个框架需要重新命名和代码管理。我不是特别确定它是否需要被重命名,但Apache的Callback似乎是已经出来了。而且Apache用的是SVN来管理代码而PhoneGap社区现在使用的是Git,他们试图寻找一种折衷的道路,我个人更偏向Git。
PhoneGap技术,俗称“桥”。它包括3个步骤:实例化一个WebView,然后从本地代码调用JavaScript,再从JavaScript中调用本地代码。显然,在WebView中,所有的设备API都是可用的。
(PhoneGap)主要支持的平台的包括iOS> = 3,Android> = 1.5和BlackBerry> =5.x。他们也支持webOS、Symbian、Samsung Bada和Windows Phone。没有任何一个移动开发平台可以像PhoneGap这样支持如此多的部署平台。(PhoneGap的)主要贡献者是Adobe、IBM、RIM和微软。
PhoneGap的文档可在PhoneGap文档上获得。用以支持PhoneGap1.0的设备API包括传感器、数据和输出,这是所有设备都有的。传感器的例子是地理位置和摄像头。数据的例子是文件系统、通讯录和存储卡。输出包括屏幕、扬声器和扬声器插孔。所有PhoneGap API都是插件,但也允许任何原生API。
Phonegap的安全性如何?Brian建议大家看看HTML5的安全清单。Phonegap在本地API之上增加了很多安全措施。
PhoneGap没有与任何一个UI框架捆绑,但他们支持在浏览器中的任何JavaScript框架。 PhoneGap是一个很炫的浏览器,所以你的代码少也可以在没那么炫的浏览器中运行。这意味着你可以在你的桌面浏览器的开发和测试你的应用程序,只不过是使用PhoneGap打包和分发你的应用程序。
PhoneGap的竞争者? PhoneGap没有竞争。
PhoneGap/Build可以让你的应用程序在云端编译,并对开源项目是免费的。他们这样做的最大的原因是因为他们不能重新发布所有的SDK,对开发者来说,下载并安装training classes中的SDK是非常痛苦的。
对于移动应用程序开发,你应该有一个单纯的目标。如果你想获得成功,那就把一件事件做的很好。伟大的UX就是在不断迭代中改进的。Web已经在各种平台上获得了广泛的、成功。这很可能你已经对Web进行了投资。那么,从构建移动Web客户端开始吧,并且使用PhoneGap作为一种增强技术。
Shipping和unit测试应该每天都做。自动化任何事情,这样你就可以一键做很多事情(测试/开发/发布)。 对于Web客户端设计来说,限制是有好处的,尤其在当你面对复杂性和挑剔的客户的时候。手机会消耗很多东西:CPU,内存,带宽,电池,网络......任何事情!从为应用程序的性能标准化开始,并检测这个标准。如果你有大量的特性,要考虑分裂成多个应用。
移动网络不是WebKit!Opera规模很大,FireFox发展迅猛,IE也有它的地盘。对于布局来说,要使用flex-box规则、CSS媒体查询 和meta标签来做viewport。你应该试着不用框架去开发你的应用,因为这意味着大量的代码并且会影响你的应用的规模。
外观有可能是致命的的:美观会对性能有影响。border-radius, box-shadow 和 gradients都会降低你的应用的速度。很有可能你并不需要这些性能。为你自己的品牌设计应用,而不是为设备生产商。一个看起来像是Android上的iPhone应用的的应用是不会给人很好的印象的。
对于JavaScript库,从你自己的问题开始,而不是像Sencha或者jQuery Mobile那样试图构建一个通用的解决方案。 Zepto及XUI是你开始时所需要的一切。Jo是一个不错的选择。Backbone 和 Spine都值得关注。
对与测试, deployment、concat、minify和obfuscate你的JavaScript和CSS代码,QUnit 和 Jasmine 都是非常流行的工具。或者你也可以将一切内嵌到标记中,以便使HTTP会话最小。Gmail内联并注释他们所有的Javascript,然后eval这些代码。
从那里,Brian建议,对于优雅的系统,要利用HTML5的AppCache和RESTful JSON endpoints。接下来,他试图向我们展示一个照片共享应用程序的演示版本。不幸的是,人品比较差,他的计算机当时无法识别Android手机。但是,他向我们展示了客户端代码,只使用1行代码就能获取在手机上的图片,这令人印象深刻。
我们最后看到的是debug.phonegap.com。这是一个由weinre驱动的的应用程序。它可以让你在客户端输入一行JavaScript,然后在一个工具中远程调试,这个工具看起来像Chrome的Web Inspector。我得说这非常酷。
总结:
我真的很喜欢学习有关PhoneGap的更多东西,特别是因为Brian强调,我所有的Web开发技能都可以使用到。我不必去学习Objective - C或Android来开发本地应用程序,我甚至可以不安装SDK,如果我使用PhoneGap/Build。当然,我做手机开发的朋友可能不同意这种做法。同时,我期待使用PhoneGap将我的手机Web客户端转化为本地应用,并看看是否真地如他们说的一样好。
原文链接:PhoneGap for Hybrid App Development