移動應用開發(fā)技術選擇六要素

2012-01-19 09:12:38來源:《程序員》作者:李亮

這是一個新的時代、新的機會。自從2007 年1月喬布斯揭開iPhone的面紗以來,移動時代的大潮滾滾向前,已經(jīng)走過近5個年頭。這個產(chǎn)業(yè)正在從新生走向成熟階段。在這樣的產(chǎn)業(yè)時代背景下,各種不同的系統(tǒng)平臺,不同的技術

這是一個新的時代、新的機會。自從2007 年1月喬布斯揭開iPhone的面紗以來,移動時代的大潮滾滾向前,已經(jīng)走過近5個年頭。這個產(chǎn)業(yè)正在從新生走向成熟階段。在這樣的產(chǎn)業(yè)時代背景下,各種不同的系統(tǒng)平臺,不同的技術路線,自然是層出不窮、迅猛發(fā)展。對于每一個投身于移動行業(yè)的軟件開發(fā)者而言,充分地了解和掌握各個平臺的發(fā)展狀態(tài),搞清楚各種開發(fā)技術與方向的優(yōu)劣,是關系到產(chǎn)品與自身發(fā)展的頭等大事。

平臺選擇

從2007年到現(xiàn)在,涌現(xiàn)出了不少面向移動設備的操作系統(tǒng)平臺。先不論原先已存在的Symbian和Windows Mobile系統(tǒng),新的系統(tǒng)就有蘋果的iOS、Google的Android、Palm/HP的WebOS、Nokia的Maemo/MeeGo、三星的bada,以及RIM新的基于QNX的PlayBook Tablet OS。

一個真正占有市場的平臺才能吸引更多開發(fā)者為其開發(fā)更多應用,更多應用又能反過來替平臺爭取更多用戶,從而促進平臺的進一步發(fā)展。正是由于平臺與應用之間相輔相成的關系,使得平臺的選擇成為開發(fā)者首要關注的重點。

對于開發(fā)者而言,一個移動平臺的意義,并不只是一個操作系統(tǒng)而已,它還包括了與之相聯(lián)系的整個生態(tài)環(huán)境。平臺的市場占有率直接決定了應用能夠被多少消費者使用,平臺本身又能帶給開發(fā)者多少回報。這些都是在平臺選擇中必須考慮到的問題。

無疑,iOS和Android是目前占有市場份額最大的兩個平臺。這兩個平臺不但用戶眾多,擁有的開發(fā)者數(shù)量、應用數(shù)量和下載量也都遠遠高于其他平臺。一些數(shù)據(jù)可以反映這種情況: 在今年最新的北美地區(qū)智能手機市場份額調查中,Android及其定制版占有了58.67% 的市場份額,iPhone占有14.67%,Symbian占有14.33%,BlackBerry占有9.2%,bada占有3.33%,而Windows Phone僅占有1.67%的份額

作為一個平臺,iOS有以下幾大特點:第一,iOS是一個相當一致的系統(tǒng)。目前蘋果僅有三種運行iOS的設備:iPhone、iPad和Apple TV。從API方面來說,這三種設備的不同代產(chǎn)品各自的設備屬性都相當固定,而各自的操作系統(tǒng)版本也都保持一致,這對開發(fā)者來說是一件極其方便的事情;第二,iOS系統(tǒng)本身具備了相當良好的,內建流暢的用戶交互實現(xiàn)。就算是一個照著教科書中規(guī)中矩寫出來的iOS程序,其用戶體驗也會不會差;第三,蘋果提供了一個非常良好的iOS程序開發(fā)環(huán)境。只有很少的功能是模擬器無法模擬而必須在真機上進行調試測試的;最后,蘋果本身的品牌也是一個相當有影響力的支持。

\

另一個主要的平臺就是Android。得益于Google對Android的開放(不向廠商收取授權費), 以及大大小小各種廠商的機海戰(zhàn)術,Android手機的占有量已經(jīng)是第一位了。因此,選擇了Android平臺就意味著選擇了最大的用戶群體。另外,Android本身源碼的開放性,對于一些需要利用底層實現(xiàn)細節(jié)的開發(fā)者來說,是個很好的特性。而且從開發(fā)本身來說,Android 所采用的開發(fā)語言和環(huán)境, 相對來說比iOS 的門檻要低,這是它的優(yōu)勢所在。但也正是因為Android的開放,造成了市場上Android設備的規(guī)格特性各不相同,增加了應用開發(fā)中機型適配所帶來的大量開發(fā)和測試工作。

