Adobe AIR平台的新世界:桌面与Web…

最近两年桌面应用的架构是一个值得关注的方面,著名的有微软的WPF,还有Java下的Eclipse插件,Adobe的Flex,本文可使我们对后者有一个更为清晰的理解。

编译/蔡学镛(《程序员》2008年1月刊)

过去这几年,以Web为根基的RIA(Rich Internet Application)已经变得相当实用,利用到的技术包括HTML、AJAX、Flash、PDF,让Web也具有以往桌面应用才具备的互动性,同时,这些技术也让我们可以在更短的时间(相较于传统的C++)将应用开发出来。

但是,以Web为根基的RIA依然受限于浏览器的安全沙箱(sandbox),不能取用本地磁盘系统和其它装置(例如打印机),除非使用者介入处理。不能自由地开启窗口,也不能执行时完全没有画面,不能离线执行…这类RIA处处受限,能力还是比不上桌面应用。

这些限制其实是有原因的。因为浏览器有安全沙箱,所以我们可以安心地浏览Web,这让Web具有能用度。对于许多Web类型的应用来说,获得应用相当简单,只要在任何浏览器内输入URL即可,“取得上的便利性”远超过“使用上的限制”,大家还算是愿意接受。但是,桌面应用就不会有相同的安全限制,因为它们需要使用者动手安装,只要确认安装,就可以获得较高的存取权限。

Adobe AIR的目的是让大家可以利用既有的Web技术开发RIA桌面应用。这类应用可以存取文件系统、开启窗口、离线储存,并具备其它传统桌面应用的特色,但在开发阶段使用的技术是今天大家所熟悉的Web技术。

AIR包含两部份:


  • Windows、Mac OS、Linux平台上的执行期环境,让应用可以安装与执行。
  • 用来开发这类应用的SDK(软件开发套件)



桌面应用是什么?

AIR所瞄准的 “桌面应用”目标,不只是提供API让编程员可以开启窗口或存取文件系统。AIR目标是让应用可以和操作系统可以紧密地整合,就像是传统C、C++、Objective-C所开发的应用一般。比方说, AIR应用是从Windows的开始选单中启动,或从Mac OS的dock中启动,在Activity Monitor或Task Manager有应用自己的名称,且在Windows的“新增/移除程序”控制面板中可以看到它们。

然而,并不是所有的桌面应用都适合用AIR开发。有些应用需要耗费很高的计算资源(CPU与内存),就不适合使用AIR实践。

Adobe AIR的关键在于部署(deploy)与执行(execute)AIR应用的能力,这些应用是利用HTML、AJAX、Flash、PDF等技术开发出来的。就像是C、Java、.NET的执行环境一样,Adobe AIR也具有一群链接库和服务,这些是执行程序时不可或缺的基础。执行环境位于中间层,负责上面应用和下面OS之间的沟通。当应用启动时,执行环境处理初始化的工作;当应用结束时,执行环境处理终结化的工作。执行环境也提供API,让应用可以呼叫底下OS的服务。

Adobe AIR设计的目的是要尽可能地提供一个跨平台的抽象平台。比方说,它提供文件系统API,可以在多个平台上执行。开发应用时可以使用AIR的API,可以让应用具有可移植性(portable)。

抽象平台的API无法面面俱到,毕竟每个OS都有一些不同的地方。因此Adobe AIR具备“平台专属”的API,也就是说,Windows平台的AIR有自己专属的API,Mac OS平台的AIR也有自己专属的API。如果在错误的平台呼叫该专属API,就不会产生任何效果。例如,一个应用如果呼叫Mac OS上处理Dock的API,此应用在Windows平台上执行时,这个部分的程序代码就不会起任何作用(应用可以询问AIR,底下是什么平台)。

执行期系统包含一个Flash播放器(Player),此播放器是“浏览器plug-in版本的Flash播放器”的扩充,不但原有的功能一个不少,甚至还加入更多功能(像是取用文件系统的能力)。

执行期系统也包含一个HTML展现引擎(rendering engine),此引擎采用开放源码的WebKit项目(www.webkit.org),同时这也是Apple Safari浏览器使用的HTML展现引擎,这使得Adobe AIR和Safari几乎具有100%的兼容性。Adobe AIR不会做自己的浏览器接口来和其它厂商竞争,因为这么做的意义不大。AIR之所以包含HTML展现引擎,是因为HTML(以及相关技术)是呈现画面的一种重要标准。

