1. 程式人生 > >Google 要用 Flutter 一統移動、桌面開發江湖?

Google 要用 Flutter 一統移動、桌面開發江湖?

640?wx_fmt=gif

“Flutter 的核心是一個獨立的可執行二進位制檔案,所以它不僅能改變移動開發的世界,也能改變桌面開發的世界。你只需編寫一次程式碼,就可以在 Android、iOS、Windows、Mac 和 Linux 上以原生方式釋出,還能通過 AngularDart 與 Web 共享業務邏輯——這一點意義重大。"

640?wx_fmt=png

Google 官方今日宣佈,Flutter 的 1.0 版本正式釋出了!

在去年的 Google I/O 大會上,Flutter 首次出現在公眾面前,彼時的 Google 表示,這是“一款新的用於建立移動應用的開源庫”,並且“Flutter 將會幫你更容易,更快速地開發出介面美觀的移動應用。”但是在此之後,業界一直持觀望態度,Google 也似乎偃旗息鼓,不再折騰。

直到今年 2 月,Flutter 推出第一個 Beta 版本,很快便憑藉強大的跨平臺 UI 框架得到了開發者們的熱烈響應,成百上千款基於 Flutter 開發的應用在 Apple Store 和 Google Play 上湧現。在今年 9 月的 Google 開發者大會上,Flutter Release Preview 2 正式公測,並宣佈“這是正式版之前的最後一個預覽版”。而現在,Flutter 1.0 版本終於正式釋出了。


640?wx_fmt=png

“全新的 UI 設計方式”Flutter


一般而言,移動開發者們在同時相容 iOS 和 Android 時會選擇走原生開發路線,把介面和邏輯在不同平臺分別實現,但這往往面臨著複雜龐大的工作量、難以為繼的運營維護。因此,也有很多開發者選擇用同一套程式碼相容多個平臺,但這樣往往會導致執行速度和產品保真度的損失。

正是在這種情況下,Google 向外推出了 Flutter “這一全新的 UI 設計方式”,還表示能夠為開發者提供了兩全其美的解決方案——既能用原生 ARM 程式碼直接呼叫的方式來加速圖形渲染和 UI 繪製,又能同時執行在 Android 和 iOS 兩大主流移動作業系統上。

根據 Google 的官方部落格介紹,Flutter 是應用內建的一個引擎,具有快速、高效、開放等特點。

640?wx_fmt=png

1、Flutter 可以構建介面精美的應用

Flutter 具有強大的影象組合能力,開發者可以不受限制地堆疊任何圖形、視訊、文字和控制元件。Flutter 內建了一系列的 widgets,這些 widgets 可以幫助實現在 iOS 和 Android 上的良好視覺體驗。Flutter 整合並有最大程度地實現了 Material Design——這是 Google 的開放設計系統。

2、Flutter 的速度快

Flutter 基於 Skia 2D 硬體加速圖形引擎,有媲美原生應用的速度。Flutter 的程式碼基於 Dart 平臺,可以被編譯成 iOS 和 Android 平臺上 32 位和 64 位的 ARM 程式碼。

3、Flutter 非常高效

Flutter 引入了 Stateful Hot Reload(保持應用狀態的熱過載),這個新特性可以讓移動開發者和設計師們實時迭代應用程式。通過 Stateful Hot Reload,無需重新啟動應用就可以在程式執行的時候直接看到程式碼修改之後的效果,Stateful Hot Reload 改變了開發者們編寫應用的方式。據 Google 使用者反饋,開發者們表示該特性使得開發效率提升了三倍。

4、Flutter 是開放的

Flutter 是一個開源專案,全球數百位開發者在為其貢獻程式碼。Flutter 的外掛生態系統平臺也充滿活力,有數千款外掛已經發布,避免了重複造輪子。由於 Flutter 應用程式使用標準的 Android 和 iOS 的編譯打包工具 (build tools),因此它的開放還體現在您可以使用原生開發資源。

目前在 Google 內部,Flutter 已經被廣泛用於多個產品,比如 Google Ads 已經將其產品的 iOS 版本和 Android 版本轉向使用 Flutter。而且據 Google 官方透露,在正式版本之前全世界已經有多個公司開始使用 Flutter 來開發應用,包括 Abbey Road Studios、阿里巴巴、Capital One、Groupon、Hamilton、京東、Philips Hue、Reflectly 以及騰訊等。


