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

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

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

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 版本終於正式發佈了。

“全新的 UI 設計方式”Flutter

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

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

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

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

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 以及騰訊等。

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 這樣的插件也已經可以享受到這一特性帶來的種種便利了。

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

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

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桌面版能為移動開發者帶來什麼。

啟動時間

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

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

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

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

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

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

再看看這個:

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

Flutter模擬器啟動,原速

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

運行時可改變大小

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

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

還有更好的辦法嗎?有!

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

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

訪問電腦上的資源

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

沒錯,這個也能做到!

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

桌面版支持文件選擇對話框

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

熱重載和調試

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

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

原生應用中的熱重載和調試功能

內存

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

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

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

Android模擬器佔用了1GB內存

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

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

原生應用只需要100MB內存

原生桌面應用

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

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

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

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

這跟在Android模擬器上運行的代碼是完全一樣的:

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

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

同時開發Android和桌面應用

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

桌面小窗體的展示

懸停:

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

光標:

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

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

徵稿啦

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

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

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


分享到:


相關文章: