天天看點

初探Flutter在IoT場景下生态和趨勢1、IoT系統開發痛點2、Flutter的前世今生

1、IoT系統開發痛點

1.1、IoT領域(尤其 RTOS )系統開發碎片化

IoT 領域,一個避不開的詞就是碎片化。在硬體方面,廠商、架構、晶片、傳感器等等方面的差異,形成了硬體體系的多樣性。

在應用場景方面,面向衆多行業,衆多品類等特性造就了應用場景十分分散。在開發生态方面,又有着不同類型的系統平台,例如 Linux、Android、RTOS 等。

即便是在 RTOS 這一類平台上,也有着衆多不同的選擇,不同 RTOS 間,程式設計規範、接口等難以做到統一,故其碎片化的程度也愈發嚴重。綜合各個方面來看,IoT 領域的系統開發碎片化目前依然較為嚴重。

初探Flutter在IoT場景下生态和趨勢1、IoT系統開發痛點2、Flutter的前世今生

1.2、多端開發的成本

IoT 場景下,由于運用場景的多樣性,涉及到不同端的開發。例如,在裝置側可以使用輕量級的 RTOS 系統,也可以使用更複雜的Android;而在面向使用者側的移動端,又可以選擇 iOS、Android 、H5。甚至有些情況下,同一款應用需要同時在不同的兩端或三端開發,以适配不同的硬體、系統。

多端開發的選擇會受控于許多方面,其中一部分就是開發成本問題。多端開發成本主要展現為一下幾個方面:應用分發管道不統一、技術棧各不相同、開發人力成本較高。

應用分發管道不統一

許多方案都需要應用分發平台,才能夠保持應用的不斷更新。對于 iOS,應用的分發一般隻有 App Store,在整個應用分發行業中,App Store 算是比較統一、規範的應用分發平台。對于 Android 而言,由于其開放性較高,系統對應用管控也相對較弱,是以 Android 對應的分發平台既多、又雜、還亂。國外分發平台有 Google Play、Amazon AppStore 等;國内分發平台有華為應用市場、小米應用市場、PP 助手安卓商店等。各家分發平台對軟體的要求規範不盡相同,相比 App Store,目前還沒有形成一套完善統一的分發平台。RTOS 一般不使用應用分發平台,而是通過 OTA(Over The Air)等方式更新軟體。Web 端每一次請求頁面,都能擷取最新版本的應用,也就不需要對應的分發平台了。

技術棧各不相同

每一種平台對于的技術棧其實也各不相同,單從開發語言的角度來說,iOS 開發語言一般是 Object-C、swift。Android 開發語言是 Java、Kotlin。Web 前端開發語言是 HTML、CSS、JavaScript,後端則有 PHP、Java、Python 等。RTOS 應用開發語言一般選用 C/C++。

開發人力成本較高

如果同一款應用,需要分發到不同平台,那麼可能需要不同的開發團隊分别完成對應某端的開發,這樣也就帶來了成倍的人力成本。即使是讓同一個團隊完成多端的開發,也需要大量地學習新技術棧的時間,間接的帶來人力成本。

初探Flutter在IoT場景下生态和趨勢1、IoT系統開發痛點2、Flutter的前世今生

2、Flutter的前世今生

由于多端開發存在着上一節講述的等等問題,跨平台的解決方案和架構近年來一直是多端開發備受關注的點。目前也有不少的跨平台解決方案。

2.1、跨平台解決方案

2.1.1、WebView

在 Android 中,有一個原生控件叫做 WebView,在 iOS,也有一個與之對應的原生控件叫做 UIWebView。這兩個控件可以直接渲染 HTML 和 CSS 的代碼,也可以通過 JavaScript 直接調用原生相關接口。于是,就有了基于 JavaScript 和 WebView 的跨平台方案。隻要将 View 基于 WebView 來實作,那麼同一套代碼就可以在這兩個平台上運作了。WebView 主要是通過 HTML 來建構自己的界面,再将其顯示在各個平台的 WebView 中。但是它預設是不能調用本地的一些服務的(比如相機、 藍牙等),是以需要通過 JavaScript 進行橋接調用Native的一些代碼來完成某些功能。除此之外,它本身的體驗、性能都并不理想。

初探Flutter在IoT場景下生态和趨勢1、IoT系統開發痛點2、Flutter的前世今生

2.1.2、React Native

