跨平臺(tái)開發(fā)的說法由來已久,但卻從未像今天這樣被各大廠商所重視。Google、Facebook、英特爾、微軟相繼推出重大舉措,支持和推動(dòng)App開發(fā)商開發(fā)兼容Android、iOS、Windows Phone等平臺(tái)的應(yīng)用。而面對(duì)語言眾多、平臺(tái)眾多、終端適配和開發(fā)成本高昂等問題時(shí),App開發(fā)商自身也迫切希望能具備跨平臺(tái)開發(fā)的能力,以期達(dá)到降低開發(fā)成本、縮短開發(fā)周期、增多商業(yè)收益的目的??缙脚_(tái)開發(fā)時(shí)代已經(jīng)來臨,你做好準(zhǔn)備了嗎?

  流行的跨平臺(tái)開發(fā)工具

  在過去的一年,業(yè)內(nèi)涌現(xiàn)出了一大批優(yōu)秀的跨平臺(tái)開發(fā)工具,大致上主要分為三類:Web應(yīng)用、Native應(yīng)用、混合應(yīng)用。

  自適應(yīng)網(wǎng)頁設(shè)計(jì)(也稱“響應(yīng)式網(wǎng)頁設(shè)計(jì)”,如圖1所示),是一種時(shí)下比較流行的網(wǎng)頁設(shè)計(jì)技術(shù),也算是一種在線Web應(yīng)用。該設(shè)計(jì)使得網(wǎng)頁可根據(jù)訪問設(shè)備的特點(diǎn)以不同的風(fēng)格樣式進(jìn)行展現(xiàn)。也就是說,可以讓一個(gè)網(wǎng)站在手機(jī)上打開后,展現(xiàn)得像個(gè)本地應(yīng)用一樣,只要用戶在手機(jī)瀏覽器上輸入網(wǎng)址就可以使用該“應(yīng)用”的功能。這節(jié)省了開發(fā)App的成本,也不必為了在各個(gè)應(yīng)用商店上更新發(fā)布App而煩惱——只要網(wǎng)站更新了,用戶的“App”就會(huì)隨之更新。時(shí)下比較流行的此類框架有:Bootstrap、Pure、Foundation、Ink、Skeleton、ChocolateChip-UI等。

