谷歌 要用 Flutter 一統(tǒng)移動、桌面開發(fā)江湖?

“全新的 UI 設(shè)計方式”Flutter

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

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

根據(jù) Google 的官方博客介紹,F(xiàn)lutter 是應(yīng)用內(nèi)置的一個引擎,具有快速、高效、開放等特點。

1、Flutter 可以構(gòu)建界面精美的應(yīng)用

Flutter 具有強大的圖像組合能力,開發(fā)者可以不受限制地堆疊任何圖形、視頻、文本和控件。Flutter 內(nèi)置了一系列的 widgets,這些 widgets 可以幫助實現(xiàn)在 iOS 和 Android 上的良好視覺體驗。Flutter 集成并有最大程度地實現(xiàn)了 Material Design——這是 Google 的開放設(shè)計系統(tǒng)。

2、Flutter 的速度快

Flutter 基于 Skia 2D 硬件加速圖形引擎,有媲美原生應(yīng)用的速度。Flutter 的代碼基于 Dart 平臺,可以被編譯成 iOS 和 Android 平臺上 32 位和 64 位的 ARM 代碼。

3、Flutter 非常高效

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

4、Flutter 是開放的

Flutter 是一個開源項目,全球數(shù)百位開發(fā)者在為其貢獻(xiàn)代碼。Flutter 的插件生態(tài)系統(tǒng)平臺也充滿活力,有數(shù)千款插件已經(jīng)發(fā)布,避免了重復(fù)造輪子。由于 Flutter 應(yīng)用程序使用標(biāo)準(zhǔn)的 Android 和 iOS 的編譯打包工具 (build tools),因此它的開放還體現(xiàn)在您可以使用原生開發(fā)資源。

目前在 Google 內(nèi)部,F(xiàn)lutter 已經(jīng)被廣泛用于多個產(chǎn)品,比如 Google Ads 已經(jīng)將其產(chǎn)品的 iOS 版本和 Android 版本轉(zhuǎn)向使用 Flutter。而且據(jù) Google 官方透露,在正式版本之前全世界已經(jīng)有多個公司開始使用 Flutter 來開發(fā)應(yīng)用,包括 Abbey Road Studios、阿里巴巴、Capital One、Groupon、Hamilton、京東、Philips Hue、Reflectly 以及騰訊等。

Flutter 1.0 新特性

此次發(fā)布的Flutter 1.0 版本中,F(xiàn)lutter 正式開始使用 Dart 平臺新的 2.1 版本,并修復(fù)了 Bug 和提高了穩(wěn)定性。根據(jù) Google 介紹,1.0 版本中將有兩個新功能隨正式版的預(yù)覽模式提供給廣大開發(fā)者,包括引入 Flutter 到現(xiàn)有工程(Add to App)和平臺級視圖(Platform Views)。

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

起初在構(gòu)思 Flutter 的時候,Google 主要關(guān)注于從零開始構(gòu)建應(yīng)用的場景。但事實上受制于很多因素,并不是所有開發(fā)者都能從零構(gòu)建。顯然,他們更需要能夠在現(xiàn)有的應(yīng)用中用 Flutter 添加新的功能,或者分步驟、分階段將現(xiàn)有的應(yīng)用程序遷移到 Flutter。

現(xiàn)在,F(xiàn)lutter 的架構(gòu)則非常適合于這樣的場景,每個 Flutter 應(yīng)用都包含了一個用于托管 Flutter 的 Android 或 iOS 容器。此外,Google 還在不斷改善漸進(jìn)式接入 Flutter 的體驗,包括更新模板、優(yōu)化工具、完善指南等等,還能在不使用調(diào)試器啟動應(yīng)用的情況下介入和監(jiān)測現(xiàn)有 Flutter 進(jìn)程。

2、平臺級視圖(Platform Views)

此外,為了滿足開發(fā)者將 Android 或 iPhone 平臺的控件嵌入到 Flutter 應(yīng)用當(dāng)中的需求,F(xiàn)lutter 中還引入了 AndroidView 和 UiKitView 這兩個平臺級視圖的 widget 到 Flutter,可以將它們分別嵌入到指定的平臺中。

Google表示其已經(jīng)在 Android 平臺上預(yù)覽這一功能數(shù)月了,現(xiàn)在是時候?qū)⑦@一特性推廣到 iOS 平臺了。此外,像 Google Maps 和 WebView 這樣的插件也已經(jīng)可以享受到這一特性帶來的種種便利了。

據(jù)了解,這些功能將于明年二月的季度更新中正式推出。

Flutter 項目應(yīng)用端的拓展和實踐

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

Flutter Desktop Embedding 是一個使 Flutter 運行于 macOS、Linux 和 Windows 等桌面操作系統(tǒng)的項目。這是 Google 以探索的形式向用戶展示 Flutter 是有可能運行在一些沒有完整桌面環(huán)境的小型設(shè)備中的。

顯然,有這一想法的不只是Google。在 Android 開發(fā)者 Norbert Kozsir 的博客中,就介紹了一個由他和 Simon Lightfoot 創(chuàng)立的 Flutter 桌面應(yīng)用項目,其不僅可以開發(fā)真正的應(yīng)用程序,也能用于快速移動開發(fā)。

以下是其博客內(nèi)容全文:

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

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

原生桌面客戶端,加速移動開發(fā)

但在討論實際的原生桌面應(yīng)用之前,我們先來看看Flutter桌面版能為移動開發(fā)者帶來什么。

啟動時間

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

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

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

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

再看看這個:

Flutter模擬器啟動,原速

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

運行時可改變大小

不論是什么應(yīng)用,你都想測試它在不同屏幕大小下的表現(xiàn)。該怎么做呢?

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

還有更好的辦法嗎?有!

這張圖應(yīng)該能說明一切問題

訪問電腦上的資源

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

沒錯,這個也能做到!

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

這個功能最大的好處在于桌面版的實現(xiàn)使用了與移動版的實現(xiàn)相同的通道,因此不需要改變?nèi)魏未a。

熱重載和調(diào)試

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

原生應(yīng)用中的熱重載和調(diào)試功能

內(nèi)存

最后很重要的一項就是內(nèi)存,對于在筆記本電腦上或開發(fā)機器配置不高的人來說這一點很重要。

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

Android模擬器占用了1GB內(nèi)存

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

原生應(yīng)用只需要100MB內(nèi)存

原生桌面應(yīng)用

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

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

用Flutter實現(xiàn)的通用聊天應(yīng)用,桌面版

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

同時開發(fā)Android和桌面應(yīng)用

注意它在模擬器上表現(xiàn)得與普通應(yīng)用一樣,但在桌面上就會改變光標(biāo),并添加鼠標(biāo)懸停效果。

桌面小窗體的展示

懸停:

光標(biāo):

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

附《Android核心知識筆記2020》分享

前段時間我和圈子里的幾位架構(gòu)師朋友一起閑聊時的突發(fā)奇想,我們在學(xué)習(xí)Android開發(fā)的時候或多或少也受到了一些前輩的指導(dǎo),所以想把這份情懷延續(xù)下去。三個月后,這套資料就出來了,需要這份資料的朋友加Android學(xué)習(xí)交流群1049273031即可獲取。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容