Flash和HTML的环境会桥接在一起,彼此的程序代码可以互相呼叫。比方说,Flash内容的ActionScript程序代码可以取用HTML文件的DOM;而HTML内容可以调用Flash API。

HTML内容可以嵌入Flash,而Flash也可以嵌入HTML。开发AIR应用,可以只用到HTML,或者只用到SWF,或者同使两者,完全看你的需求而定。

执行期环境不包含PDF展现引擎,而是直接桥接到外部的Acrobat Reader程序,这么做的原因,一方面节省AIR执行期环境的大小,二方面可以让AIR在呈现PDF时和原本的计算机系统一致。PDF文件可以被嵌入到SWF或HTML文件中,但是AIR应用无法只包含PDF内容。在AIR中,只要一行程序代码就可以让这三种(Flash、HTML、PDF)编剧引擎(scripting engine)启动,相当方便。

AIR执行期系统可以从Adobe网站免费下载,Adobe公司也允许我们免费散播它。执行期系统的大小,大概会控制在5MB到9 MB之间。

AIR支持网页技术

AIR让我们可以直接使用Web技术,许多人已经将既有的网页内容(HTML与SWF)直接由AIR执行,做出许多他们的第一个AIR应用,完全没更动任何程序代码。

将既有的内容移植到AIR只是第一步,如果不多做一些事,那么你的AIR应用就和一般的Web应用没有差别(只是看不到浏览器的外框)。AIR提供更多好用的API,可以让我们写程序好好利用。像是窗口、文件系统、网络…等API。写程序好好地利用这些API,会让你的AIR应用威力更强大。

AIR的编剧技术

HTML、Flash、PDF,都可以透过ECMAScript进行编剧(scripting)。对于HTML与PDF来说,ECMAScript就是JavaScript;对于Flash来说,ECMAScript就是ActionScript。JavaScript与ActionScript都是根据ECMAScript标准实做出来的。

AIR应用开发者不需要从这些技术中选择一个,而是可以在单一应用中结合这些技术。由AIR负责这些技术之间的沟通。

AIR对HTML与AJAX的支持

AIR使用开放源码的WebKit HTML引擎,所以能够支持HTML与AJAX。为了和AIR整合,Adobe公司修改了WebKit的程序代码,但是Adobe宣称依然接近100%兼容于苹果的Safari。

AIR可以将HTML内容显示在Flash内部,Flash可以对嵌入其中的HTML进行旋转、模糊化…等操作。当然,Flash内容也可以被嵌入到HTML中。

AIR与Flash、Flex的关系

AIR不但包含一个完整的Flash播放器(包括新的开放源码Tamarin编剧引擎),甚至还将它扩充成可以支持AIR API。这些API本身有一大部分是用ActionScript实践出来的。

Flex提供了一个框架(framework),具有额外的API,且支持用MXML(一种XML)建立使用者接口(UI)。Flex原本是用来建立“浏览器内的RIA”,Flex可以产生Flash(SWF)内容,当然这样的内容也可以在AIR内执行。但是到了AIR的时代,Flex被扩充成具有新的框架,充分利用AIR的API。

AIR开发工具

想要开发AIR应用,你有下面的工具可以选择:


  • 【Flex】Flex框架已经被扩大,支持新的组件和AIR专属的功能。你可以使用免费的Flex SDK(命令列工具)开发AIR应用。
  • 【Flex Builder】Flex Builder是以Eclipse为根基的IDE(整合开发环境),可以用来建立Flex应用。现在Flex Builder已经被升级,可以很容易地建立AIR应用。Flex Builder以后也会包含新的AIR框架组件,包括“嵌入HTML内容”的组件。
  • 【Dreamweaver】Dreamweaver可以建立HTML应用。
  • 【Flash Professional】Flash Professional可以建立SWF应用。
  • 【其它工具】任何能够编写HTML的工具。



不管你选择哪一种,都有免费的工具让你:


  • 不需要先安装AIR应用,可以直接执行。当你在开发除错过程,这会很方便。
  • 为AIR应用建立部署包裹(deployment package)。



部署AIR应用

