移動應用開發工具:PhoneGap與Titanium的比較

jopen 9年前發布 | 42K 次閱讀 PhoneGap 移動Web開發框架 移動開發

PhoneGap和Titanium都提供了跨平臺移動開發工具。兩者還在一定程度上都需要使用JavaScript和Web技術。雖然這兩項技術的目的都是能夠實現跨平臺的移動開發,但是解決這個問題的一套理念和方法卻沒有多少共同之處。

一、PhoneGap是如何工作的

PhoneGap的目的是讓基于HTML的Web應用程序可以作為原生應用程序來部署和安裝。由原生應用程序外殼來加以包裝,通過面向多個平臺的原生應用程序商店來發布。此外,PhoneGap力求提供Web應用程序通常無法使用的常用的原生API,比如之前在瀏覽器中還沒有提供的功能:攝像頭訪問、聯系人訪問和傳感器。

開發PhoneGap應用程序,只在本地目錄中創建HTML、CSS和JavaScript文件,其方式酷似開發靜態網站。想要將寫好的程序編譯成各個軟件包,只要使用PhoneGap Build的服務即可,該服務可以在云端創建易于安裝的應用程序。

PhoneGap應用程序是一種“原生包裝”的Web應用程序。許多原生移動開發SDK提供了Web瀏覽器窗口組件,作為用戶界面框架的一部分。在純原生應用程序中,Web視圖控件用來顯示來自遠程服務器的HTML內容,或者顯示以某種方式與原生應用程序一起封裝的本地HTML內容。由 PhoneGap創建的原生“包裝器”把前后端開發者的HTML頁面裝入到這其中一個Web視圖控件,并且在應用程序啟動后,將隨后出現的HTML作為用戶界面來顯示。

