如下圖所示,今天剛好收到一個知乎問題,而剛剛好這個視訊我也在抖音上看到過,播放量還不低,本來是“一笑而過”但是既然這麼“有緣份”,那就關於 “Flutter 會幹掉原生開發?” 這個問題再聊聊我的看法。
我在 2017 開始對 flutter 產生興趣,至今已經寫了 20 幾篇關於 flutter 文章,github 的幾個 flutter 開源專案 star 數大概在 14k 左右,如今 flutter 也是我的本質工作之一,所以我想說這個觀點很偏面很偏激也很博眼球。
在說這個問題之前,先說下 flutter 是什麼。
flutter 其實就是一套谷歌開源的跨平臺 UI 開發框架,支援 Android 和 iOS ,並且目前開始支援 Web 和 MacOS,未來還會繼續支援 Win和 Linux 平臺的一套 UI 框架。
和以前的跨平臺開發不同的是:它的效能更好,更接近原生並且跨平臺體驗更優秀,因為它的跨平臺實現機制更像是遊戲引擎,所以在積累到 2019 年後迅猛上位,到今天 flutter 在 github 的 star 已經超過了前輩 react-native,當然, issue 也超越了 react-native。
所以通過上述可以總結:flutter 確實很不錯,但是, flutter 的定位只是跨平臺 UI 框架,並且 flutter 目前的 issue 感人。
關於 Flutter “幹掉原生開發的問題”
這個問題其實追溯到 react-native 、weex 等跨平臺框架出現的時候,都會有原生開發“要涼”的口號盛行,但是事實上 react-native 、weex 和 flutter 都只是 UI 框架,它解決的其實是跨平臺上的 UI 實現,讓介面佈局或者實現的業務邏輯可以在多端統一。
但是它也僅僅只是 UI 框架,比如 react-native 本身就是依賴於原生控制元件,而 flutter 的 webview 、mapview 也都需要依賴原生開發來支撐。
接著說除了 UI 框架之外,比如藍芽、資料儲存、感測器、應用之間的通訊互動、多程式等等一大堆支援其實都屬於原生平臺,這些在 flutter 上都需要對應平臺的開發支援,之後再封裝到 flutter 外掛中。
有的人可能覺得這些都有官方和第三方提供,但是首先 flutter 的外掛社群如今還比較年輕,當然專案小的時候可能無所謂,但是隻要專案稍微比較大的,這些肯定遠遠不夠,官方提供的永遠趕不上 PM 或者 Boss 們的奇思妙想。
如果按照截圖上所說,他一個人能做 iOS、Android 和 Flutter 所有的工作,能做程式設計界的“葉問”,那我無話可說。。。
再說就flutter 的 issue ,天見尤憐,加上 pr 還有 8000+ 的 issue 沒有 Closed ,心疼 flutter 官方一秒鐘。跨平臺框架的問題一直都不可能少,因為涉及的平臺多了,問題自然也就多了,而很多問題其實都是和原有的平臺有關,沒有對應平臺的開發人員很多時候是搞不清問題所在。
混合開發也是一個考慮的因素,因為很多企業並不是從零開始,一般都是在原有專案的基礎上做混合開發,對某些業務進行改造成 flutter 來嘗試新技術;同時大廠也不會把雞蛋放在一個籠子裡,所以很多時候對於大廠而言更多會是混合開發的模式。
最後就是打包和分發,“打包失敗和稽核不過”是最常出現問題的階段,特別是 iOS 平臺的打包和稽核,這些往往也都需要有對應平臺經驗的人來處理。
所以 flutter 的定位,甚至跨平臺開發的定位,都不是幹掉原生,而是在原生開發上擴充技能和能力。能幹掉平臺的只有平臺!
關於 Flutter 真正的定位
最後聊聊 flutter 的定位,flutter 作為跨平臺 UI 框架,很眾多跨平臺框架一樣,它是和原生相輔相成的存在,我在做技術分享和文章中不止一次表達過這個觀點,跨平臺解決的問題是:
1、開發成本
直接學 Java
/Kotlin
、Object-C
/Swift
、JavaScript
/CSS
去寫各平臺的程式碼可以嗎?
當然可以,這樣的效能肯定最有保證,但是跨平臺的主要優勢在於程式碼邏輯的複用,減少各平臺同一邏輯,因人而異的開發成本。對於企業而言,一套業務邏輯可以在多處使用是最理想也是最保險的。
2、學習機會
一般情況下,各平臺開發者容易侷限在自己的領域開發,而作為應用開發者,跨平臺是接觸另一平臺或領域的過渡機會。
3、團隊結構
一般而言做跨平臺的團隊還是會有 Android 和 iOS 的原生開發,甚至於在大中型專案中人數都不會變少,但是用跨平臺會讓所有人都參與都一個開發進度中,而不是 iOS 和 Android 各做各的,最後再扯誰的實現有問題。
每次出現新的技術框架都有猛吹的,也有抗拒的,希望大家都能保持客觀的態度面對改變~
資源推薦
開源 Flutter 完整專案:github.com/CarGuo/GSYG…
開源 Flutter 多案例學習型專案: github.com/CarGuo/GSYF…
開源 Fluttre 實戰電子書專案:github.com/CarGuo/GSYF…