本文版權歸作者AWeiLoveAndroid所有,未經授權,嚴禁私自轉載。轉載請聲明原文鏈接和作者信息。
經常看到大家在一些技術群熱火朝天的爭論跨平臺技術的牛逼之處,其實是毫無意義的,尺有所短寸有所長,每個技術各司其職,沒有好壞之分。爭論有何意義?我們倒不如來研究一下,這個跨平臺技術適不適用以及性能和穩定性等方面的做個比較。
Flutter系列博文鏈接 ↓:
工具安裝:
Flutter基礎篇:
- 谷歌Flutter1.0正式版發布
- Flutter基礎篇(1)-- 跨平臺開發框架和工具集錦
- Flutter基礎篇(2)-- 老司機用一篇博客帶你快速熟悉Dart語法
- Flutter基礎篇(3)-- Flutter基礎全面詳解
- Flutter基礎篇(4)-- Flutter填坑全面總結
- Flutter基礎篇(5)-- Flutter代碼模板,解放雙手,提高開發效率必備
- Flutter基礎篇(6)-- 水平和垂直布局詳解
- Flutter基礎篇(7)-- Flutter更新錯誤全面解決方案(圖文+視頻講解)
- Flutter基礎篇(8)-- Flutter for Web詳細介紹
- Flutter基礎篇(9)-- 手把手教你用Flutter實現Web頁面編寫
- Flutter1.9升級體驗總結(Flutter Web 1.9最新版本填坑指南)
Flutter進階篇:
Dart語法系列博文鏈接 ↓:
Dart語法基礎篇:
Dart語法進階篇:
一、為什么需要跨平臺?
在移動端剛出來那會兒,Android、iOS都是各自為營,分開開發的,團隊之間是獨立的,從需求調研,研發,測試,上線一整套流程需要的周期很長,少則幾個月,多達1年甚至更長。隨著移動端的逐漸普及,移動端開發的市場也越來越大,互聯網公司越來越多,爭搶互聯網蛋糕的人越來越多,各互聯網公司之間的競爭越來越激烈,如何快速把好的想法推出去占有市場才是當前需要考慮的問題,在這樣的形勢下,為了適應市場的需求,減少成本開銷,縮短開發周期,提高效率這些問題逐漸的被各公司關注。順應市場變化的跨平臺框架正好迎合了公司的需求,一拍即合,于是各種跨平臺框架如雨后春筍般的在互聯網公司開始普及開來。
二、跨平臺框架的發展歷史
俗話說:“讀史使人明志",我想大家很有必要了解一下跨平臺框架(工具)發展歷史。為了搞清楚跨平臺技術,我查證了許多資料,我在這里畫了一張價值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缺點:用戶體驗比不上原生那么流暢,性能上比不上原生;有一些功能受瀏覽器、系統以及平臺本身限制不好實現,比如系統級別的彈窗、傳感器、手機聯系人等都只能靠原生去實現(也不排除有些框架可以做到,比如:小程序可以通過自己引擎可以騰訊的瀏覽器內核引擎操作手機硬件)。本文首發于我的公眾號Flutter那些事,未經授權嚴禁轉載!
隨著技術的發展,Web App已經是百花齊放,性能和原生效果方面都有很大的改善,新興的Web App代表性的框架有:PWA
、小程序
等。
(1) 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的使用率幾乎為零。
(2) 小程序
小程序:是一種無需下載安裝即可使用的應用,只需要掃一掃或打開微信搜一下即可打開應用。2016年9月21日,微信小程序正式開啟內測。
小程序的優勢:小程序開發門檻相對較低,難度比開發App小,能夠滿足需求的簡單的基礎應用。小程序能夠實現消息通知、線下掃碼、公眾號關聯等七大功能。通過公眾號關聯,用戶可以實現公眾號與小程序之間相互跳轉。由于無需下載App,小程序推廣起來更方便。
小程序的缺點:小程序是依附于微信的,所以很多功能局限于微信團隊提供的API,你不好擴展功能。另外小程序不適合開發交互復雜、需求多樣的應用,只能考慮原生開發。
(二)Hybrid框架
Hybrid App,其實就是原生應用和Web應用相結合,一般做法就是項目中的某一部分是原生界面,一部分是Web頁面,通過原生平臺的WebView去調用Web頁面。這種類似的開發模式就需要原生開發人員和前端開發人員密切配合(有些公司資源緊缺由單人負責這個項目)。 本文首發于我的公眾號Flutter那些事,未經授權嚴禁轉載!
由于原生WebView存在一定的局限性,和Web交互起來有些問題不好處理,于是出現了一些基于原生WebView封裝的Hybrid框架,這些框架有一個共同特點:封裝了移動端設備(這里指Android、iOS)上最常用的本地API調用,然后以統一的Javascript API形式提供給Web開發者調用。這樣一來原生不能解決的問題可以用Web去處理,同時你也可以自己封裝原生API,做成一些插件使用。
比較熱門的Hybrid框架有Ionic、Cordova、DCloud:
(1) Ionic
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版本發布。
(2) Cordova
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了。
(3) DCloud
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年就開始出現了。
(三)含有編譯轉換的框架
(1) React Native
React Native:使用JavaScript 和 React 編寫移動應用,在 UI方面使用是原生的控件,性能比Hybrid表現要好很多。React Native因為是基于React,它是響應式編程,熟悉React的會很快上手,一次性學習,全平臺開發,團隊可以為任何平臺開發應用,不需要為每個平臺學習不同的基礎技術。React Native支持熱更新也成了很多開發團隊的熱捧。
React Native于2015年3月v0.1.0: Initial public release版本。
(2) Weex
Weex:Weex 是一個使用 Web 開發體驗來開發高性能原生應用的框架。使用同一套代碼就可以構建 Android、iOS 和 Web 應用。Weex 的結構是解耦的,渲染引擎與語法層是分開的,目前主要支持 Vue.js 和 Rax 這兩個前端框架。Weex 在 iOS 和 Android 上都實現了一個渲染引擎,并提供了一套基礎的內置組件。基于這些組件,你可以用JS封裝更多的上層組件。
Weex于2016年6月開始發布版本,第一個版本號為v0.5.0。
(3) Flutter
Flutter: Flutter是谷歌推出的跨平臺項目,它的前身是Sky項目,起源于2015年。Sky項目一開始就定位Dart作為開發語言,使用Dart語言開發移動端項目,Sky它不依賴于平臺,它的代碼可以運行在Android、iOS設備上,真正做到了“一次代碼,處處運行”,讓你在Android、iOS設備上擁有接近原生的體驗。 本文首發于我的公眾號Flutter那些事,未經授權嚴禁轉載!
Flutter在2017年5月發布了第一個版本v0.0.6。
三、其他相關熱門開發技術?
除上文講解的之外,我還想提幾個目前可以值得研究的一些技術,主要有這幾個:Instant App
、快應用
、Kotlin
、Scade
.
(1) Instant App
Instant App:Instant App翻譯成中文可以稱之為瞬時程序加載,也可以稱之為即時應用。它出現的目的,就是為了讓人們能夠像點擊鏈接那么簡單,節省掉安裝App的痛苦,最快速度、最少流量的消耗,讓用戶體驗到App級的用戶體驗。前提是必須在Google Play發布apk,以及手機支持Google Service框架,建議優先使用谷歌親兒子。由于墻以及谷歌的一些要求等問題,這個技術在國內并沒有被推廣開。
(2) 快應用
快應用:快應用是九大手機廠商基于硬件平臺共同推出的新型應用生態。用戶無需下載安裝,即點即用,享受原生應用的性能體驗。使用前端技術棧開發,原生渲染,同時具備H5頁面和原生應用的雙重優點。快應用在傳統通知欄、負一屏、信息流等用戶直觀感知的位置建立和搜索入口,包括短信、拍照、語音助手、卸載場景、卡包等等。
(3) Kotlin
Kotlin:這里講一下Kotlin Native,它利用LLVM來編譯到機器碼。它主要是基于 LLVM后端編譯器(Backend Compiler)來生成本地機器碼。Kotlin Native設計初衷是為了支持在非JVM虛擬機平臺環境的編程,如 ios、嵌入式平臺等。同時支持與 C 互操作。
(4) Scade
Scade:Scade是一個跨平臺的,支持Android,Apple和Linux的工具。使用Swift的代碼庫為進行開發,可以構建和部署多個不同平臺的應用。Swift代碼編譯為Android和iOS可執行文件以及靜態和動態庫,并打包為IAK和ADK文件。通用平臺特定的控件直接集成到Scade圖形SVG渲染引擎中,Scade標準庫提供了大量系統功能,操作系統特定功能作為默認包公開并易于使用,無需包裝或使用外部功能接口。
文首的圖片來源于網頁:http://www.sohu.com/a/50632196_128381
【聲明】本文首發于我的公眾號Flutter那些事,未經授權嚴禁轉載!