文章目錄
- 一、淺談跨平臺開發
- 二、初識Flutter
- 1. Flutter面世
- 2. Flutter的優勢
- 3. Flutter的不足
- 三、Flutter整體架構與原理
- 1. Framework層
- 2. Engine層
- 3. 原理
- 四、為什么選擇Flutter
- 五、總結
- 六、專欄介紹
- 1. 內容簡介
- 2. 專欄文章目錄
一、淺談跨平臺開發
簡單地說,跨平臺開發就是“一石二鳥”的開發技術,早期沒有跨平臺框架的時候,開發者必須為同一應用的各個平臺(比如Android、iOS、Windows 等)分別撰寫代碼,這對開發者以及投資開發該應用的企業而言都是費時費力又花錢的作業,
跨平臺開發就是只用一套代碼就可以在Android、iOS等多個平臺運行,避免了過高的維護成本,節省了大量時間與資源,
跨平臺開發是當下最受歡迎、應用最廣泛的框架之一,能實作跨平臺開發的框架也五花八門,比如Cordova、Ionic、Weex、DCloud、
React Native、Flutter等,有很多框架因為性能不佳等各種原因已經漸漸退出歷史舞臺,但Flutter框架依舊地位堅挺,備受歡迎,
二、初識Flutter
1. Flutter面世
Flutter 是 Google 在2015年開源的 UI 工具包,作為新一代的跨平臺方案,Flutter能幫助開發者通過一套代碼庫高效構建多平臺精美應用,支持移動、Web、桌面和嵌入式平臺,而且Flutter是未來新作業系統Fuchsia的默認開發軟體,
Flutter第一次亮相于2015年5月Dart開發者峰會上,初始名字叫做“Sky”,后更名為Flutter,
2017年5月Google發布第一個版本,并且在2018年12月初發布1.0穩定版,2019年MWC上發布1.2版本,截至筆者寫這篇文章時(2021/02/13),Flutter 1.22 正式版已經發布,
Google目前正在大力推廣Flutter,可以說是目前比較前沿的開發工具,國內目前也已經有不少大型專案接入Flutter,比如阿里的淘寶、頭條的抖音、騰訊的NOW直播、絕地求生、QQ音樂等,都使用了Flutter開發,除此之外,還有一些其他中小型公司也在使用Flutter,
2. Flutter的優勢
在 StackOverflow 2019 年的全球開發者問卷調查中,Flutter 被選為最受開發者歡迎的框架之一,超過了 TensorFlow 和 Node.js,Flutter能夠獲得如此多開發者的青睞,自然有它突出的優點:
-
跨平臺開發
真正做了一套代碼可以同時在Android和iOS等平臺上運行,避免過高的維護成本,提高了開發效率, -
性能優越
通過“自繪UI+原生系統”實作高幀率的流暢UI,性能更接近原生,使用Skia作為2D渲染引擎,使用Dart語言作為運行,以及使用Text作為文字排版引擎, -
熱多載快速開發
Flutter選用了Google于2011年推出的Dart作為其開發語言,Dart既可以是AOT(Ahead Of Time)編譯,也可以是JIT(Just In Time)編譯,其JIT編譯的特性使Flutter在開發階段可以達到亞秒級熱多載,而且不會丟失狀態,從而大大提升了開發效率,
-
訪問本地功能和SDK
通過平臺相關的API、第三方SDK和原生代碼讓應用變得強大易用, Flutter允許復用現有的Java、Swift或ObjC代碼,訪問iOS和Android上的原生系統功能和系統SDK, -
精美的UI
Flutter內置眾多精美的Material Design和Cupertino(iOS風格)小部件,提供了可定制的 UI 框架,不再受制于手機平臺控制元件,開發者可快速構建精美的用戶界面,以提供更好的用戶體驗, -
支持混合開發
Flutter擁有豐富的工具和庫,可以輕松地同時在iOS和Android系統中實作各種的想法和創意, 如果你沒有任何移動端開發體驗,Flutter將是一個輕松快捷的框架幫助你構建漂亮的移動應用程式, 如果你是一位經驗豐富的iOS或Android開發人員,則可以使用Flutter作為視圖(View)層, 并使用已經用Java、ObjC或者Swift完成的部分,從而獲得統一的應用開發體驗, -
學習成本低
具有前端或者原生開發經驗的讀者,學Flutter將比較省力,
3. Flutter的不足
每一個跨平臺框架都有各自的優勢和不足,Flutter也不例外,總得來說,Flutter有以下不足:
-
Flutter框架誕生不久,有部分功能可能會欠缺,
-
Flutter不支持開發Android TV和Apple TV上的應用,
-
相比JS和TS,Flutter目前可用的包還比較少,
這些不足還是源于Flutter面世時間尚短,但作為Google大力扶持的一個框架,Flutter面臨的這些不足未來將會逐一被解決,
三、Flutter整體架構與原理
Flutter框架分為兩個部分,上層是開源的Framework,下層是Engine,可以理解為基于Framework開發應用并再Engine里運行,