除了iOS和Android這兩大巨頭之外,Microsoft的Windows Phone 7從去年開始也大張旗鼓地開始發(fā)力。在WP7平臺上,Microsoft仍然扮演著系統(tǒng)提供商的角色, 硬件生產(chǎn)仍然是各個廠商的事。但Microsoft為了保證用戶體驗的一致性,對設備的指標作了非常嚴格的規(guī)定。因此,目前WP7還沒有機型適配的問題。在新的移動市場上,Microsoft顯然來晚了一步, 成為占有比較小的市場份額的競爭者,這一點遠遠比不上iOS和Android。 另外,WP7提供了專有的Metro UI界面形式,展現(xiàn)了跟iOS和Android都截然不同的風貌,這對其是有益的。從開發(fā)本身來說,Microsoft為WP7開發(fā)者提供的工具有比較大的限制。除了 Silverlight和XNA之外就沒有別的支持了。很多非Web Based的、非游戲類應用無法在現(xiàn)有的平臺上進行開發(fā)。這不能不說是一個弱點。

三者之外,除了BlackBerry在北美地區(qū)的占有率較高以外,別的平臺都只占有少少的一點份額。BlackBerry的系統(tǒng),已是一個落后整個產(chǎn)業(yè)十余年的東西,BlackBerry賴以生存的基礎是集成到系統(tǒng)中的push mail機制,而不是它的系統(tǒng)本身是先進還是落后。Symbian則是連Nokia自己都放棄的東西,不會對現(xiàn)在的開發(fā)者有多大的吸引力。webOS生不逢時,空有良好的用戶體驗和很有特色的開發(fā)方式,卻最終被HP所拋棄。三星的bada則仿佛是其自身的一畝三分地,只在wave系列中推出。

從市場占有率來看, 開發(fā)者首選的平臺無疑是iOS和Android了。除了已占有的市場份額,以及目前所能看到的發(fā)展前景之外, 對開發(fā)者來說,還有一點非常重要:這個平臺對開發(fā)者的回報如何,對于開發(fā)者的支持如何。在這一點上目前蘋果比Google做得好。各種調查統(tǒng)計數(shù)據(jù)表明,在iOS平臺上的開發(fā)者收入要高于Android平臺。另外,蘋果對從設備到應用的嚴格控制雖然為人詬病,但也無可非議地為應用開發(fā)者創(chuàng)建了一個單一而良好的環(huán)境。反過來,Google的開放政策變成了不管不問政策,由于沒有審查機制,導致Android Market里有很多質量低劣的應用,甚至是惡意應用。官方的Android Market尚且如此,各種第三方的商店市場就更不用說了。

當然,在做平臺選擇時,可能還會有一些其他因素存在。比如在iOS上,應用無法讀取用戶的短信記錄,也不能在不通知用戶的情況下發(fā)送短信或者撥打電話。對于有這樣需求的應用(我們姑且先不談是否惡意或者侵犯隱私)就只能在Android上開發(fā)了。因此,對于平臺的選擇,市場占有量、生態(tài)環(huán)境的優(yōu)劣、以及平臺是否能提供所需要的具體功是幾個比較重要的考慮因素。

技術路線的選擇

操作系統(tǒng)

首先考慮的是操作系統(tǒng)。操作系統(tǒng)是開發(fā)應用的基礎,操作系統(tǒng)的能力提供也限制了開發(fā)的應用程序的能力。其實,在選擇平臺的部分,我們已考慮到了操作系統(tǒng)。因為現(xiàn)在的平臺本身,就是以設備,運行在其上的操作系統(tǒng), 以及圍繞著應用開發(fā)和用戶建立起來的一個生態(tài)環(huán)境組成的。在設備廠商的設備差異努力被操作系統(tǒng)隱藏起來,運營商慢慢淪為純粹的數(shù)據(jù)帶寬提供商的今天,我們通常都已經(jīng)直接把操作系統(tǒng)的名稱用作平臺的名稱了。不過,在選擇平臺時,我們會更多地考慮到宏觀因素,而做具體的技術選擇時,就要多考慮一些具體的技術因素。