640?wx_fmt=png

Flutter 1.0 新特性


此次釋出的Flutter 1.0 版本中,Flutter 正式開始使用 Dart 平臺新的 2.1 版本,並修復了 Bug 和提高了穩定性。根據 Google 介紹,1.0 版本中將有兩個新功能隨正式版的預覽模式提供給廣大開發者,包括引入 Flutter 到現有工程(Add to App)和平臺級檢視(Platform Views)。

1、引入 Flutter 到現有工程 (Add to App)

起初在構思 Flutter 的時候,Google 主要關注於從零開始構建應用的場景。但事實上受制於很多因素,並不是所有開發者都能從零構建。顯然,他們更需要能夠在現有的應用中用 Flutter 新增新的功能,或者分步驟、分階段將現有的應用程式遷移到 Flutter。

現在,Flutter 的架構則非常適合於這樣的場景,每個 Flutter 應用都包含了一個用於託管 Flutter 的 Android 或 iOS 容器。此外,Google 還在不斷改善漸進式接入 Flutter 的體驗,包括更新模板、優化工具、完善指南等等,還能在不使用偵錯程式啟動應用的情況下介入和監測現有 Flutter 程序。

2、平臺級檢視(Platform Views)

此外,為了滿足開發者將 Android 或 iPhone 平臺的控制元件嵌入到 Flutter 應用當中的需求,Flutter 中還引入了 AndroidView 和 UiKitView 這兩個平臺級檢視的 widget 到 Flutter,可以將它們分別嵌入到指定的平臺中。

Google表示其已經在 Android 平臺上預覽這一功能數月了,現在是時候將這一特性推廣到 iOS 平臺了。此外,像 Google Maps 和 WebView 這樣的外掛也已經可以享受到這一特性帶來的種種便利了。

640?wx_fmt=png

據瞭解,這些功能將於明年二月的季度更新中正式推出。


640?wx_fmt=png

Flutter 專案應用端的拓展和實踐


此外,Google 方面也透露,雖然 Flutter 的首要目標平臺是 iOS 和 Android,但他們也在不斷探索將 Flutter 拓展到手機端以外的更多平臺上,Flutter Desktop Embedding 就是其中的一個。

Flutter Desktop Embedding 是一個使 Flutter 運行於 macOS、Linux 和 Windows 等桌面作業系統的專案。這是 Google 以探索的形式向用戶展示 Flutter 是有可能執行在一些沒有完整桌面環境的小型裝置中的。

顯然,有這一想法的不只是Google。在 Android 開發者 Norbert Kozsir 的部落格中,就介紹了一個由他和 Simon Lightfoot 創立的 Flutter 桌面應用專案,其不僅可以開發真正的應用程式,也能用於快速移動開發。

以下是其部落格內容全文:

Flutter 的核心是一個獨立的可執行二進位制檔案,所以它不僅能改變移動開發的世界,也能改變桌面開發的世界。你只需編寫一次程式碼,就可以在 Android、iOS、Windows、Mac 和 Linux 上以原生方式釋出,還能通過 AngularDart 與 Web 共享業務邏輯——這一點意義重大。

我們先來看看它的基本思想。

原生桌面客戶端,加速移動開發

但在討論實際的原生桌面應用之前,我們先來看看Flutter桌面版能為移動開發者帶來什麼。

啟動時間

640?wx_fmt=png

在討論任何生產力話題之前,有兩件不可忽略的事情:一是 Android 模擬器的啟動時間,二是 Gradle 的執行時間。

下面的 Gif 中我錄製了我自己啟動模擬器和執行預設的 Flutter 應用花費的時間,總共花了我 2 分 40 秒(想像一下這段時間能做多少事情)。

640?wx_fmt=gif

Android啟動時間和執行Gradle的時間(10倍速)

如果我告訴你,這一切只需不到10秒,你會怎麼想?原生方式執行應用,可以跳過在系統上執行Android和執行Gradle的所有額外開銷。

再看看這個:

640?wx_fmt=gif

Flutter模擬器啟動,原速

注意你都不需要離開IntelliJ,我們把所有執行Flutter所需的工具都做成了原生應用,能在所有支援Flutter的IDE中使用。

執行時可改變大小

