|
引述
現(xiàn)在手機(jī)平臺(tái)種類(lèi)繁多,主流平臺(tái)有Symbian、ios、Android、WM6.5、WP7以及中國(guó)山寨機(jī)所普遍使用的MTK,展訊, MSTAR。
作為開(kāi)發(fā)者來(lái)說(shuō),特別是學(xué)生,要做一款軟件支持如上平臺(tái),實(shí)在是一件遙不可及的事情。
不同種類(lèi)的應(yīng)用,成功的條件是不同的。有些應(yīng)用是以質(zhì)取勝的,有些應(yīng)用則在質(zhì)的同時(shí)必須要有足夠的用戶(hù)群(如LBS應(yīng)用相關(guān)),也就是量的優(yōu)勢(shì)。因此,不同應(yīng)用對(duì)于多平臺(tái)支持的需求是有差異的,這也是本文探討如何跨平臺(tái)開(kāi)發(fā)的價(jià)值所在。
跨平臺(tái)開(kāi)發(fā)有許多種方式,在文獻(xiàn)中可查到有下列方式。
方案名稱(chēng) | 簡(jiǎn)述 | 特點(diǎn) | 性能 | 方案開(kāi)發(fā)難度 | 使用難度 | 使用成本 | 案例 |
動(dòng)態(tài)腳本 | 使用腳本語(yǔ)言進(jìn)行動(dòng)態(tài)載入或?qū)μ囟ǖ臄?shù)據(jù)格式進(jìn)行解析,類(lèi)似于瀏覽器工作方式: wml Javascript xml表單 私有數(shù)據(jù)格式 | 開(kāi)發(fā)快,靈活配置。性能差,表現(xiàn)形式有限 | 30 | 40 | 30 | 40 | msn/fetion/qq 內(nèi)置wap瀏覽器使用服務(wù)器把網(wǎng)頁(yè)轉(zhuǎn)換成wml,客戶(hù)端進(jìn)行解析展示。 移動(dòng)MM使用xml進(jìn)行界面定義 微軟oneapp 使用 Java script進(jìn)行服務(wù)武器編寫(xiě),客戶(hù)端進(jìn)行展示和交互 |
私有跨平臺(tái) | 公司內(nèi)部使用,進(jìn)行很"粗略"的封裝 | 使用范圍受限 | 90 | 120 | 70 | 60 | 不公開(kāi)的內(nèi)部引擎,比如Gameloft的游戲引擎 很多公司的UI引擎 針對(duì)特殊的領(lǐng)域,比如Poc(按鍵通話(huà)對(duì)講機(jī))引擎 |
抽象中間件 | 有自己的編程標(biāo)準(zhǔn),完善的文檔和規(guī)范化的接口 | 學(xué)習(xí)成本高,使用平臺(tái)所限,在不損失性能得前提下解決特定的問(wèn)題 | 85 | 300 | 100~150 | 50 | Nokia的Qt 沃勤的 mtk中間件 Brew 開(kāi)發(fā)接口 |
虛擬機(jī) | 使用字節(jié)碼解析執(zhí)行 | 開(kāi)發(fā)容易,跨平臺(tái)性好,但性能差,擴(kuò)展難,維護(hù)成本高 | 50 | 有開(kāi)源方案,自己開(kāi)發(fā)成本很高 | 60 | 60 | 標(biāo)準(zhǔn)的j2me虛擬機(jī) 開(kāi)源的llvm, eve, flash最新版使用llvm 私有的,掌上明珠自己開(kāi)發(fā)了虛擬機(jī)用于開(kāi)發(fā)游戲 |
代碼轉(zhuǎn)換 | 使用Java轉(zhuǎn)換成c代碼,再編譯執(zhí)行 | 使用標(biāo)準(zhǔn)j2me接口開(kāi)發(fā),一份代碼,好維護(hù),但目前還沒(méi)官方公開(kāi)版 | 84 | 300 | 60 | 70 | 棱鏡方案 Fetion 3.0 正在開(kāi)發(fā)的聯(lián)通應(yīng)用商店 目前都還是公司內(nèi)部使用 |
備注:
性能:我們以純本地代碼開(kāi)發(fā)出來(lái)的程序性能為100做基數(shù),其他使用相對(duì)百分比。
難度:我們以純本地代碼開(kāi)發(fā)的難度100做基數(shù),其他使用相對(duì)百分比。
棱鏡方案由北京創(chuàng)世互動(dòng)總經(jīng)理張盛毅介紹,目前僅在北京創(chuàng)世互動(dòng)公司內(nèi)部使用,期待盡快與眾多開(kāi)發(fā)者見(jiàn)面。
(1)
我們可以看到,使用動(dòng)態(tài)腳本、虛擬機(jī)及代碼轉(zhuǎn)換等方式是比較廉價(jià)的跨平臺(tái)開(kāi)發(fā)方式。接下來(lái)本文將會(huì)介紹幾種跨平臺(tái)方式下進(jìn)行跨平臺(tái)開(kāi)發(fā)的方案。
動(dòng)態(tài)腳本
現(xiàn)在比較火的使用動(dòng)態(tài)腳本的跨平臺(tái)開(kāi)發(fā)方案大部分是即基于HTML5的。事實(shí)上即對(duì)傳統(tǒng)瀏覽器的一種擴(kuò)展,提供了離線(xiàn)瀏覽功能、對(duì)本地設(shè)備的訪(fǎng)問(wèn)功能等。但由于大部分編碼是使用腳本語(yǔ)言,因此性能較低。如果做圖片處理等應(yīng)用,則缺少相應(yīng)成熟庫(kù)支持。
RhoMobile - one codebase, everysmartphone
基于HTML5及Ruby構(gòu)建跨平臺(tái)應(yīng)用的工具,號(hào)稱(chēng)支持iPhone, Windows Mobile,RIM, Symbian and Android。同時(shí)提供開(kāi)發(fā)、同步、源碼管理等全方位產(chǎn)品。具有IDE。
然而,當(dāng)仔細(xì)看開(kāi)發(fā)文檔的時(shí)候,發(fā)現(xiàn)對(duì)Symbian提都不提了,實(shí)在是一件讓我的N95傷心的事情(http://docs.rhomobile.com/rhodes/introduction)。況且作者對(duì)Ruby了解甚少,也就沒(méi)有進(jìn)一步嘗試。
Appcelerator
Appcelerator的Titanium是使用HTML、JavaScript及CSS等Web技術(shù)構(gòu)建移動(dòng)(iPhone、Android及iPad)與桌面(Windows、OS X及Linux)應(yīng)用的平臺(tái)。此外,還可以使用Python、php及Ruby構(gòu)建Titanium的桌面應(yīng)用。這些應(yīng)用還可以交叉編譯到所有的目標(biāo)平臺(tái)上。
(2)
PhoneGap
PhoneGap是一款開(kāi)源的手機(jī)應(yīng)用開(kāi)發(fā)平臺(tái),它僅僅只用HTML和JavaScript語(yǔ)言就可以制作出能在多個(gè)移動(dòng)設(shè)備上運(yùn)行的應(yīng)用。PhoneGap將移動(dòng)設(shè)備本身提供的復(fù)雜的API進(jìn)行了抽象和簡(jiǎn)化,提供了一系列豐富的API供開(kāi)發(fā)者調(diào)用,只要你會(huì)HTML和Javascript或者Java語(yǔ)言,就可以利用PhoneGap提供的API去調(diào)用各種功能,PhoneGap就能讓你可以制作出在各種手機(jī)平臺(tái)上運(yùn)行的應(yīng)用,這對(duì)移動(dòng)應(yīng)用開(kāi)發(fā)者來(lái)說(shuō)無(wú)疑是個(gè)福音。
(3)
這個(gè)對(duì)Symbian的支持也很不好,官方的Symbian demo在我的N95上無(wú)法跑。
代碼轉(zhuǎn)換
由于代碼轉(zhuǎn)換直接生成目標(biāo)平臺(tái)的應(yīng)用程序,因此效率比較高。然而如引文中提到的,大部分項(xiàng)目都是私有的。
MoSync
MoSync是一個(gè)開(kāi)源的C/C++的集成開(kāi)發(fā)環(huán)境。可以簡(jiǎn)化移動(dòng)開(kāi)發(fā)程序的開(kāi)發(fā)難度,并且能夠大大提高移動(dòng)程序開(kāi)發(fā)人員的工作效率。其主要優(yōu)點(diǎn):開(kāi)源,跨平臺(tái)Android, j2me, Symbian等,易于移植。
(4)
官方的DEMO很成功的在我的手機(jī)上跑了起來(lái),還有幾個(gè)是OPENGL的。不過(guò)極其不爽的是,對(duì)中文的支持性很糟糕。MoSync所提供的UI系統(tǒng)壓根沒(méi)考慮對(duì)中文的支持,有國(guó)人問(wèn)如何顯示中文,MoSync的回復(fù)讓我感到很雷,要制作一個(gè)一個(gè)byte的中文字符字體。難道他們以為漢字是拼音么。
不過(guò)MoSync正在做native ui的相關(guān)工作,不過(guò),恐怕還需要相當(dāng)長(zhǎng)的時(shí)間來(lái)發(fā)展。
虛擬機(jī)
我認(rèn)為虛擬機(jī)其實(shí)是很尷尬的,對(duì)多平臺(tái)的支持遠(yuǎn)不如上文提到的幾個(gè)強(qiáng)悍,編碼過(guò)程中要考慮的也比較多。
J2ME
iPhone壓根不支持。Android則自己搞了套,估計(jì)合理利用設(shè)計(jì)模式,改動(dòng)也不需要太大。Symbian還是對(duì)這個(gè)很友好的,WM6.5要裝虛擬機(jī),WP7未知。
在編碼過(guò)程中,由于J2ME也沒(méi)有為多種設(shè)備提供一個(gè)十分統(tǒng)一的訪(fǎng)問(wèn)方式(如加速度傳感器等),所以需要考慮的事情也比較多。
Silverlight、MonoDroid、 MonoTouch
這個(gè)就壓根談不上跨平臺(tái)了,UI都是要各自寫(xiě)一套,而且后兩者也特別臃腫。
值得一提的是,有個(gè)基于C#的游戲引擎delta engine,可以在PC、WP7、Android及iPhone上跑。
Skyengine
這里介紹一下這個(gè),其實(shí)也是最近斯凱的老大宋濤來(lái)我們天大才聽(tīng)說(shuō)的。之前對(duì)山寨機(jī)一直沒(méi)有關(guān)注過(guò)。
斯凱SDK處理了MTK、展訊、MSTAR平臺(tái)的差異性,封裝了統(tǒng)一、易用、功能強(qiáng)大的API。功能涵蓋了圖形文字處理,聲音,文件IO,網(wǎng)絡(luò)通信等;同時(shí)完美支持THUMB指令,插件機(jī)制,圖形加速等高級(jí)特性。斯凱SDK將使你輕松開(kāi)發(fā)出優(yōu)秀的OTA應(yīng)用。
開(kāi)完會(huì)后過(guò)去聊,說(shuō)已經(jīng)放出Android的來(lái)了,但是后來(lái)在斯凱的網(wǎng)站找也沒(méi)找到。估計(jì)還在內(nèi)部測(cè)試,不過(guò)如果要做山寨機(jī)的平臺(tái)的話(huà),可能用這個(gè)會(huì)速度好多。
小結(jié)
扯這么多,最后也沒(méi)扯出個(gè)真正的Write once,run anywhere的巨無(wú)霸。開(kāi)發(fā)過(guò)程中,應(yīng)該有機(jī)的選擇幾種跨平臺(tái)技術(shù),覆蓋自己所關(guān)注的平臺(tái)。
我們的團(tuán)隊(duì)近期在做一些個(gè)項(xiàng)目,也還在討論跨平臺(tái)的方案。我們還是比較關(guān)注手機(jī)程序的Native特性的。譬如Symbian用戶(hù)更喜歡sis,而不喜歡jar。
總而言之,跨平臺(tái)遠(yuǎn)沒(méi)想象中的那樣靠譜。
引用作品
1. 一塵. 手機(jī)跨平臺(tái)開(kāi)發(fā)五大方案對(duì)比. 博客園. [鏈接] http://www.cnblogs.com/wmj/archive/2010/11/29/1891086.html.
2. InfoQ. Aptana被Appcelerator收購(gòu). [鏈接] http://www.infoq.com/cn/news/2011/01/aptana-appcelerator.
3. 跨平臺(tái)開(kāi)發(fā):初探PhoneGap移動(dòng)開(kāi)發(fā)框架. [鏈接] http://mobile.51cto.com/Android-229213.htm.
4. liuhuigx. MoSync: 跨多平臺(tái)Android, j2me, Symbian, wm的開(kāi)發(fā)工具。. [鏈接] http://www.iteye.com/topic/600808.
作者:馬昊伯
個(gè)人網(wǎng)站: http://loning.wiisio.com/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,否則保留追究法律責(zé)任的權(quán)利。
it知識(shí)庫(kù):手機(jī)跨平臺(tái)方案介紹,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。