从我们传统的范畴,网页设计和软件设计是两个不同的领域。假如一个网页设计者想要去设计软件,得从头学起,抛弃原来的PHP,JavaScript,Html,CSS,重新去掌握C++,Java等。现在市场上发展飞快的手机软件,在以前,对传统网页设计者来说是望洋兴叹。因此Adobe公司发明了一种叫Air的套件可以跨平台运行,今天要介绍的是一个冉冉升起的框架,PhoneGap。

什么是PhoneGap。PhoneGap是一个自由开放源码的开发工具和框架,允许利用HTML + JavaScript + CSS的强大功能在多个手机平台上开发程序,开发出来的程序经过在各自的平台上编译形成独立的安装程序。使程序看起来和Native的程序一样。简单通俗来说就是用javascript来操作硬件。这是一个很令人振奋的功能。也可以这么来理解,PhoneGap是一个内置的浏览器,能通过网页来表现软件窗口。

软件状态。Phonegap的的UI绘制引擎就是移动设备的内置web浏览器,phonegap的应用状态多种多样,引用Adobe技术布道师Andrew Trice的话就是,你可以使用标准的HTML&CSS使它看起来就像一个简单的网页,也可以使用UI框架使它像jQuery UI, Kendo UI, Sencha, Twitter Bootstrap或Skeleton(或者其它任意基于HTML/CSS/JS的用户框架接口)。

另外你也可以采用CSS模式/主题使它看起来就像一个本地应用,如模仿iOS 和 Android的iUI,模仿BlackBerry的bbUI。PhoneGap应用可以是基于HTML的静态UIs,也可以是利用JavaScript开发具有动态效果和交互体验动态UIs。这取决于特定的应用、用户体验设计、受众目标以及指示PhoneGap应用如何出现的应用实例。使用PhoneGap应用,你可以通过缩小放大操作放大或者缩小查看的内容,或者利用利用viewport metadata tag锁定浏览内容的大小。

你可以利用常规浏览器的操作方式滚动浏览网页也可以像iScroll一样采用基于接触的滑动方式浏览网页。

基于HTML, CSS & JavaScript你有许多方式可以创建用户接口,所以并没有一个典型的外观。如果你没有使用任何的CSS模式,那么用户接口各元素默认和使用的操作系统或者浏览器保持一致,包括按钮、链接、色彩以及亮度。这时PhoneGap应用和操作系统默认的浏览器一样运行。

跨平台性。支持的平台:iOS、S60、Android、BlackBerry、WinPhone7、Palm等.实际操作中因为授权问题,从1.4版本开始,不对symbian进行支持,而且就算是1.3版处理symbian也有点力不从心。这点要注意。可以同统一API,有phonegap内部对各种系统进行支持,

开发。到官网下载phonegap sdk,在IOS状态下,安装完成只有,打开XCODE,有内置的phonegap模板,相关开发可参看官网例子。windows状态下,下载好phonegap副本之后,用Eclipse的3.4以上版本加载进去,同时需要安装android SDK,同样的配置。生成的代码可以到官网进行编译。既然是网页的开发环境,当然少不了dreamweaver里面的应用,phonegap被adobe收购之后,立马对DW进行相关的升级,在DW5.5版本开始有相关基于phonegap的移动开发。同样安装android sdk之后,能直接生成android的安装包APK。也可以使用android系统的debug模式进行调试。

总结:PhoneGap优势和劣势。

优势:

1.跨平台:一次开发,多个平台共用。现主要包括了android,iOS,Apple iOS, Google Android, Palm, Symbian, BlackBerry 等。WP7等平台也在逐步兼容中。

2.降低开发门槛。对于很多WEB开发人员来说,熟悉Objective-C语言和Java语言都是比较痛苦的事情。有了PhoneGap就不用担心这些了。用熟悉的Web前端技术就可以开发出很专业的手机应用程序。

3. 提供强大的硬件访问控制。比起传统的Web程序,PhoneGap提供了一些列的JS 的类,可以直接访问硬件。比如加速,相机,指南针,GPS,文件访问等,可以让你用JS方便地调用系统的硬件。以弥补传统Web程序的一块错误。

4. 方便的安装和使用。PhoneGap的架构很复杂,但对于大多数开发者来说,只用很简单的配置就可以搭好环境。只用专注写好自己的Web页面,拷贝进去就可以了。

劣势:

1.运行速度慢:程序的载入和UI界面的反应都比原生的程序慢,因为它实际上还是在展示Web页面,所以载入、页面刷新等肯定是需要一定时间的。

2.不适合部分程序。如果你的程序需要3D功能,或者对界面刷新有较高的要求,这样的程序现在来说还只是用原生的语言会比较好。

从我个人实测角度,实际使用中还有不少的bug相信以后随着版本的更新会慢慢变好。