在尋求最佳跨平台解決方案的過程中,無疑 React Native 是之前最優秀的一個。React Native (簡稱RN) 是Facebook于2015年4月開源的跨平台移動應用開發架構,是 Facebook 早先開源的JS架構 React 在原生移動應用平台的衍生産物,目前支援 iOS 和 Android 兩大平台。

React Native 使用 JavaScript 語言,類似于 HTML 的 JSX(JSX是一個看起來很像XML 的JavaScript 文法擴充),以及 CSS 來開發移動應用,熟悉 Web 前端開發的技術人員隻需很少的學習就可以進入移動應用開發領域。相對于 WebView 而言,React Native 在保留基本渲染能力的基礎上,用原生自帶的 UI 元件實作核心的渲染引擎,進而保證了良好的渲染性能。但是,由于 React Native 的本質是通過 JavaScript VM 調用原生接口,通信相對比較低效,而且架構本身不負責渲染,而是是間接通過原生進行渲染的。在 React Native 上做出非常多貢獻的 Airbnb 之前就宣布放棄 React Native,而轉向 Native 進行開發。

初探Flutter在IoT場景下生态和趨勢1、IoT系統開發痛點2、Flutter的前世今生

2.1.3、Flutter

Flutter 是 Google 推出并開源的移動應用開發架構,主打跨平台、高保真、高性能。開發者可以通過 Dart 語言開發 App,一套代碼同時運作在 iOS 和 Android 平台。從Flutter架構上來看,主要分為 Framework、Engine、Embedder:

Flutter Framework:這是一個純 Dart 實作的 SDK,它實作了一套基礎庫,自底向上:底下兩層(Foundation和Animation、Painting、Gestures)在 Google 的一些視訊中被合并為一個Dart UI 層,對應的是 Flutter 中的 dart:ui 包,它是 Flutter 引擎暴露的底層 UI 庫,提供動畫、手勢及繪制能力。Rendering 層,這一層是一個抽象的布局層,它依賴于 Dart UI 層,Rendering 層會建構一個 UI 樹,當 UI 樹有變化時,會計算出有變化的部分,然後更新 UI 樹,最終将 UI 樹繪制到螢幕上,這個過程類似于 React 中的虛拟 DOM 。Rendering 層可以說是 Flutter UI 架構最核心的部分,它除了确定每個 UI 元素的位置、大小之外還要進行坐标變換、繪制(調用底層 dart:ui )。Widgets 層是 Flutter 提供的的一套基礎元件庫,在基礎元件庫之上,Flutter 還提供了 Material 和 Cupertino 兩種視覺風格的元件庫。Flutter 開發的大多數場景,隻是和這兩層打交道。

Flutter Engine:這是一個純 C++ 實作的 SDK,其中包括了 Skia 引擎、Dart 運作時、文字排版引擎等。在代碼調用 dart:ui 庫時,調用最終會走到 Engine 層,然後實作真正的繪制邏輯。

Embedder:嵌入層,即把 Flutter 嵌入到各個平台上去,包括渲染 Surface 設定、線程設定以及插件等。

初探Flutter在IoT場景下生态和趨勢1、IoT系統開發痛點2、Flutter的前世今生

接下來,可以看看 Flutter 與 Native、React Native 之間的對比。

Android Native App 在繪圖的時候,要先調用 Android 架構的 Java 代碼,然後再調用 Skia(C/C++)繪圖引擎代碼,最後生成的 CPU 或者 GPU 指令,在裝置上完成繪圖。

React Native 首先要調用架構本身的 JavaScript 代碼,然後再調用 Android 架構的 Java 代碼,然後調用 Skia,這比 Native App 嚴格多出了一個步驟,是以它的這個性能肯定是不及原生的,但是在 Flutter App 中并不是這樣。

Flutter APP 在繪圖的時候,是先調用 Flutter 架構的 Dart 代碼,然後直接調用 Skia(C/C++)代碼,從下圖可以看出 Flutter 架構代碼完全取代了 Android 的 Java 代碼,是以隻要 Flutter 架構 Dart 代碼的效率可以媲美原生架構的 Java 代碼的時候,那麼 Flutter 的性能就可以媲美原生 App 。

初探Flutter在IoT場景下生态和趨勢1、IoT系統開發痛點2、Flutter的前世今生

2.2、Flutter的優勢

談到 Flutter 的優勢之前,可以想想 Flutter 到底解決了什麼問題。總結了兩點:提供一種跨平台方案和提高跨平台性能。