1. Framework層
Framework層是由Dart實作的,包含視覺庫(Widgets)、渲染、影片、繪圖和手勢等,視覺庫又分為Material風格和Cupertino風格兩種,Framework含有日常開發所需要的大量API,普通應用開發熟悉這些API的使用基本上就OK了,不過很多特殊場景的控制元件需要自己根據實際情況進行自定義,
Framework包含的兩套視覺庫,Material是Android風格的,Cupertino是iOS風格的,開發者可以在此基礎上,封裝自己風格的系統組件,
Framework層的原始碼地址:
https://github.com/flutter/flutter/tree/master/packages/flutter/lib
2. Engine層
Engine層是由C++實作的,是Flutter的核心引擎,主要包括Skia圖形引擎、Dart運行時的環境Dart VM、Text文本渲染引擎等,
如果想深入了解Flutter原理,建議閱讀該層的源代碼,源代碼地址:
https://github.com/flutter/engine
3. 原理
無論是iOS還是Android,都是提供一個平臺的View給Flutter層,頁面內容渲染交由Flutter層自身來完成,所以Flutter相對React Native等框架性能更好,Flutter中圖形渲染流程如下:

大致流程如下:
- GPU的Vsync信號同步到UI執行緒;
- UI執行緒使用Dart來構建抽象的視圖結構;
- 視圖結構在GPU執行緒中進行圖層合成;
- 合成后的視圖資料提供給Skia圖形引擎處理成GPU資料;
- 資料再通過OpenGL或Vulkan提供給GPU進行渲染,
四、為什么選擇Flutter
Flutter雖然是全新的跨平臺解決方案,但已經相對成熟,與React Native相比,Flutter的性能顯然要出色許多,此外,Flutter的其他一些特性,也讓其成為跨平臺開發的終極之選:
-
原生ARM代碼
Flutter 有一個名為原生ARM 的功能,對初創企業和科技公司而言很有意義,
它可以幫助開發者更輕松地實作自己的想法,為應用專案帶來最顯著的優勢, -
Web 視圖組件
這一功能使用戶可以輕松地在移動應用中查看Web 內容,此外,Flutter 還讓
應用中的頁面跳轉和穩定更加容易, -
Android 應用包
Flutter 支持Android 應用包,這是一種新的上傳格式,包含應用程式的所有編譯代碼和資源,這種格式可以加快APK 的打包和向Google Play 發布的流程, -
無需手動管理多個APK
這些功能讓用戶可以下載更小、更優化的APK,開發者也不需要為了支持多種設備而構建、發布和管理多個APK , -
減小APK 大小
Android 應用包使用的APK 拆分機制可以縮減應用的大小,并支持Android應用程式的動態交付等新功能, -
動態功能模塊
此功能允許開發者將某些功能和資源與應用程式的基礎模塊分離開來,并將前者添加到應用程式包中,例如,如果你的應用包含相機功能,則可以將其設為動態模塊,之后當用戶想要下載并安裝這個功能時就可以按需操作了,
五、總結
綜上所述,如果你想以較小的成本、較短的時間、較少的代碼快速構建功能強大的跨平臺應用,無論是否作為商用,Flutter無疑都是最佳的解決方案!
六、專欄介紹
1. 內容簡介
在接觸Flutter之前,筆者并沒有系統學過移動開發,對Java也不熟悉,但基于某些原因筆者一直想創建自己的應用,這款應用最好能夠跨平臺使用,最終,筆者選擇了Flutter這個框架,具體為什么在上面已經做過詳細說明,
筆者開了一個專欄,名為“Flutter進階”,一方面是為了督促自己學習Flutter,另一方面是為了與廣大開發者、愛好者分享資源,筆者將專欄物件定位為移動開發零基礎者,如果你不是零基礎學習,那么專欄內的文章將對你更加友好,
2. 專欄文章目錄
- Flutter進階(一)——為什么Flutter是跨平臺開發的終極之選?
更多資源與文章,請關注筆者微信公眾號“Flutter進階”:
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/260089.html
標籤:其他