AIR应用部署时被包装成单一文件、跨平台的安装包裹,此包裹内整合了不同平台的原生安装技术。如此一来,AIR应用可以用同一个文件部署到不同的平台,而不需要为每个平台建立不同的安装包裹。同时,由于整合各种平台的安装技术,所以为文件型态注册,建立桌面快捷方式…等事情,都可以进行,就好像专门为该OS设计的应用一般。安装包裹内包含一些执行期会用到的文件(例如SWF与HTML文件)、一些安装时会用到的额外文件、一个文件清单(manifest),以及数字签章(signature)。

包裹文件格式是大家所熟悉的ZIP(Java的JAR也使用此格式),但是你无法利用一般的ZIP工具程序来建立AIR,这主要是基于安全的考虑(不希望程序代码被窜改)。Adobe提供一个免费工具程序,可以利用XML签章(signature)来签署(sign)AIR的包裹文件。AIR会向OS注册,只要双击(double-click)AIR安装包裹,OS就会交由AIR处理,触发安装功能。安装时会使用到包裹文件清单(manifest)内的信息,UI显示出应用的名称、描述…等等,让使用者确定是否要安装。

当使用者确定要安装,应用安装程序会将包裹的内容转成适合底下OS的形式。比方说,马上建立一个原生的执行档(native executable)。为该应用指定适当的名称,且如果有提供icon图档,也一并在此做设定。正是像这样的机制,使得AIR应用看起来就像是该OS一般的桌面应用,不会格格不入。

最后,Adobe AIR也提供了一组API,让应用可以更新自己。搭配“网络侦测”和 “下载能力”,可以实践各种升级政策,包括选择性升级、强制升级、付费升级…等等。

网络与通讯的支持

Adobe AIR对Flash、HTML、PDF提供基本的HTTP支持,也对提供更低阶的socket API。AIR也扩充Flash LocalConnection API,使得不只AIR应用之间可以沟通,连AIR应用和浏览器内的Flash应用之间也可以沟通。

这些特色让我们可以使得Web应用和桌面应用彼此合作,而不是彼此竞争。比方说,某公司可能会同时提供Web版本与AIR版本的应用接口,让使用者处理银行业务。对客户来说,你在家里面可能会用AIR桌面应用,但是在外面上网时使用Web应用。只要一个简单的点选动作,就可以让使用者选择要用什么样的接口。

安全防护

就和传统的桌面应用一样,AIR也可能被用来进行危险的操作。文件API可以用来读、写、删除文件,搭配网络API使用,就可能造成危险。

AIR采用无所不在的特权安全模型,将这样的风险降低。当某功能本身就有风险,或者搭配其它功能会产生风险时,这样的功能会被禁止,只有当某应用有取得特权时,才能进行这样的功能。

对一般使用者来说,此模型并不简单,也不是第一道防线。一般使用者应该小心选择哪些应用可以安装,来路不明有风险的应用就不要安装,因为安装就是一种信任的表现。(因为AIR应用可以被签署,使用者因此可以得知该AIR应用的开发者是哪一家公司,使用者可以自行判断是否要信任该公司的软件)。

对于企业的系统管理员(或者个人计算机的管理员)来说,特权模型可以用来减少执行AIR应用时的风险。安全沙箱不是用来执行不受信任的应用,毕竟不信任的应用,一开始根本就不应该被安装。安全沙箱是用来执行你信任的程序,但是你知道这些程序不应该做某些事,所以你要利用沙箱来确保它们真的不会做这些不该做的事。

对企业的支持

因为AIR可以运用Web技术进行快速开发,所以AIR也适合用在企业。另外,AIR的安全架构让企业可以在执行AIR应用时,多了一些保障,因为受信任的应用仍然只能在系统管理者定义好的活动范围内行动,不能为所欲为搞破坏。

AIR还有一些其它的特色,是专门为企业设计的。比方说,企业可以使用OS本身的安装技术,来管理大量机器的软件安装。Adobe预计会提供免费的工具,让系统管理员可以将AIR部署包裹转成原生安装的格式,例如Windows的MSI文件。这些MSI文件的部署可以透过既有的底层机制来进行,像是Microsoft SMS或IBM Tivoli。

结论

AIR具有跨平台的环境,可以用Web技术开发桌面应用,结合Web与桌面的双重优势。Adobe公司即将于2008年正式推出的AIR,对于开发者来说,AIR是今年一项值得特别注意的技术。
<script type="text/javascript" id="wumiiRelatedItems"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值