Flutter基礎(chǔ)篇(1)-- 跨平臺開發(fā)框架和工具集錦

本文版權(quán)歸作者AWeiLoveAndroid所有,未經(jīng)授權(quán),嚴禁私自轉(zhuǎn)載。轉(zhuǎn)載請聲明原文鏈接和作者信息。

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


Flutter系列博文鏈接 ↓:

工具安裝:

Flutter基礎(chǔ)篇:

Flutter進階篇:

Dart語法系列博文鏈接 ↓:

Dart語法基礎(chǔ)篇:

Dart語法進階篇:


一、為什么需要跨平臺?

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

二、跨平臺框架的發(fā)展歷史

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

根據(jù)跨平臺的框架(工具)功能,我把跨平臺框架(工具)主要分為3大類,分別是:Web App網(wǎng)頁Hybrid框架含有編譯轉(zhuǎn)換的框架

(一)Web App網(wǎng)頁

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

采取這樣的一種策略的優(yōu)勢:入門門檻低,只需要會HTML5、CSS3、JS前端語言就可以開發(fā)Web App了,開發(fā)成本低,內(nèi)容更新也很方便,Web App無需安裝,可以在不同系統(tǒng)、不同平臺和設(shè)備上運行。

Web App缺點:用戶體驗比不上原生那么流暢,性能上比不上原生;有一些功能受瀏覽器、系統(tǒng)以及平臺本身限制不好實現(xiàn),比如系統(tǒng)級別的彈窗、傳感器、手機聯(lián)系人等都只能靠原生去實現(xiàn)(也不排除有些框架可以做到,比如:小程序可以通過自己引擎可以騰訊的瀏覽器內(nèi)核引擎操作手機硬件)。本文首發(fā)于我的公眾號Flutter那些事,未經(jīng)授權(quán)嚴禁轉(zhuǎn)載!

隨著技術(shù)的發(fā)展,Web App已經(jīng)是百花齊放,性能和原生效果方面都有很大的改善,新興的Web App代表性的框架有:PWA小程序等。

(1) PWA

PWA: 全稱是Progressive Web App,翻譯成中文意思是:漸進式網(wǎng)絡(luò)應(yīng)用程序。它是 Google 公司于2015 年提出的,2016 年 6 月才推廣的項目。

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

PWA缺點:PWA仍然是網(wǎng)站,只是在緩存、通知、后臺功能等方面表現(xiàn)的更好。

PWA是Google主推的一項技術(shù)標(biāo)準,F(xiàn)ireFox,Chrome以及一些基于Blink的瀏覽器已經(jīng)支持漸進式Web應(yīng)用了,Edge上對漸進式Web應(yīng)用的支持正在開發(fā)中,Apple公司也表示在Safari瀏覽器上支持PWA。國外互聯(lián)網(wǎng)公司Twitter和Flipboard都推出了PWA的項目。由于網(wǎng)絡(luò)環(huán)境因素以及小程序的競爭等原因,目前國內(nèi)PWA的使用率幾乎為零。

(2) 小程序

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

小程序的優(yōu)勢:小程序開發(fā)門檻相對較低,難度比開發(fā)App小,能夠滿足需求的簡單的基礎(chǔ)應(yīng)用。小程序能夠?qū)崿F(xiàn)消息通知、線下掃碼、公眾號關(guān)聯(lián)等七大功能。通過公眾號關(guān)聯(lián),用戶可以實現(xiàn)公眾號與小程序之間相互跳轉(zhuǎn)。由于無需下載App,小程序推廣起來更方便。

小程序的缺點:小程序是依附于微信的,所以很多功能局限于微信團隊提供的API,你不好擴展功能。另外小程序不適合開發(fā)交互復(fù)雜、需求多樣的應(yīng)用,只能考慮原生開發(fā)。

(二)Hybrid框架

Hybrid App,其實就是原生應(yīng)用和Web應(yīng)用相結(jié)合,一般做法就是項目中的某一部分是原生界面,一部分是Web頁面,通過原生平臺的WebView去調(diào)用Web頁面。這種類似的開發(fā)模式就需要原生開發(fā)人員和前端開發(fā)人員密切配合(有些公司資源緊缺由單人負責(zé)這個項目)。 本文首發(fā)于我的公眾號Flutter那些事,未經(jīng)授權(quán)嚴禁轉(zhuǎn)載!

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

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

(1) Ionic

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

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

(2) Cordova

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

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

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

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

(3) DCloud

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

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

HBuilder工具從2013年就開始出現(xiàn)了。

(三)含有編譯轉(zhuǎn)換的框架