初探Flutter在IoT場景下生态和趨勢1、IoT系統開發痛點2、Flutter的前世今生

提供一種跨平台方案:目前 Flutter 主要在移動端 Android/iOS 雙端跨端,Flutter 的願景是成為一個多端運作的 UI 架構,能夠支援不僅僅是移動端,還包括 Web、桌面、嵌入式裝置。在2019 Google I/O 開發者大會上推出的使用 Flutter 開發 Web 應用的架構,同年9月釋出Flutter 1.9,并将 Flutter web 合入 Flutter 主倉庫。是以 Flutter 提供一種比 WebView、React Native “更能跨”的跨平台方案。

初探Flutter在IoT場景下生态和趨勢1、IoT系統開發痛點2、Flutter的前世今生

提高跨平台性能:Flutter 性能優勢最主要方面是其接近于 Native 的架構,上層 App 的布局、資料等由 Dart 直接編寫,沒有 JavaScript VM 及橋接轉換部分帶來性能開銷。渲染也不需要再次調用 Native 那一套渲染方式,而是直接使用Skia進行渲染。除此之外,Flutter 還加入了 AOT (Ahead of time)即 “提前編譯” 來送出運作效率。

2.3、Flutter4IoT

在 Flutter for IoT 場景的可行性方面,從平台的角度來,Flutter 利用 Embedder 嵌入層對下層的适配,能夠降低甚至忽略對下層系統及平台的依賴。

從性能的角度,Flutter 的性能優勢接近原生,也能夠在更多資源受限的裝置上運作起來。

從生态的角度,Flutter 跨多端的能力,也能夠為 IoT 系統開發帶來更加豐富的開發者,進而完善開發生态及軟體生态。

從成本的角度,IoT 面向不同硬體、不同行業、不同開發生态也隻需要同一個研發隊伍,利用 Flutter 就能完成各種場景的開發。

綜合來看,Flutter 是比較适合在 IoT 系統開發領域施行的一種方案。

初探Flutter在IoT場景下生态和趨勢1、IoT系統開發痛點2、Flutter的前世今生

在 Flutter for IoT 應用場景方面,首先可以分析一下 Google 推出 Flutter 的動機。表面上看,Google 推出 Flutter 是幫助開發者解決多端統一開發的問題。但筆者覺得實際上,Google 更深層次的動機是:為 Fuchsia OS 的開發生态及應用生态做鋪墊!

Apple 在其強大的生态閉環完成了一次又一次的戰役:面向智能手表、智能手機、個人電腦分别推出了watchOS、iOS、MacOS 等系統,每種系統生态都在不斷完善和擴大。Google 其實也推出了與之對應 Android Wear、Android、Chrome OS,但我們都可以看到,好像也隻有 Android 生态是成功的。是以 Google 推出了 Fuchsia OS,下一代微核心、跨平台的作業系統。Google 也明白 Android 的成功并不是它想推就能夠推成功的。Google 需要一套大家都願意進來玩的生态,其實那就是 Flutter 。Flutter 先為開發者提供解決跨端開發的能力,解決人力成本等問題。當開發者都進入 Flutter 的生态以後,Fuchsia OS 的應用生态問題也自然而然地解決了。

筆者認為的 Flutter4IoT 應該是:Flutter Lite + AliOS Things = 面向IoT、弱互動、 窄場景的帶屏裝置。

Flutter Lite 是一個 Flutter 的輕量級版本,基本實作 Flutter 的所有功能,并且友善裁剪。

AliOS Things 又是面向IoT領域的作業系統,并且有輕量級的微核心版本,可快速在不同平台上移植。

這樣的組合能夠完成開發生态、應用生态、硬體生态的更好适配, Flutter Lite + AliOS Things 對硬體性能要求可以大大降低,進而更加适合在較窄應用場景的方案上運作,此外,該方案提供一些相對較弱的人機互動。綜合來看,Flutter Lite + AliOS Things 能夠快速開發地帶屏終端的系統應用,并且通過少量修改即可快速移植到新平台上快速落地新項目。

初探Flutter在IoT場景下生态和趨勢1、IoT系統開發痛點2、Flutter的前世今生

如需更多技術支援,可加入釘釘開發者群,或者關注微信公衆号

初探Flutter在IoT場景下生态和趨勢1、IoT系統開發痛點2、Flutter的前世今生

更多技術與解決方案介紹,請通路阿裡雲AIoT首頁

https://iot.aliyun.com/