不論是什麼應用,你都想測試它在不同螢幕大小下的表現。該怎麼做呢?

一種方式是跟朋友借一大堆不同尺寸的手機,或者建一大堆各種尺寸的模擬器,以確保應用佈局在任何裝置上都正常顯示。但這看起來太麻煩了。

還有更好的辦法嗎?有!

640?wx_fmt=gif

這張圖應該能說明一切問題

訪問電腦上的資源

在開發和測試應用時,如果應用需要訪問手機上的資源,那就需要先把所有測試用的檔案都傳送到模擬器上或裝置上,這一步非常麻煩。如果能直接用作業系統的原生檔案選擇對話方塊來選擇檔案該有多好。

沒錯,這個也能做到!

640?wx_fmt=gif

桌面版支援檔案選擇對話方塊

這個功能最大的好處在於桌面版的實現使用了與移動版的實現相同的通道,因此不需要改變任何程式碼。

熱過載和除錯

這個功能看上去像是錦上添花,但對於每個高效的工程師來說,熱過載和除錯功能都是必不可少的。所以桌面版中也支援了這一功能!

640?wx_fmt=gif

原生應用中的熱過載和除錯功能

記憶體

最後很重要的一項就是記憶體,對於在膝上型電腦上或開發機器配置不高的人來說這一點很重要。

Android模擬器會吃掉大約1GB記憶體,想像一下如果執行兩個模擬器(比如測試聊天應用等),再加上IntelliJ和非常吃記憶體的Chrome,可以想像電腦會有多慢。

640?wx_fmt=png

Android模擬器佔用了1GB記憶體

由於Flutter的嵌入器是原生的,因此不需要Android。這樣一來它就非常小了。

640?wx_fmt=png

原生應用只需要100MB記憶體

原生桌面應用

只是在桌面上執行Flutter應用還不能算是完整的、能用於產品的桌面應用。如果只是這樣,那感覺像是在桌面上執行移動應用。那麼還差什麼?滑鼠懸停,游標改變,滾輪互動等等,所以專案中也加入了對這些功能的支援。

專案成功地實現了這些功能,而沒有改動任何平臺程式碼。所以,它是完全獨立的包,可以包含在任何普通的 Flutter 應用中。但是,跟桌面嵌入器一起使用,就會出現奇蹟。

640?wx_fmt=gif

用Flutter實現的通用聊天應用,桌面版

這跟在Android模擬器上執行的程式碼是完全一樣的:

640?wx_fmt=png

640?wx_fmt=gif

同時開發Android和桌面應用

注意它在模擬器上表現得與普通應用一樣,但在桌面上就會改變游標,並新增滑鼠懸停效果。

桌面小窗體的展示

懸停:

640?wx_fmt=gif

游標:

640?wx_fmt=gif

目前這個專案依然在 alpha 階段,相關程式碼很快就釋出了(感興趣的可以在 Twitter 上關注 Simon Lightfoot 以獲得最新的訊息)。總而言之,這個專案的目標是在不遠的未來發布一種易於安裝、易於設定、易於使用的東西。

參考連結:

  • https://mp.weixin.qq.com/s/hCIN42OMmmc6HkOveegwWQ

  • https://medium.com/flutter-community/flutter-on-desktop-a-real-competitor-to-electron-4f049ea6b061,譯者彎月。

【End】


微信改版了,

想快速看到CSDN的熱乎文章,

趕快把CSDN公眾號設為星標吧,

開啟公眾號,點選“設為星標”就可以啦!

640?wx_fmt=gif

徵稿啦

CSDN 公眾號秉持著「與千萬技術人共成長」理念,不僅以「極客頭條」、「暢言」欄目在第一時間以技術人的獨特視角描述技術人關心的行業焦點事件,更有「技術頭條」專欄,深度解讀行業內的熱門技術與場景應用,讓所有的開發者緊跟技術潮流,保持警醒的技術嗅覺,對行業趨勢、技術有更為全面的認知。

如果你有優質的文章,或是行業熱點事件、技術趨勢的真知灼見,或是深度的應用實踐、場景方案等的新見解,歡迎聯絡 CSDN 投稿,聯絡方式:微信(guorui_1118,請備註投稿+姓名+公司職位),郵箱([email protected])。


推薦閱讀:

640?wx_fmt=gif

640?wx_fmt=gif