(1) React Native

React Native:使用JavaScript 和 React 編寫移動應(yīng)用,在 UI方面使用是原生的控件,性能比Hybrid表現(xiàn)要好很多。React Native因為是基于React,它是響應(yīng)式編程,熟悉React的會很快上手,一次性學(xué)習(xí),全平臺開發(fā),團隊可以為任何平臺開發(fā)應(yīng)用,不需要為每個平臺學(xué)習(xí)不同的基礎(chǔ)技術(shù)。React Native支持熱更新也成了很多開發(fā)團隊的熱捧。

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

(2) Weex

Weex:Weex 是一個使用 Web 開發(fā)體驗來開發(fā)高性能原生應(yīng)用的框架。使用同一套代碼就可以構(gòu)建 Android、iOS 和 Web 應(yīng)用。Weex 的結(jié)構(gòu)是解耦的,渲染引擎與語法層是分開的,目前主要支持 Vue.js 和 Rax 這兩個前端框架。Weex 在 iOS 和 Android 上都實現(xiàn)了一個渲染引擎,并提供了一套基礎(chǔ)的內(nèi)置組件。基于這些組件,你可以用JS封裝更多的上層組件。

Weex于2016年6月開始發(fā)布版本,第一個版本號為v0.5.0。

(3) Flutter

Flutter: Flutter是谷歌推出的跨平臺項目,它的前身是Sky項目,起源于2015年。Sky項目一開始就定位Dart作為開發(fā)語言,使用Dart語言開發(fā)移動端項目,Sky它不依賴于平臺,它的代碼可以運行在Android、iOS設(shè)備上,真正做到了“一次代碼,處處運行”,讓你在Android、iOS設(shè)備上擁有接近原生的體驗。 本文首發(fā)于我的公眾號Flutter那些事,未經(jīng)授權(quán)嚴禁轉(zhuǎn)載!

Flutter在2017年5月發(fā)布了第一個版本v0.0.6。

三、其他相關(guān)熱門開發(fā)技術(shù)?

除上文講解的之外,我還想提幾個目前可以值得研究的一些技術(shù),主要有這幾個:Instant App快應(yīng)用KotlinScade.

(1) Instant App

Instant App:Instant App翻譯成中文可以稱之為瞬時程序加載,也可以稱之為即時應(yīng)用。它出現(xiàn)的目的,就是為了讓人們能夠像點擊鏈接那么簡單,節(jié)省掉安裝App的痛苦,最快速度、最少流量的消耗,讓用戶體驗到App級的用戶體驗。前提是必須在Google Play發(fā)布apk,以及手機支持Google Service框架,建議優(yōu)先使用谷歌親兒子。由于墻以及谷歌的一些要求等問題,這個技術(shù)在國內(nèi)并沒有被推廣開。

(2) 快應(yīng)用

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

(3) Kotlin

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

(4) Scade

Scade:Scade是一個跨平臺的,支持Android,Apple和Linux的工具。使用Swift的代碼庫為進行開發(fā),可以構(gòu)建和部署多個不同平臺的應(yīng)用。Swift代碼編譯為Android和iOS可執(zhí)行文件以及靜態(tài)和動態(tài)庫,并打包為IAK和ADK文件。通用平臺特定的控件直接集成到Scade圖形SVG渲染引擎中,Scade標(biāo)準庫提供了大量系統(tǒng)功能,操作系統(tǒng)特定功能作為默認包公開并易于使用,無需包裝或使用外部功能接口。


文首的圖片來源于網(wǎng)頁:http://www.sohu.com/a/50632196_128381


【聲明】本文首發(fā)于我的公眾號Flutter那些事,未經(jīng)授權(quán)嚴禁轉(zhuǎn)載!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,224評論 6 529
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 97,916評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,014評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,466評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,245評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,795評論 1 320
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,869評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,010評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,524評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,487評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,634評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,173評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,884評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,282評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,541評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,236評論 3 388
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,623評論 2 370

推薦閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,765評論 2 59
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,572評論 25 707
  • 這是我寫的一系列文章中的第一篇關(guān)于如何利用Web開發(fā)技術(shù)為iOS和Android系統(tǒng)構(gòu)建混合應(yīng)用程序(Hybrid...
    bubuli閱讀 2,622評論 3 29
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 16,000評論 3 119
  • 我不在家的這幾天,發(fā)生了一件令人著急的事。我們家的小狗毛毛生病了! 聽媽媽說,毛毛這些天不吃不喝的,一點精...
    格格不入zmy閱讀 223評論 1 2