移動跨平臺混合開發的總結

經常看到大家在一些技術羣熱火朝天的爭論跨平臺技術的牛逼之處,其實是毫無意義的,尺有所短寸有所長,每個技術各司其職,沒有好壞之分。爭論有何意義?我們倒不如來研究一下,這個跨平臺技術適不適用以及性能和穩定性等方面的做個比較。

1

爲什麼需要跨平臺?

在移動端剛出來那會兒,Android、iOS都是各自爲營,分開開發的,團隊之間是獨立的,從需求調研,研發,測試,上線一整套流程需要的週期很長,少則幾個月,多達1年甚至更長。隨着移動端的逐漸普及,移動端開發的市場也越來越大,互聯網公司越來越多,爭搶互聯網蛋糕的人越來越多,各互聯網公司之間的競爭越來越激烈,如何快速把好的想法推出去佔有市場纔是當前需要考慮的問題,在這樣的形勢下,爲了適應市場的需求,減少成本開銷,縮短開發週期,提高效率這些問題逐漸的被各公司關注。順應市場變化的跨平臺框架正好迎合了公司的需求,一拍即合,於是各種跨平臺框架如雨後春筍般的在互聯網公司開始普及開來。

2

跨平臺框架的發展歷史

俗話說:“讀史使人明志",我想大家很有必要了解一下跨平臺框架(工具)發展歷史。爲了搞清楚跨平臺技術,我查證了許多資料,我在這裏畫了一張價值100w的跨平臺框架的發展歷史圖,如下圖所示。圖中很清晰明瞭的概括了跨平臺框架的一個發展歷程。

根據跨平臺的框架(工具)功能,我把跨平臺框架(工具)主要分爲3大類,分別是:Web App網頁、Hybrid框架、含有編譯轉換的框架。

Web App網頁

在智能機還沒有出來之前,其實就有適用於手機端的網頁了。Web App其實不算是嚴格意義上的App,我覺得應該把它稱作網頁端自適應移動版更合適。那時候網頁一般是wap開頭的,比如wap.xxx.com。後來有了3g網絡之後,升級爲3g開頭的,比如3g.xxx.com,還有一種是以m開頭的,比如m.xxx.com。我當年就用過諾基亞手機登陸騰訊家園逛QQ空間偷菜,現在手機騰訊網https://wap.3g.qq.com/還存在,其他的Web App,比如淘寶網手機版https://h5.m.taobao.com/ 就是一個Web App的案例,還有新浪網,網易新聞等都有自己的Web App站點。

採取這樣的一種策略的優勢:入門門檻低,只需要會HTML5、CSS3、JS前端語言就可以開發Web App了,開發成本低,內容更新也很方便,Web App無需安裝,可以在不同系統、不同平臺和設備上運行。

Web App缺點:用戶體驗比不上原生那麼流暢,性能上比不上原生;有一些功能受瀏覽器、系統以及平臺本身限制不好實現,比如系統級別的彈窗、傳感器、手機聯繫人等都只能靠原生去實現(也不排除有些框架可以做到,比如:小程序可以通過自己引擎可以騰訊的瀏覽器內核引擎操作手機硬件)。

隨着技術的發展,Web App已經是百花齊放,性能和原生效果方面都有很大的改善,新興的Web App代表性的框架有:PWA、小程序等。

PWA: 全稱是Progressive Web App,翻譯成中文意思是:漸進式網絡應用程序。它是 Google 公司於2015 年提出的,2016 年 6 月才推廣的項目。

PWA優勢:PWA可以將App的快捷方式放置在桌面上,全屏運行,體驗上與原生幾乎一致,支持有網和斷網時使用。PWA不包含原生OS相關代碼。

PWA缺點:PWA仍然是網站,只是在緩存、通知、後臺功能等方面表現的更好。

PWA是Google主推的一項技術標準,FireFox,Chrome以及一些基於Blink的瀏覽器已經支持漸進式Web應用了,Edge上對漸進式Web應用的支持正在開發中,Apple公司也表示在Safari瀏覽器上支持PWA。國外互聯網公司Twitter和Flipboard都推出了PWA的項目。由於網絡環境因素以及小程序的競爭等原因,目前國內PWA的使用率幾乎爲零。

