Adobe AIR平台的新世界:桌面與Web的大一統

過去這幾年,以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包含兩部份:
1. Windows、Mac OS、Linux平台上的執行期環境,讓應用可以安裝與執行。
2. 用來開發這類應用的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專案(http://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應用,你有下面的工具可以選擇:
1. 【Flex】Flex框架已經被擴大,支援新的元件和AIR專屬的功能。你可以使用免費的Flex SDK(命令列工具)開發AIR應用。
2. 【Flex Builder】Flex Builder是以Eclipse為根基的IDE(整合開發環境),可以用來建立Flex應用。現在Flex Builder已經被升級,可以很容易地建立AIR應用。Flex Builder以後也會包含新的AIR框架元件,包括「嵌入HTML內容」的元件。
3. 【Dreamweaver】Dreamweaver可以建立HTML應用。
4. 【Flash Professional】Flash Professional可以建立SWF應用。
5. 【其他工具】任何能夠編寫HTML的工具。
不管你選擇哪一種,都有免費的工具讓你:
1. 不需要先安裝AIR應用,可以直接執行。當你在開發除錯過程,這會很方便。
2. 為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是今年一項值得特別注意的技術。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2268067

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