為什么阿里巴巴騰訊和Google之類的企業(yè)都在使用Flutter開發(fā)App?
說到Flutter,絕對繞不開Fuchsia,這個是谷歌開發(fā)的一款全新的操作系統(tǒng),GitHub地址以及Google source主頁。Fuchsia內(nèi)核是Magenta Kernel,一個基于LittleKernel的項目。該系統(tǒng)與Android相比,無論是存儲器還是內(nèi)存之類的硬件要求都大幅降低,外界推論是一款面向物聯(lián)網(wǎng)的系統(tǒng)。筆者倒是沒有查到谷歌開發(fā)這款操作系統(tǒng)的目的,如果有知曉的,也煩請告知。
就像很多博客主說的那樣,如果只是取代Android,那無疑是一種很不好的做法。任何技術的推動,都得靠背后的商業(yè)驅動,尤其是這種涉及到手機廠商利益的技術。
Flutter
Flutter是Fuchsia的開發(fā)框架,是一套移動UI框架,可以快速在iOS、Android以及Fuchsia上構建高質量的原生用戶界面。 目前Flutter是完全免費、開源的,GitHub地址。其官方編程語言為Dart,也是一門全新的語言。所以說,上手成本比較高,對于移動端開發(fā)人員,語言以及框架都是全新的,整個技術棧的積累也都得從頭開始。
可以看下其官方介紹的特性:
快速開發(fā):Flutter的熱重載可以快速地進行測試、構建UI、添加功能并更快地修復錯誤。
富有表現(xiàn)力,漂亮的用戶界面:自帶的Material Design和Cupertino(iOS風格)widget、豐富的motion API、平滑而自然的滑動效果。
響應式框架:使用Flutter的現(xiàn)代、響應式框架,和一系列基礎widget,輕松構建您的用戶界面。
訪問本地功能和SDK:Flutter可以復用現(xiàn)有的Java、Swift或ObjC代碼,訪問iOS和Android上的原生系統(tǒng)功能和系統(tǒng)SDK。
統(tǒng)一的應用開發(fā)體驗:Flutter擁有豐富的工具和庫,可以幫助開發(fā)者輕松地同時在iOS和Android系統(tǒng)中實現(xiàn)想法和創(chuàng)意。
原生性能:Flutter包含了許多核心的widget,如滾動、導航、圖標和字體等,這些都可以在iOS和Android上達到原生應用一樣的性能。
其實從官方特性來看,唯一有點吸引力的就是統(tǒng)一的應用開發(fā)體驗。一套代碼運行在多個平臺,做到真正的跨平臺。像熱加載,目前Android開發(fā)本身就支持了,響應式框架以及訪問本地功能和SDK,對于Native來說,本身并沒有多大的吸引。至于漂亮的用戶界面,國內(nèi)的商業(yè)項目,哪一個會去按照Material Design去設計。
跨平臺本身,往往意味著性能受損,通用性解決不了的問題,又得回到Native去實現(xiàn)。所以這些因素也是跨平臺從移動端誕生之初就開始提,到現(xiàn)在也沒有被很好解決的一個原因。至于谷歌能夠做到什么程度,或者說開發(fā)者該保持什么期許,我覺得都不好說,或許谷歌解決了一個多年的難題,或者又像被谷歌放棄掉的其他項目一樣。拋開商業(yè)層面,對于技術人員,我們更多的是應該去關注它的思想,谷歌是如何去解決這些實際存在很久的問題的,至于技術本身的發(fā)展,這個是個人開發(fā)者無法去左右的,技術的更迭,保持一種學習的狀態(tài),然后努力鍛煉身體,就能夠保證不被淘汰掉。
Dart
Dart是谷歌開發(fā)的計算機編程語言,于2011年10月份發(fā)布,可以被用于web、服務器、移動端和物聯(lián)網(wǎng)等領域的開發(fā)。Flutter采用Dart,原因很多,拋開商業(yè)層面的Java版權問題,單純從技術層面:
Dart是AOT(Ahead Of Time)編譯的,編譯成快速、可預測的本地代碼,使Flutter幾乎都可以使用Dart編寫;
Dart也可以JIT(Just In Time)編譯,開發(fā)周期快;
Dart可以更輕松地創(chuàng)建以60fps運行的流暢動畫和轉場;
Dart使Flutter不需要單獨的聲明式布局語言;
Dart容易學習,具有靜態(tài)和動態(tài)語言用戶都熟悉的特性。
Dart最初設計是為了取代JavaScript成為web開發(fā)的首選語言,最后的結果可想而知,到Dart 2的發(fā)布,專注于改善構建客戶端應用程序的體驗,可以看出定位的轉變。用過Java、Kotlin的人,可以很快的上手Dart。
一門語言的成敗,拋開背后的商業(yè)推動,我想很重要的一點在于其生態(tài),生態(tài)的好壞,主要包括開發(fā)者以及第三方庫的數(shù)目,目前看,Dart的生態(tài)還是比較差。對于個人開發(fā)者,可以根據(jù)心情來選擇,但是對于商業(yè)應用,有更復雜的考量標準。Dart背后有谷歌的推動,能發(fā)展到什么程度,還得看其商業(yè)運作能力了。
配置
此部分針對Mac平臺,Windows平臺的安裝配置,Linux平臺的安裝配置。由于筆者主要做移動端開發(fā),如果想使用Flutter進行iOS和Android全平臺的開發(fā),環(huán)境也建議是Mac平臺,畢竟iOS只能在Mac下進行模擬調試。
安裝Flutter
git clone -b beta https://github.com/flutter/flutter.git export PUB_HOSTED_URL=https://pub.flutter-io.cn //國內(nèi)用戶需要設置 export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn //國內(nèi)用戶需要設置 export PATH=`pwd`/flutter/bin:$PATH
iOS設置
brew update brew install --HEAD libimobiledevice brew install ideviceinstaller ios-deploy cocoapods pod setup
Android設置
下載Android Studio,安裝Flutter插件,會將Dart插件也一起安裝。
體驗Flutter
IDE建議選擇Android Studio,安裝了Flutter插件后,F(xiàn)lutter的開發(fā)跟Android 開發(fā)類似,附帶三種模版工程、斷點調試等。
在Android Studio里面新建一個Flutter Application的項目,選擇模擬器或者直接連接真機運行,就可以看到一個簡單的Flutter應用了,可以在Android和iOS不同平臺下看看差異。
Flutter架構
Flutter是一款移動應用程序SDK,一份代碼可以同時生成iOS和Android兩個高性能、高保真的應用程序。
Flutter不同平臺表現(xiàn)
Flutter對于移動開發(fā)人員,最誘惑的能力是其完全的跨平臺特性,不同于RN這種一處學到處寫,它是一處寫到出跑,但是他跟其他的跨平臺有何區(qū)別呢?
跨平臺解決方案
市面上的跨平臺解決方案,可以大致歸結為兩類:
使用平臺支持的web技術:這些解決方案基本上加載了應用程序中的移動瀏覽器,并在該瀏覽器中執(zhí)行所有的邏輯,例如PhoneGap。
本地跨平臺:程序員編寫的代碼自動轉換為Native代碼,這種方式的優(yōu)點是近乎原生的性能,例如RN、Weex、Xamarin等。
這些方案是否真正的解決了跨平臺問題呢?從目前的狀況來看,很顯然是沒有的,因為它們都始終逃不開性能、包大小、流暢性、內(nèi)存、平臺特性等問題。
2017年8月跨平臺性能測試