小程序:是一種無需下載安裝即可使用的應用,只需要掃一掃或打開微信搜一下即可打開應用。2016年9月21日,微信小程序正式開啓內測。

小程序的優勢:小程序開發門檻相對較低,難度比開發App小,能夠滿足需求的簡單的基礎應用。小程序能夠實現消息通知、線下掃碼、公衆號關聯等七大功能。通過公衆號關聯,用戶可以實現公衆號與小程序之間相互跳轉。由於無需下載App,小程序推廣起來更方便。

小程序的缺點:小程序是依附於微信的,所以很多功能侷限於微信團隊提供的API,你不好擴展功能。另外小程序不適合開發交互複雜、需求多樣的應用,只能考慮原生開發。

Hybrid框架

Hybrid App,其實就是原生應用和Web應用相結合,一般做法就是項目中的某一部分是原生界面,一部分是Web頁面,通過原生平臺的WebView去調用Web頁面。這種類似的開發模式就需要原生開發人員和前端開發人員密切配合(有些公司資源緊缺由單人負責這個項目)。    

由於原生WebView存在一定的侷限性,和Web交互起來有些問題不好處理,於是出現了一些基於原生WebView封裝的Hybrid框架,這些框架有一個共同特點:封裝了移動端設備(這裏指Android、iOS)上最常用的本地API調用,然後以統一的Javascript API形式提供給Web開發者調用。這樣一來原生不能解決的問題可以用Web去處理,同時你也可以自己封裝原生API,做成一些插件使用。  

比較熱門的Hybrid框架有Ionic、Cordova、DCloud:

Ionic: Ionic是一款開源的跨平臺,可用於開發移動端的開發框架。框架的核心是從Web的角度去開發手機應用,框架是基於PhoneGap編譯平臺。Ionic底層打包使用 Cordova,Ionic自帶豐富的Ionic UI樣式,Ionic使用的是AngularJS前端框架。Ionic擁有豐富的命令操作,可以通過命令行工具快速創建Android和iOS項目,並且也可以編譯成Android和iOS平臺的應用程序,同時Ionic也支持自定義編寫Android和iOS的插件。

Ionic從2013年11月份開始發佈第一個Alpha版本,2015年5月v1.0.0 “uranium-unicorn” release版本發佈。 

Cordova:Cordova的前身是PhoneGap,2011年Adobe公司收購了PhoneGap將其開源,並捐獻給Apache,命名爲Cordova。Cordova從PhoneGap中抽出的核心代碼。Cordova是一個使用HTML,CSS和JS這些前端語言去構建移動應用的平臺。

Cordova自帶豐富的命令操作,使用命令行可以創建類似於Web App的頁面,在瀏覽器查看我們創建的項目,同時如果我們使用命令行將項目在移動端編譯運行,也是可行的,這也是Cordova項目很獨特的地方,兼容Web App以及移動端。

Cordova提供了一些操作原生設備有關的API,通過這些API,可以使用JavaScript去訪問原生的設備的相關功能,例如打開攝像頭、打電話、開啓傳感器等。比如拿Android來說,Cordova是通過addJavascriptInterface(Android Webview的API)和JS Prompt這兩種方式來實現JS對於原生 Android API的調用。 

Cordova的文檔從2010年10月就開始維護了,版本號爲0.9.2。 cordova-cli在2012年11月發佈第一個版本,版本號爲0.1.13。cordova-android這個從2009年12月就開始發佈第一個版本0.9.0了。cordova-ios這個從2009年12月就開始發佈第一個版本0.9.0了。     

DCloud:這個是國產的跨平臺開發工具平臺,裏面包含有:HBuilder,HTML5+,MUI,uni-app,wap2app等。HBuilder是一個開發工具,MUI是一個UI框架,HTML5+ App是一種基於HTML、JS、CSS編寫的運行於手機端的App。

