“原生開發是不是要涼了?”
最近在很多地方,都見到在讨論這個問題。
如果說,最早出現的會“威脅”到原生開發的跨平台方案,還不是Flutter。早在2015年Facebook推出React-Native架構時,就已經出現“react native會取代app原生開發嗎”這樣的疑問。事實證明,原生開發,不管是Android還是iOS,到目前為止,依然堅挺。
在介紹Flutter之前,先簡單總結一下,近年來出現的熱門跨平台方案:
React Native
Facebook出品。React Native(RN)釋出于2015年,也是使用JavaScript語言進行跨平台APP的開發。與H5開發不同的是,它使用JS橋接技術在運作時編譯成各個平台的Native代碼,其使用的技術Facebook的Flux技術。
其優點是目前的生态比較成熟,目前也有很多跨平台應用使用React Native。它也是跟Flutter對比的主要對象。

WEEX
Alibaba 出品,Java語言,JS V8引擎,Vue設計模式,原生渲染
2016年4月21日,阿裡巴巴在Qcon大會上宣布跨平台移動開發工具Weex開放内測邀請。Write once, run everywhere”, weex的定義就像是:寫個 vue 前端,順便幫你編譯成性能還不錯的 apk 和 ipa(當然,現實有時很骨感)。基于 Vue 設計模式,支援 web、android、ios 三端,原生端同樣通過中間層轉化,将控件和操作轉化為原生邏輯來提高使用者體驗。
小程式
微信團隊出品,2017年1月9日,張小龍在2017微信公開課Pro上釋出的小程式正式上線。記得當時在公司裡掀起一股浪潮,都在吹捧再也不用安裝一堆APP了,隻需要下載下傳一個微信,其他應用都可以用小程式替代。當時的16G記憶體使用者一度以為看到了希望。
嚴格來說,小程式并不算跨平台方案,但是,其當時對原生的影響程度,不亞于前者。
Flutter
Google爸爸出品,其曆史最早可以追溯到2015年的Sky項目,Beta1版本于2018年2月27日在2018 世界移動大會公布。與React Native和WEEX使用JavaScript作為程式設計語言,以及使用平台自身引擎渲染界面不同,Flutter直接選擇使用2D繪圖引擎庫Skia來渲染界面。
為什麼要把Flutter單獨拎出來說,與react, weex不同,Flutter也看到了目前的跨平台解決方案并不完美,是以它借鑒了React Native的一些思想,做出了很大的優化。它将代碼編譯成原生代碼,并且直接在各個平台中使用其高效渲染引擎Skia進行渲染,沒有橋接,不調用平台相關控件。這種設計思想完美解決了不同平台的性能問題,并且關注的開發者數量和相關的教程的增長速度遠超當時的React Native。
如何理性看待Flutter?
盡管Flutter作為Google爸爸的親兒子,本質上,它和react-native, weex沒有任何差別,它們僅僅是UI架構,它解決的是跨平台上UI的統一實作,僅此而已。
Fluuter不會有多少專門針對某平台的支援。包括 Android,更别提iOS,是以,使用 Flutter 也是離不開原生開發的。将不同平台的差異功能包裝成跨平台的 Flutter 包,這種東西叫做插件,插件裡邊都是各平台的原生 API 調用代碼。Flutter 連申請一個權限都做不到,你怎麼替代原生?
也許國外很多公司都已經在開始用 flutter 開發了,國内的話,手機品牌太多了。去 issue 區搜搜,xiaomi 和 huawei,至少每個關鍵詞有100 個未解決的 issue 吧,skia 本身也有一些相容性問題。
另外,Flutter使用Google自主開發的Dart語言,任何一門新語言,都有它的學習成本,即使你現在Flutter已經學得出神入化,但是一行Java代碼都不會寫,就想在公司開發Android?抱歉,沒有公司會要你的.....
引用一位大佬的話,能幹掉平台的隻有平台,除非Android有一天被取代,否則,原生開發的地位應該是不會輕易動搖。