天天看點

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是今年一項值得特别注意的技術。

繼續閱讀