主頁 > 移動端開發 > Flutter進階(一)——為什么Flutter是跨平臺開發的終極之選?

Flutter進階(一)——為什么Flutter是跨平臺開發的終極之選?

2021-02-16 15:17:55 移動端開發

文章目錄

  • 一、淺談跨平臺開發
  • 二、初識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里運行,

Flutter_kj

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中圖形渲染流程如下:

GP
大致流程如下:

  1. GPU的Vsync信號同步到UI執行緒;
  2. UI執行緒使用Dart來構建抽象的視圖結構;
  3. 視圖結構在GPU執行緒中進行圖層合成;
  4. 合成后的視圖資料提供給Skia圖形引擎處理成GPU資料;
  5. 資料再通過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. 專欄文章目錄

  1. Flutter進階(一)——為什么Flutter是跨平臺開發的終極之選?

更多資源與文章,請關注筆者微信公眾號“Flutter進階”:flutter進階

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/260089.html

標籤:其他

上一篇:C++若不想使用編譯器自動生成的函式,就該明確拒絕

下一篇:ios14.3開發之使用純代碼創建UITabbarController

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more