HBuilder可以通過擴展的JS API任意調用移動端的原生功能,實現與原生App同樣強大的功能和性能,它封裝了常用的擴展能力(二維碼、分享等),同時通過Native.js把原生API映射成了JS對象,通過JS可以直接調iOS和Android的原生API(通過plus.ios調用iOS原生API,通過plus.android調用Android原生API)。 

HBuilder工具從2013年就開始出現了。

含有編譯轉換的框架

React Native:使用JavaScript 和 React 編寫移動應用,在 UI方面使用是原生的控件,性能比Hybrid表現要好很多。React Native因爲是基於React,它是響應式編程,熟悉React的會很快上手,一次性學習,全平臺開發,團隊可以爲任何平臺開發應用,不需要爲每個平臺學習不同的基礎技術。React Native支持熱更新也成了很多開發團隊的熱捧。    

React Native於2015年3月v0.1.0: Initial public release版本。

Weex:Weex 是一個使用 Web 開發體驗來開發高性能原生應用的框架。使用同一套代碼就可以構建 Android、iOS 和 Web 應用。Weex 的結構是解耦的,渲染引擎與語法層是分開的,目前主要支持 Vue.js 和 Rax 這兩個前端框架。Weex 在 iOS 和 Android 上都實現了一個渲染引擎,並提供了一套基礎的內置組件。基於這些組件,你可以用JS封裝更多的上層組件。  

Weex於2016年6月開始發佈版本,第一個版本號爲v0.5.0。 

  

Flutter: Flutter是谷歌推出的跨平臺項目,它的前身是Sky項目,起源於2015年。Sky項目一開始就定位Dart作爲開發語言,使用Dart語言開發移動端項目,Sky它不依賴於平臺,它的代碼可以運行在Android、iOS設備上,真正做到了“一次代碼,處處運行”,讓你在Android、iOS設備上擁有接近原生的體驗。 

Flutter在2017年5月發佈了第一個版本v0.0.6。

**

**

三、其他相關熱門開發技術

文字介紹。當我們運行項目的時候。除上文講解的之外,我還想提幾個目前可以值得研究的一些技術,主要有這幾個:Instant App、快應用、Kotlin、Scade.

Instant AppInstant App翻譯成中文可以稱之爲瞬時程序加載,也可以稱之爲即時應用。它出現的目的,就是爲了讓人們能夠像點擊鏈接那麼簡單,節省掉安裝App的痛苦,最快速度、最少流量的消耗,讓用戶體驗到App級的用戶體驗。前提是必須在Google Play發佈apk,以及手機支持Google Service框架,建議優先使用谷歌親兒子。由於牆以及谷歌的一些要求等問題,這個技術在國內並沒有被推廣開。

快應用:快應用是九大手機廠商基於硬件平臺共同推出的新型應用生態。用戶無需下載安裝,即點即用,享受原生應用的性能體驗。使用前端技術棧開發,原生渲染,同時具備H5頁面和原生應用的雙重優點。快應用在傳統通知欄、負一屏、信息流等用戶直觀感知的位置建立和搜索入口,包括短信、拍照、語音助手、卸載場景、卡包等等。

Kotlin:這裏講一下Kotlin Native,它利用LLVM來編譯到機器碼。它主要是基於 LLVM後端編譯器(Backend Compiler)來生成本地機器碼。Kotlin Native設計初衷是爲了支持在非JVM虛擬機平臺環境的編程,如 ios、嵌入式平臺等。同時支持與 C 互操作。

Scade:Scade是一個跨平臺的,支持Android,Apple和Linux的工具。使用Swift的代碼庫爲進行開發,可以構建和部署多個不同平臺的應用。Swift代碼編譯爲Android和iOS可執行文件以及靜態和動態庫,並打包爲IAK和ADK文件。通用平臺特定的控件直接集成到Scade圖形SVG渲染引擎中,Scade標準庫提供了大量系統功能,操作系統特定功能作爲默認包公開並易於使用,無需包裝或使用外部功能接口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章