天天看點

誰告訴你 Flutter 會幹掉原生開發?

如下圖所示,今天剛好收到一個知乎問題,而剛剛好這個視訊我也在抖音上看到過,播放量還不低,本來是“一笑而過”但是既然這麼“有緣份”,那就關于 “Flutter 會幹掉原生開發?” 這個問題再聊聊我的看法。

誰告訴你 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 确實很不錯,但是, 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 會幹掉原生開發?

混合開發也是一個考慮的因素,因為很多企業并不是從零開始,一般都是在原有項目的基礎上做混合開發,對某些業務進行改造成 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…​​