圖1  自適應(yīng)網(wǎng)頁設(shè)計(jì)使得網(wǎng)頁可以根據(jù)訪問設(shè)備的特點(diǎn)以不同風(fēng)格展現(xiàn)

  PhoneGap是一個(gè)推出時(shí)間相對(duì)較早的開源免費(fèi)的跨平臺(tái)移動(dòng)App開發(fā)框架,一直以來都受到大量開發(fā)者的喜愛,從iOS、Android、Windows Phone到Amazon、Firefox OS等各大小主流移動(dòng)平臺(tái)一應(yīng)俱全,而且也能使用地理位置、加速器、聯(lián)系人等智能手機(jī)常見的核心功能。PhoneGap框架主要使用的還是基本的Web開發(fā)技術(shù)(HTML、JavaScript、CSS),所以它在各平臺(tái)上具有優(yōu)越的兼容性,熟悉網(wǎng)頁開發(fā)的開發(fā)者能低成本地快速開發(fā)跨平臺(tái)應(yīng)用。應(yīng)用的性能在經(jīng)過分別優(yōu)化后也大多可以接受。

  Hybrid(混合)模式應(yīng)用開發(fā),其實(shí)質(zhì)上就是一種中間件機(jī)制的應(yīng)用程序框架,有人形容它是“Native搭臺(tái),HTML5唱戲”,近來受到了大量開發(fā)團(tuán)隊(duì)的追捧,成為一種主流開發(fā)模式。Titanium、AppCan、ionicFramework等都是其中的佼佼者,尤其AppCan作為國產(chǎn)貨,因?yàn)橛休^強(qiáng)的本地化文檔和技術(shù)支持,被大量國內(nèi)開發(fā)者關(guān)注。Web前端開發(fā)工程師幾乎可以零成本介入,快速做出漂亮的UI并滿足大部分跨平臺(tái)需求。無論是在什么系統(tǒng)下,混合應(yīng)用可以實(shí)現(xiàn)幾乎完全相同的交互體驗(yàn)。

  Xamarin,雖然我們可以通過組織多個(gè)團(tuán)隊(duì)或雇用全棧程序員的方式,針對(duì)各個(gè)平臺(tái)使用原生語言和開發(fā)工具分別開發(fā)出同一應(yīng)用的Native版本,實(shí)現(xiàn)跨平臺(tái),但這個(gè)做法顯然成本過高,而且應(yīng)用程序生命周期也很難控制。Xamarin則可以通過一種編程語言搞定所有平臺(tái)的Native App開發(fā),這個(gè)語言就是C#。時(shí)下依然有很多人把C#語言跟.NET做等同認(rèn)知,認(rèn)為C#只能編寫.NET應(yīng)用程序,而且只能在微軟的平臺(tái)上跑,這是一種非常錯(cuò)誤的觀點(diǎn)。C#是一種優(yōu)秀的計(jì)算機(jī)編程語言,支持.NET、Mono,但也可以編寫非托管應(yīng)用,甚至是操作系統(tǒng)。Xamarin是開源項(xiàng)目Mono的商業(yè)化運(yùn)作公司,它的跨平臺(tái)開發(fā)工具名也叫Xamarin。Xamarin可以使用C#調(diào)用各個(gè)平臺(tái)系統(tǒng)的原生UI和底層API,可以極高程度地保證應(yīng)用性能和UI流暢性。用Xamarin開發(fā)跨平臺(tái)應(yīng)用程序,可以方便地使用C#語言的很多先進(jìn)特性和第三方類庫,例如LINQ、Lambdas、XDocument、事件與委托、并行運(yùn)算、JSON.NET等。在商業(yè)版訂閱下,還可使用Visual Studio開發(fā),當(dāng)然也可以使用TFS讓團(tuán)隊(duì)協(xié)作更便捷。需要注意的是,時(shí)下最流行的游戲引擎Unity也是主要用C#開發(fā)的。

  LiveCode是一種相對(duì)比較特殊的跨平臺(tái)開發(fā)工具,它使用了近乎人類語言的方式開發(fā)應(yīng)用程序,使得開發(fā)簡單應(yīng)用時(shí)的效率大幅增加,而且相當(dāng)親民。其客戶也不乏類似大型航空公司等極重量級(jí)的企業(yè)。

  跨平臺(tái)開發(fā)工具的對(duì)比

  Web應(yīng)用可以完全由Web前端工程師開發(fā),只要智能設(shè)備連上網(wǎng)絡(luò)并安裝了合適的瀏覽器就可以通過URL訪問“應(yīng)用”,而Web工程師只要更新服務(wù)器上的文件,就可以實(shí)現(xiàn)對(duì)此“應(yīng)用”的更新,無論時(shí)間成本還是維護(hù)成本都非常低廉。但恰恰是Web應(yīng)用的優(yōu)點(diǎn)導(dǎo)致了它的如下缺點(diǎn)。

  1. Web應(yīng)用必須連線訪問,在網(wǎng)絡(luò)條件不好的情況下啟動(dòng)速度會(huì)極慢。而且每次啟動(dòng)都會(huì)因?yàn)榫W(wǎng)絡(luò)訪問和UI資源(比如圖片)的下載,造成用戶手機(jī)流量的浪費(fèi),這在2G網(wǎng)絡(luò)條件下就會(huì)尤其明顯。優(yōu)化不好的話,還可能造成用戶手機(jī)欠費(fèi)停機(jī)。

  2. 各平臺(tái)下的瀏覽器多種多樣,頁面渲染效果和JavaScrip的運(yùn)行效率有較大差異,要想保證UI一致性,需要做大量CSS Hack和JavaScript代碼優(yōu)化工作,但很多情況下你的優(yōu)化不一定起到正面作用。

  幾乎無法使用設(shè)備本地的API,尤其是底層API,這使得Web應(yīng)用的能力十分有限。

  Hybrid(混合)應(yīng)用開發(fā)模式,兼顧了Web和Native。既有Web應(yīng)用的低開發(fā)成本和跨平臺(tái)相同UI交互的優(yōu)點(diǎn),又可以通過JavaScript訪問常見的Native API,還可以利用HTML5的Local Storage技術(shù)在本地離線存取數(shù)據(jù)。但既然稱之為混合應(yīng)用,就無法逃避混合技術(shù)的缺點(diǎn)。

  1. Web頁面的渲染受限于CSS,雖然可以到達(dá)各種設(shè)備幾乎相同的UI交互,但喪失了平臺(tái)默認(rèn)的交互習(xí)慣,與Native App形成體驗(yàn)差別,增加了單平臺(tái)用戶的學(xué)習(xí)成本,降低了平臺(tái)應(yīng)用認(rèn)同感。

  各種智能手機(jī)平臺(tái)對(duì)其內(nèi)置的瀏覽器內(nèi)核大多做過一些定制化“改進(jìn)”,對(duì)于一些事件處理存在差異,尤其是Android系統(tǒng),在全球有幾千款不同的設(shè)備,再加上操作系統(tǒng)版本的差別,Web App很難做到真正意義上的跨平臺(tái)。

  2. 雖然是混合應(yīng)用,但應(yīng)用界面依然沒有脫離瀏覽器,所以混合應(yīng)用依然無法達(dá)到Native App的性能和流暢性。

  3. 對(duì)非穩(wěn)定網(wǎng)絡(luò)的運(yùn)行環(huán)境難以細(xì)化控制,復(fù)雜條件下用戶體驗(yàn)可能極差。

  4. 在內(nèi)存管理方面近乎無能,常會(huì)因此造成應(yīng)用崩潰。

  5. 受JavaScript語言的限制,一些相對(duì)底層的功能實(shí)現(xiàn)難度明顯增加。

  Xamarin可以通過C#這一種語言編寫主流平臺(tái)的真正Native App,其通過強(qiáng)大的編譯器平衡了應(yīng)用開發(fā)效率和應(yīng)用執(zhí)行效率,尤其是對(duì)使用C#開發(fā)的程序員而言,是莫大誘惑。Google、蘋果、微軟三大巨頭與其都有深層合作關(guān)系,這使得Xamarin總能在第一時(shí)間推出新平臺(tái)的SDK。以iOS7為例,iOS7發(fā)布當(dāng)天下午,Xamarin就跟進(jìn)發(fā)布了iOS7 SDK的正式版,這使得App開發(fā)商幾乎可以零滯后地跟進(jìn)新系統(tǒng)平臺(tái)的App開發(fā)。在北美市場,Xamarin開發(fā)工具已經(jīng)非?;馃?。當(dāng)然,Xamarin目前也存在不少缺點(diǎn)。

  1. 相對(duì)于HTML、CSS、JavaScript而言,C#的學(xué)習(xí)成本偏高,無法使無編程經(jīng)驗(yàn)者達(dá)到幾天入門的程度。

  2. iOS的應(yīng)用開發(fā)雖然可以在Windows上做,但調(diào)試過程依然無法脫離Mac系統(tǒng),團(tuán)隊(duì)內(nèi)至少要有一臺(tái)Mac系統(tǒng)的機(jī)器作為Build Host。

  3. 對(duì)于iOS、Android、Windows Phone系統(tǒng)平臺(tái)分別做UI時(shí),尚未推出統(tǒng)一的可視化設(shè)計(jì)工具。不過慶幸的是,目前Xamarin內(nèi)部已開發(fā)了測試版,相信不久便可以正式公開發(fā)布。

  4. 對(duì)中國個(gè)人開發(fā)者而言,商業(yè)授權(quán)版本價(jià)格有些偏高,難以大規(guī)模普及推廣。

  5. 中文資料偏少,尚需官方和社區(qū)共同參與完善。

  跨平臺(tái)開發(fā)工具選型

  前面對(duì)主流跨平臺(tái)開發(fā)方案做了一些對(duì)比,大家應(yīng)該有了一些基本概念,那么,如何選擇最適合自己的跨平臺(tái)開發(fā)工具,則成為了一個(gè)不小的難題。這里我根據(jù)自己的經(jīng)驗(yàn)給出一些建議,供大家參考。

  1. 選擇開發(fā)工具就像娶媳婦兒,不要選擇最好的,要選最合適的。

  2. 如果開發(fā)團(tuán)隊(duì)成員完全沒有App開發(fā)經(jīng)驗(yàn),客戶應(yīng)用場景也不會(huì)受到網(wǎng)絡(luò)影響,功能主要是數(shù)據(jù)的增刪改查,不需要平臺(tái)本地API,那么Web App是個(gè)不錯(cuò)的選擇,尤其是響應(yīng)式設(shè)計(jì),客戶接受度會(huì)比較高,尤其是企業(yè)應(yīng)用的客戶。

  3. 如果需要使用少量平臺(tái)本地API,對(duì)應(yīng)用程序也沒有較為嚴(yán)苛的性能要求,Hybrid應(yīng)用絕對(duì)是最佳選擇,因?yàn)樗男詢r(jià)比極高。

  4. 當(dāng)碰到Web性能瓶頸無法逾越;希望使用完善的應(yīng)用程序生命周期;希望縮減Native App開發(fā)團(tuán)隊(duì)成本;希望使用一種開發(fā)語言,卻還希望使用各平臺(tái)下特有的第三方類庫時(shí),Xamarin是個(gè)不錯(cuò)的選擇。雖然看起來授權(quán)價(jià)格不低,但從總體成本來看,節(jié)省了不少。

  5. 微軟在最近的Build大會(huì)上將WinJS開源了,并且承諾將會(huì)支持iOS、Android等平臺(tái)。一旦目標(biāo)達(dá)成,這也是一種不錯(cuò)的選擇,尤其是對(duì)苦逼的Windows Phone開發(fā)者們而言。

 6. LiveCode從某種程度上來說,更應(yīng)該算是一種親民的編程語言,期望讓所有人都能輕松開發(fā)一個(gè)App,但作為一種解釋性語言,是否能被專業(yè)開發(fā)者接受是個(gè)值得探討的問題。

  結(jié)束語

  跨平臺(tái)開發(fā)即將成為主流趨勢(shì),作為開發(fā)商或開發(fā)者,具備跨平臺(tái)開發(fā)能力成為必需。想一想,就連過去最不愿意提及跨平臺(tái)和開源的微軟都敞開胸懷,擁抱跨平臺(tái),并且開源和免費(fèi)了,我們還有什么理由原地踏步,固步自封呢?行動(dòng)起來,一起邁步進(jìn)入跨平臺(tái)開發(fā)時(shí)代!

  本文來自《程序員》雜志電子刊2014年05期。

  哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無需額外費(fèi)用,即可穩(wěn)步提升排名至首頁。歡迎體驗(yàn)最佳的哈爾濱網(wǎng)站建設(shè)。