邁步進入跨平臺開發時代
跨平臺開發的說法由來已久,但卻從未像今天這樣被各大廠商所重視。Google、Facebook、英特爾、微軟相繼推出重大舉措,支援和推動App開發商開發相容Android、iOS、Windows Phone等平臺的應用。而面對語言眾多、平臺眾多、終端適配和開發成本高昂等問題時,App開發商自身也迫切希望能具備跨平臺開發的能力,以期達到降低開發成本、縮短開發週期、增多商業收益的目的。跨平臺開發時代已經來臨,你做好準備了嗎?
流行的跨平臺開發工具
在過去的一年,業內湧現出了一大批優秀的跨平臺開發工具,大致上主要分為三類:Web應用、Native應用、混合應用。
自適應網頁設計(也稱“響應式網頁設計”,如圖1所示),是一種時下比較流行的網頁設計技術,也算是一種線上Web應用。該設計使得網頁可根據訪問裝置的特點以不同的風格樣式進行展現。也就是說,可以讓一個網站在手機上開啟後,展現得像個本地應用一樣,只要使用者在手機瀏覽器上輸入網址就可以使用該“應用”的功能。這節省了開發App的成本,也不必為了在各個應用商店上更新發布App而煩惱——只要網站更新了,使用者的“App”就會隨之更新。時下比較流行的此類框架有:Bootstrap、Pure、Foundation、Ink、Skeleton、ChocolateChip-UI等。
PhoneGap是一個推出時間相對較早的開源免費的跨平臺移動App開發框架,一直以來都受到大量開發者的喜愛,從iOS、Android、Windows Phone到Amazon、Firefox OS等各大小主流移動平臺一應俱全,而且也能使用地理位置、加速器、聯絡人等智慧手機常見的核心功能。PhoneGap框架主要使用的還是基本的Web開發技術(HTML、JavaScript、CSS),所以它在各平臺上具有優越的相容性,熟悉網頁開發的開發者能低成本地快速開發跨平臺應用。應用的效能在經過分別優化後也大多可以接受。
Hybrid(混合)模式應用開發,其實質上就是一種中介軟體機制的應用程式框架,有人形容它是“Native搭臺,HTML5唱戲”,近來受到了大量開發團隊的追捧,成為一種主流開發模式。Titanium、AppCan、ionicFramework等都是其中的佼佼者,尤其AppCan作為國產貨,因為有較強的本地化文件和技術支援,被大量國內開發者關注。Web前端開發工程師幾乎可以零成本介入,快速做出漂亮的UI並滿足大部分跨平臺需求。無論是在什麼系統下,混合應用可以實現幾乎完全相同的互動體驗。
Xamarin,雖然我們可以通過組織多個團隊或僱用全棧程式設計師的方式,針對各個平臺使用原生語言和開發工具分別開發出同一應用的Native版本,實現跨平臺,但這個做法顯然成本過高,而且應用程式生命週期也很難控制。Xamarin則可以通過一種程式語言搞定所有平臺的Native App開發,這個語言就是C#。時下依然有很多人把C#語言跟.NET做等同認知,認為C#只能編寫.NET應用程式,而且只能在微軟的平臺上跑,這是一種非常錯誤的觀點。C#是一種優秀的計算機程式語言,支援.NET、Mono,但也可以編寫非託管應用,甚至是作業系統。Xamarin是開源專案Mono的商業化運作公司,它的跨平臺開發工具名也叫Xamarin。Xamarin可以使用C#呼叫各個平臺系統的原生UI和底層API,可以極高程度地保證應用效能和UI流暢性。用Xamarin開發跨平臺應用程式,可以方便地使用C#語言的很多先進特性和第三方類庫,例如LINQ、Lambdas、XDocument、事件與委託、並行運算、JSON.NET等。在商業版訂閱下,還可使用Visual Studio開發,當然也可以使用TFS讓團隊協作更便捷。需要注意的是,時下最流行的遊戲引擎Unity也是主要用C#開發的。
LiveCode是一種相對比較特殊的跨平臺開發工具,它使用了近乎人類語言的方式開發應用程式,使得開發簡單應用時的效率大幅增加,而且相當親民。其客戶也不乏類似大型航空公司等極重量級的企業。
跨平臺開發工具的對比
Web應用可以完全由Web前端工程師開發,只要智慧裝置連上網路並安裝了合適的瀏覽器就可以通過URL訪問“應用”,而Web工程師只要更新伺服器上的檔案,就可以實現對此“應用”的更新,無論時間成本還是維護成本都非常低廉。但恰恰是Web應用的優點導致了它的如下缺點。
1. Web應用必須連線訪問,在網路條件不好的情況下啟動速度會極慢。而且每次啟動都會因為網路訪問和UI資源(比如圖片)的下載,造成使用者手機流量的浪費,這在2G網路條件下就會尤其明顯。優化不好的話,還可能造成使用者手機欠費停機。
2. 各平臺下的瀏覽器多種多樣,頁面渲染效果和JavaScrip的執行效率有較大差異,要想保證UI一致性,需要做大量CSS Hack和JavaScript程式碼優化工作,但很多情況下你的優化不一定起到正面作用。
幾乎無法使用裝置本地的API,尤其是底層API,這使得Web應用的能力十分有限。
Hybrid(混合)應用開發模式,兼顧了Web和Native。既有Web應用的低開發成本和跨平臺相同UI互動的優點,又可以通過JavaScript訪問常見的Native API,還可以利用HTML5的Local Storage技術在本地離線存取資料。但既然稱之為混合應用,就無法逃避混合技術的缺點。
1. Web頁面的渲染受限於CSS,雖然可以到達各種裝置幾乎相同的UI互動,但喪失了平臺預設的互動習慣,與Native App形成體驗差別,增加了單平臺使用者的學習成本,降低了平臺應用認同感。
各種智慧手機平臺對其內建的瀏覽器核心大多做過一些定製化“改進”,對於一些事件處理存在差異,尤其是Android系統,在全球有幾千款不同的裝置,再加上作業系統版本的差別,Web App很難做到真正意義上的跨平臺。
2. 雖然是混合應用,但應用介面依然沒有脫離瀏覽器,所以混合應用依然無法達到Native App的效能和流暢性。
3. 對非穩定網路的執行環境難以細化控制,複雜條件下使用者體驗可能極差。
4. 在記憶體管理方面近乎無能,常會因此造成應用崩潰。
5. 受JavaScript語言的限制,一些相對底層的功能實現難度明顯增加。
Xamarin可以通過C#這一種語言編寫主流平臺的真正Native App,其通過強大的編譯器平衡了應用開發效率和應用執行效率,尤其是對使用C#開發的程式設計師而言,是莫大誘惑。Google、蘋果、微軟三大巨頭與其都有深層合作關係,這使得Xamarin總能在第一時間推出新平臺的SDK。以iOS7為例,iOS7釋出當天下午,Xamarin就跟進發布了iOS7 SDK的正式版,這使得App開發商幾乎可以零滯後地跟進新系統平臺的App開發。在北美市場,Xamarin開發工具已經非常火熱。當然,Xamarin目前也存在不少缺點。
1. 相對於HTML、CSS、JavaScript而言,C#的學習成本偏高,無法使無程式設計經驗者達到幾天入門的程度。
2. iOS的應用開發雖然可以在Windows上做,但除錯過程依然無法脫離Mac系統,團隊內至少要有一臺Mac系統的機器作為Build Host。
3. 對於iOS、Android、Windows Phone系統平臺分別做UI時,尚未推出統一的視覺化設計工具。不過慶幸的是,目前Xamarin內部已開發了測試版,相信不久便可以正式公開發布。
4. 對中國個人開發者而言,商業授權版本價格有些偏高,難以大規模普及推廣。
5. 中文資料偏少,尚需官方和社群共同參與完善。
跨平臺開發工具選型
前面對主流跨平臺開發方案做了一些對比,大家應該有了一些基本概念,那麼,如何選擇最適合自己的跨平臺開發工具,則成為了一個不小的難題。這裡我根據自己的經驗給出一些建議,供大家參考。
1. 選擇開發工具就像娶媳婦兒,不要選擇最好的,要選最合適的。
2. 如果開發團隊成員完全沒有App開發經驗,客戶應用場景也不會受到網路影響,功能主要是資料的增刪改查,不需要平臺本地API,那麼Web App是個不錯的選擇,尤其是響應式設計,客戶接受度會比較高,尤其是企業應用的客戶。
3. 如果需要使用少量平臺本地API,對應用程式也沒有較為嚴苛的效能要求,Hybrid應用絕對是最佳選擇,因為它的價效比極高。
4. 當碰到Web效能瓶頸無法逾越;希望使用完善的應用程式生命週期;希望縮減Native App開發團隊成本;希望使用一種開發語言,卻還希望使用各平臺下特有的第三方類庫時,Xamarin是個不錯的選擇。雖然看起來授權價格不低,但從總體成本來看,節省了不少。
5. 微軟在最近的Build大會上將WinJS開源了,並且承諾將會支援iOS、Android等平臺。一旦目標達成,這也是一種不錯的選擇,尤其是對苦逼的Windows Phone開發者們而言。
6. LiveCode從某種程度上來說,更應該算是一種親民的程式語言,期望讓所有人都能輕鬆開發一個App,但作為一種解釋性語言,是否能被專業開發者接受是個值得探討的問題。
結束語
跨平臺開發即將成為主流趨勢,作為開發商或開發者,具備跨平臺開發能力成為必需。想一想,就連過去最不願意提及跨平臺和開源的微軟都敞開胸懷,擁抱跨平臺,並且開源和免費了,我們還有什麼理由原地踏步,固步自封呢?行動起來,一起邁步進入跨平臺開發時代!
本文來自《程式設計師》雜誌電子刊2014年05期。
相關文章
- 跟上腳步,進入後臺執行新時代
- [Flutter翻譯]Flutter時代的多平臺VS跨平臺Flutter
- 在 WSL Ubuntu 上使用 .NET 進行跨平臺開發新手入門Ubuntu
- 科技發展促進時代進步
- 大前端時代,淺談JavaScript開發重型跨平臺應用以及架構前端JavaScript架構
- 移動開發的跨平臺技術演進移動開發
- 獨佔時代或將結束,跨平臺時代即將到來?
- 跨平臺開發框架的大旗框架
- QT6跨平臺開發QT
- 跨平臺開發框架 Lynx 初探框架
- 華熙國際邁入雙引擎發展新時代
- 移動跨平臺開發深度解析
- 00-跨平臺開發之FlutterFlutter
- 跨平臺開發Flutter初體驗Flutter
- APP跨平臺開發技術分析APP
- 跨平臺開發技術簡介!
- 跨平臺技術演進
- 企業要邁入數字化時代
- 訊飛翻譯機搶鏡背後,跨語種溝通邁入全新時代
- Flutter 基礎(一)移動開發的跨平臺技術演進Flutter移動開發
- 使用c++開發跨平臺的程式C++
- 時代在進步,我們也要跟著進步
- .Net Core與跨平臺時區
- 移動端跨平臺開發的深度解析
- 跨平臺.NET IDE整合開發:JetBrains Rider for macIDEAIMac
- flutter跨平臺開發之App升級方案FlutterAPP
- 小程式跨平臺開發解決方案探索
- 跨平臺介面開發除了QT還有啥QT
- JetBrains Rider for mac(跨平臺.NET IDE整合開發)AIIDEMac
- 函式計算: 讓小程式開發進入 Serverless 時代函式Server
- SAAS平臺每日開發進度
- 這一平臺橫空出世,國產快速開發時代全面開啟
- 短影片平臺開發時那些容易掉進去的“深坑”
- 訊飛聽見SaaS服務邁入全新時代
- 存量時代下 用低程式碼開發平臺提升你的CEM
- 基於低程式碼開發平臺打造新時代OA系統
- 淺談 2018 移動端跨平臺開發方案
- Flutter嚐鮮:跨平臺移動應用開發Flutter
- 跨平臺程式設計開發工具:Xojo 2023 for Mac程式設計Mac