系統(tǒng)是否支持多任務。支持多任務意味著可以編寫運行在后臺的服務程序,可以在不干擾或者不通知用戶的情況下做一些工作。目前,iOS系統(tǒng)只支持一些有限的多任務,而Android則對此不加限制。所以,如果有很強烈的多任務需求的應用, Android會是一個更好的選擇。

操作系統(tǒng)本身對應用能做的事情有什么樣的限制。相對來說,iOS對應用的限制較大,應用程序運行在一個單獨的沙盒中,不能讀寫任何其他應用的數(shù)據(jù),只能訪問很少一部分系統(tǒng)允許應用訪問的數(shù)據(jù)。而Android限制較少,絕大部分系統(tǒng)數(shù)據(jù)都能訪問。

安全性和隱私。應用能訪問的系統(tǒng)數(shù)據(jù)越多,所能獲得的用戶信息也就越多,用戶的隱私和數(shù)據(jù)安全就越難以得到保障。從這個角度看,iOS 顯然更優(yōu)勢。

使用同一系統(tǒng)的不同設備之間的差異。這是一個跟操作系統(tǒng)和具體設備都相關的重要因素是。差異越大,應用開發(fā)中需要對不同設備作不同處理的地方就越多。iOS一致的設備指標使開發(fā)者不用在這方面花什么心思。反觀Android,設備的差異非常大,從屏幕分辨率大小到有無鍵盤,從電阻屏還是電容屏到有沒有浮點處理器,每一款都有其自身特色和不同之處。這樣就使得應用開發(fā)者需要對大部分不同的設備都作測試才能發(fā)布到市場上,很多時候還需要針對不同的設備編寫不同代碼。說得再遠一些,那些基于Android開放的源代碼修改出來的系統(tǒng),往往會給開發(fā)者造成很大的困擾。

\
平臺之爭仍在繼續(xù),期待新平臺的崛起

設備能力

在技術路線選擇中,設備本身的能力也是重要因素。設備本身的能力包括了設備自身的計算能力,即CPU的性能,以及是否具有浮點處理器等;圖形能力,是否具有圖形處理器加速、GPU是否支持OpenGL、支持哪個版本等。這些功能對于計算密集型和圖形密集型的應用,比如3D游戲, 是極端重要的。從更細節(jié)的角度來講,CPU支持什么樣的指令集,對于比如視頻解碼這樣的應用來說,都是十分重要的因素。設備本身的能力還包括交互部分,即屏幕大小、分辨率、是否具有硬鍵盤等。屏幕大小直接決定了屏幕上能顯示能操作內容的多少。一個為手機設計的UI在平板上會顯得很丑陋,而一個為Galaxy Note設計的UI在QVGA上根本都沒法看。而硬鍵盤的存在與否,不但跟系統(tǒng)本身相關,跟應用程序本身也相關。在一個有硬鍵盤的手機上,就有更多空間來顯示內。而Android下的輸入法,對硬鍵盤的輸入處理跟屏幕軟鍵盤的處理就完全不同。移動設備上所附帶的各種傳感器或數(shù)據(jù)采集設備,也是跟應用的技術路線息息相關的。目前很多應用都依賴于GPS、攝像頭這些附件。

云端

云端,即服務器端。在這個移動+互聯(lián)的時代里,完全脫離云端的應用越來越少,而社交網(wǎng)絡的興起加上移動對社交的天然親和性,使移動應用對服務器端的依賴度更高了。從跟服務器端的交互來看,需要考慮的技術有四個方面。首先,需要云端提供什么樣的服務。這是最基本的一點,無須多說。其次,移動端以什么樣的方式從云端取得數(shù)據(jù)并數(shù)據(jù)發(fā)送到云端。是采用通用的協(xié)議還是私有協(xié)議,數(shù)據(jù)是否需要加密等問題。再次,移動端與云端之間的通信需要多少帶寬。是否在現(xiàn)有的2G/3G網(wǎng)絡條件下能夠得到滿足,抑或必須使用Wi-Fi。移動端與云端之間的通信是必須長時間保持還是可以斷續(xù)進行。移動應用的網(wǎng)絡環(huán)境會比桌面復雜得多,網(wǎng)絡帶寬會比較快而頻繁,并且會經(jīng)常在有網(wǎng)絡連接與無網(wǎng)絡連接的情況下轉換。最后,還需要考慮一個問題是自己搭建服務端還是直接利用現(xiàn)有的公開服務。自己搭建服務端能夠更好地與自己的移動應用進行配合,能夠自行定義把哪些計算放到服務端進行,但需要在服務端的軟硬件上投入與維護。而利用現(xiàn)有的服務則比較省事,代價是移動端需要做更多的工作,有些功能會難以做到。