如果JavaScript文件包括在Web視圖裝入的頁面中,該代碼就在頁面上以正常方式來運行。不過,創建Web視圖的原生應用程序能夠以不同的方式與Web視圖里面運行的JavaScript代碼進行異步通信。這項技術在PhoneGap架構中通常被稱為“橋接”技術。PhoneGap利用該技術在Web視圖里面創建JavaScript API,以異步方式將消息發送到包裝器應用程序中的原生代碼,以及接收來自包裝器應用程序中原生代碼的消息。每個平臺實現橋接層的方式各有不同;在iOS 平臺上,當你需要聯系人列表時,原生方法調用就會進入到通過橋接發送的請求隊列。隨后PhoneGap會創建iframe,iframe會裝入統一資源標識符方案(“gap://”),原生應用程序經配置后處理該統一資源標識符方案;這時候所有的隊列命令將被執行。通過在Web視圖的環境下執行 JavaScript,就能回過頭來從原生代碼聯系到Web視圖。PhoneGap的工作方式絕不止這些,但是通過實現橋接技術完成從Web視圖到原生代碼的消息傳遞卻是這項技術的核心部分,這讓本地Web應用程序得以調用原生代碼。

為PhoneGap編寫原生擴展需要:

  1. 為擴展編寫JavaScript接口,它將使用PhoneGap的API,將發送到原生代碼的消息排成隊列。
  2. 以某種方式將你的擴展登記到原生項目——在iOS上,這一步在Cordova.plist文件中完成。
  3. 編寫原生代碼,PhoneGap將從Web視圖發送請求至原生代碼,并實現所需的任何原生代碼。

大致上來說,開發者可以參與到驅動核心PhoneGap原生API的同一個異步消息傳遞系統。

PhoneGap架構方面的主要優點是,它非常小巧、簡單。它只做自己擅長的工作。PhoneGap團隊有意為基于Web瀏覽器的應用程序只實現最基本的原生API。由于原生API集非常小,因而把PhoneGap移植到許多不同的環境來得比較容易。基本上來說,支持Web視圖或Web運行時環境的任何原生平臺都可以是一種PhoneGap平臺。PhoneGap中的非可視原生擴展也非常簡單。說到登記原生代碼、接收來自Web視圖的消息,這方面的要求也非常低。因而可以迅速開發出簡單的原生擴展。這種插入式架構還得到了很好地落實。另外,原生API和原生應用程序開發對前后端開發者來說幾乎完全是抽象的。凡是能編寫HTML、CSS、甚至一小段JavaScript代碼的人都能用原生應用程序來包裝網頁,并將其作為原生應用程序來分發。使用 PhoneGap把網頁包裝成原生應用程序方面的準入門檻極低。

PhoneGap應用程序中用戶界面的質量會不一樣,取決于Web視圖和平臺上渲染引擎的質量。iOS平臺上基于Webkit的渲染引擎很強大,并且提供了最佳性能。Android Web視圖可以用,但是存在一些明顯的局限性。在其他平臺上,Web視圖的性能可能成問題,這要看操作系統的版本。還有Web開發者始終不得不處理的常見的跨瀏覽器問題。現在許多移動都平臺采用Webkit,但是即便在基于Webkit的環境中,仍存在很大的差異。

PhoneGap無法用原生用戶界面來加以擴展。前后端開發者的應用程序本身駐留在Web視圖里面,用戶界面由HTML加以渲染。你可以把消息傳遞到原生代碼,并創建在Web視圖之上或鄰近Web視圖的原生用戶界面,但是很難或不可能把動態的、基于文檔對象模型(DOM)的HTML用戶界面與原生用戶界面組件集成起來。

二、             Titanium是如何工作的

Titanium Mobile的目的是為移動開發提供一種高級的、跨平臺的JavaScript運行時環境和API。Titanium與 MacRuby/Hot Cocoa、PHP或node.js的共同之處實際上多于它與PhoneGap、Adobe AIR、Corona或 Rhomobile的共同之處。Titanium基于移動開發方面的兩個現實:

  1. 有一套核心的移動開發API,它們可以跨平臺進行規范。這些方面的重點應放在代碼重用上。
  2. 有針對特定平臺的API、用戶界面公約以及功能特性,開發者在針對該特定平臺從事開發時應該采用。應該有針對特定平臺的代碼,以便這些用例提供最佳的用戶體驗。

由于這些原因,Titanium并不是想“編寫一次、到處運行”。開發者應該使用面向多個平臺的優秀的、用戶體驗增強特性。必要時,原生應用程序應充分利用熟悉的、高性能的原生用戶界面窗口組件。原生應用程序開發者沒必要為了繪制長方形或發起HTTP請求而要學會針對特定平臺的API。 Titanium試圖借助統一的JavaScript API、針對特定平臺的功能特性以及原生性能,實現代碼重用,從而滿足用戶的預期要求。在編寫 Titanium應用程序時,其實是用JavaScript來編寫原生應用程序。Titanium應該被視作是一種用來編寫原生應用程序的框架,而不是針對的實際平臺予以抽象化。

想用Titanium來開發原生應用程序,開發者就需要安裝面向iOS和Android的原生工具鏈。不過,這些工具安裝完畢后,開發者通常只能與 Titanium SDK的腳本接口進行交互。這一步可以直接通過命令行來完成,也可以通過基于Eclipse的集成開發環境(IDE):Titanium Studio來完成。

使用Titanium工具集,可以創建含有配置文件和本地化文件的應用程序項目目錄,以及含有圖像、資源和為了運行應用程序而編寫的 JavaScript源代碼的目錄。在默認情況下,你不用編輯HTML和CSS文件,除非你想創建同時含有原生用戶界面和基于HTML的用戶界面的混合型應用程序。Titanium應用程序可以、而且常常的確采用“混合型”(原生和Web)用戶界面,比如非死book的原生應用程序。這樣一來,開發者實際上可以實現PhoneGap和Titanium。借助該工具鏈,應用程序使用面向目標平臺的實際仿真器/模擬器來運行。在Studio中,提供了一個向導界面,以配置任何代碼簽名依賴關系,然后處理將應用程序部署到連接設備上的任務。另外可以使用原生工具鏈來部署或包裝應用程序。

開發Titanium應用程序時,底層的工具鏈大多數是抽象的。它們是開發所必不可少的,但是很少要求前后端開發者直接使用它們。不過,開發原生應用程序這并不抽象。用戶界面是用跨平臺組件和針對特定平臺的組件共同開發而成的,應用程序應該處理:后臺服務、本地通知、應用程序標記、配置、活動/目的……所有這些都通過Titanium JavaScript API來提供。Titanium應用程序后臺發生的事情相當復雜。但大致上來說,在運行時,你的應用程序包括三個主要組件:JavaScript源代碼;用原生編程語言針對特定平臺實現的Titanium API;以及用來在運行時執行JavaScript的解釋器。

應用程序啟動后,JavaScript執行環境由原生代碼來創建,應用程序源代碼進行執行。被插入到應用程序JavaScript運行時環境的 “代理”對象——在原生代碼中有配對對象的JavaScript對象。俗稱為Titanium應用程序中的“JavaScript地帶” (JavaScript land)和“原生地帶”(native land),因為它們在某種程度上彼此并行。代理對象在JavaScript地帶和原生地帶中同時存在,充當兩者之間的“橋梁”。在JavaScript代碼中,當針對全局Titanium或Ti對象調用函數時,比如 var b = Ti.UI.createButton({title:’Poke Me’});,這將調用一種會創建原生用戶界面對象的原生方法,并創建一個“代理”對象(b),向JavaScript提供關于底層原生用戶界面對象的屬性和方法。用戶界面組件(視圖代理)可以在層次體系上加以安排,以創建復雜的用戶界面。為非可視API(比如文件系統輸入/輸出或數據庫訪問)呈現界面的代理對象用原生代碼軟來執行,并以同步方式將結果返回給 JavaScript;如果是網絡訪問等API,則以異步方式返回結果。

由于Titanium的目的是為跨平臺的原生移動開發提供一種更高級的API,所以你可以直接訪問一系列廣泛的原生特性和功能,從用戶界面組件、插座接口到通知系統集成。Titanium的目的是,將Titanium應用程序和純原生應用程序之間在功能方面的差異縮小到幾乎為零。我們可能從來不直接支持整個平臺的API,但是我們希望能涵蓋90%最常見的用例,并且提供一個平臺,以便有需要的人可以添加剩余10%的用例。由于Titanium通過 JavaScript提供了一種高級的原生編程API,為用過基于ECMA Script的語言的任何人大大降低了原生編程方面的準入門檻。、

Titanium API的范圍使得添加新平臺有難度——在一種新的原生平臺上實現Titanium API是項艱巨任務。正由于如此,Titanium平臺只出現在目前被認為最重要的移動平臺上:iOS、Android和Web。

三、PhoneGap與Titanium的差異

至此,PhoneGap和Titanium技術方面的差異已很明了。但是除了那些差異外,每個項目的目的和方向也不同。PhoneGap的既定目標是最終不復存在。從理論上來說,一旦瀏覽器廠商實現了PhoneGap的特性,這個平臺將沒有必要。PhoneGap的贊助公司Adobe對于Web作為一種平臺有著非常濃厚的興趣。Adobe是一家主攻工具的公司。平臺其實是Adobe可用來銷售工具的一個渠道。這個平臺一度是Flash。而現在,除了 Flash外,這個平臺主要還是Web瀏覽器。從許多方面來看,PhoneGap在Adobe的產品路線圖中到底扮演與Flash相似的角色。 PhoneGap試圖建立一種抽象的運行時環境,能夠實現跨平臺部署。

Titanium也對Web作為一種平臺日臻完善抱有興趣,并給予了支持。區別在于,Titanium并未指望Web成為唯一的移動應用程序平臺。 iOS、Android、黑莓和WindowsPhone之類的平臺繼續頗具影響力,為用戶們提供出色的體驗。這種選擇和競爭對消費者來說將是件好事,但是對開發者來說仍是個問題。Titanium為開發者提供的是這樣一種方式:借助單一代碼庫,同時涵蓋Web平臺和原生平臺,同時保留該平臺的用戶所期望的特性、性能以及緊密的平臺集成。

最后,如果想快速開發一個iOS or/and Android原生UI的程序,選擇Titanium或許更適合,如果想實現一個跨平臺的基于HTML的移動應用,PhoneGap或許更適合。

參考信息:

引用地址:http://www.biaodianfu.com/phonegap-vs-titanium.html
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!