原生應用還是Web應用

大部分面向互聯(lián)網(wǎng)服務的移動應用都會面臨這樣一個問題:是開發(fā)一個移動設備上的原生應用,還是直接開發(fā)一個適應于移動設備上瀏覽器的 Web 應用?這兩種形式各有利弊。原生應用的優(yōu)勢在于能夠充分利用設備的能力,達到比較好的表現(xiàn)效果和更加平滑的用戶體驗。有一些能力是Web應用所無法做到的,比如需要用到加速度測量儀的應用,需要用到攝像頭的應用,這些只有原生應用才能做到。另外,原生應用的好處在于即使沒有網(wǎng)絡連接,很多本地功能都可以繼續(xù)使用,而在有網(wǎng)絡連接的情況下,把一部分功能由原生應用來實現(xiàn),還能大大節(jié)省流量,并提高應用程序的響應速度。

Web應用的優(yōu)勢在于,開發(fā)者不需要具備專門的移動平臺開發(fā)知識,并且能夠隨時對問題進行修正和發(fā)布新版本,能夠更快地讓用戶體驗更新,符合目前流行的先發(fā)布再慢慢改的風氣。這兩者中,一方的優(yōu)勢恰恰就是另一方的劣勢。針對不同類型的應用程序以及開發(fā)人員的具體狀況, 需要有具體的判斷。這兩者的優(yōu)缺點都同樣明顯,因此將長期共存下去,共同繁榮,不存在一方消滅另一方的可能。

跨平臺

隨著各種不同的系統(tǒng)出現(xiàn),也出現(xiàn)了不少立足于跨平臺的解決方案。本來在PC上最強大的跨平臺方案Flash在被蘋果拒之門外后,由于其本身在移動平臺上性能和電池消耗方面的不足,最后退出了市場。但新興的以HTML 5為口號的新一代跨平臺方案紛紛出現(xiàn),其中最著名的是PhoneGap。這類以HTML 5為旗幟的跨平臺方案內容都很類似:開發(fā)者利用HTML 5/CSS/JavaScript編寫應用,編寫的應用經(jīng)過本地的一個定制過的瀏覽器中間層運行。這些應用都還是原生應用而非Web應用, 只不過以開發(fā)Web應用的形式進行開發(fā)而已。這樣的框架,通過對本地瀏覽器框架的定制,將設備的特殊能力封裝成能夠被JavaScript訪問的系統(tǒng)對象,從而能夠充分利設備的能力。這樣的跨平臺方案有很明顯的優(yōu)勢:開發(fā)一套東西運行于各個移動平臺,平臺間的差異由框架解決;不需要學習各平臺各自的語言和API,只需要會用HTML 5/CSS/JavaScript開發(fā)即可,降低了開發(fā)成本。

不過,我們也能很清楚地看到它的劣勢:中間的運行適配層有相當大的運行開銷,性能與原生代碼相比有較大損失;因為需要帶入定制的瀏覽器框架, 最終生成的獨立應用體積相對比較大, 需要使用更多的資源。20世紀80年代以來,無數(shù)人有著跨平臺夢想,從桌面到服務器到移動設備,都希望一套東西包打天下?上У浆F(xiàn)在這還只是美好的愿望而已。我個人認為,這世上沒有一統(tǒng)江湖的可能,跨平臺對于一些應用或者對于某些開發(fā)者來說是個利器,但它并不能成為統(tǒng)治者。

李亮,程序員,iCosta for iPhone以及Rockplayer for Android的主力開發(fā)者之一。有20余年軟件開發(fā)經(jīng)驗,從嵌入式系統(tǒng)到企業(yè)級開發(fā)均有研究。目前致力于移動計算與云計算方向。

贊助商鏈接: