在 Google IO 會議上展示了一個在樹莓派上運行 Flutter 的可能性。然而,該會議并未提供全面的、一步一步的指南供用戶參考。本文旨在填補這一空白,提供詳細的操作步驟,幫助你在樹莓派上運行 Flutter。
通過遵循本文中概述的步驟,你將獲得在樹莓派上設置 Flutter 的知識和信心。無論你是初學者還是經驗豐富的 Flutter 開發者,本指南都將確保你對過程有清晰的了解,并能順利完成。
在本文中,我們特別關注使用樹莓派作為我們的嵌入式設備。然而,需要注意的是,在大多數工業項目中,您不會使用樹莓派,而是使用其他基于arm64的解決方案。在這方面,我們使用的方法也適用于大多數其他基于arm64的SOC,甚至在生產中也適用!
在深入細節之前,我想對 Moritz 在創建本文時提供的寶貴幫助表示感謝。同時,我也要感謝 Snapp Embedded 提供必要的環境和支持,使我能夠撰寫本文。
在樹莓派上運行 Flutter 需要什么?
在開始開發過程之前,更重要的是要清楚地了解在樹莓派上運行 Flutter 需要什么。讓我們來看看必要的組件:

1.樹莓派 4 Model B:這主要硬件組件。建議至少購買 4GB RAM 版本以獲得最佳性能。(2GB 版本應該也能工作。)
2.顯示器:如果你已經有顯示器,可以使用 micro HDMI 線纜將其連接到樹莓派?;蛘?,你可以考慮購買官方的 7 英寸樹莓派顯示器以進行專用設置。
3.SD 卡:樹莓派需要 SD 卡進行存儲。建議使用高質量的 Class 10 microSD 卡以獲得最佳性能。在大多數情況下,32GB 的容量應該足夠。
4.電源:為樹莓派提供可靠的電源至關重要。你可以使用官方的樹莓派電源,或者任何能穩定提供 5.0V / 3.0A 輸出的充電器。
5.輸入設備:為了與樹莓派交互,需要使用鼠標和鍵盤??梢酝ㄟ^ USB 或藍牙將它們連接到樹莓派。
確保擁有這些必要的組件,就可以準備好設置樹莓派來運行 Flutter ,并可以滿懷信心的開始你的開發之旅。
開發環境
當涉及到為嵌入式設備創建應用程序時,開發過程不同于傳統的移動應用程序開發。在移動設備開發中,您使用筆記本電腦或PC作為開發設備,使用手機作為運行設備,與此不同,嵌入式設備開發需要使用不同的方法。
在嵌入式設備開發的情況下,您的樹莓派既是運行設備又是開發設備。這意味著您可以使用樹莓派來構建和測試您的Flutter應用程序,提供獨特的開發體驗。您可以使用我們將在本文中展示的一些方法進行交叉編譯,但這通常會帶來額外的挑戰,我們在此文中不涉及交叉編譯。此外,在樹莓派上構建實際上并不需要很長時間,所以不妨去喝杯咖啡。
此外,你還可以選擇利用某些技術,例如將代碼推送到 GitHub 并在樹莓派上獲取它。因此,你可以在桌面機器上開發大部分應用程序,實際上,這種方法的效果比我們想象的要好。但是值得注意的是,這種方法可能會為你的開發過程引入額外的復雜性和挑戰,不過我們目前還沒有遇到任何問題。
使用什么操作系統
為樹莓派選擇合適的操作系統(OS)對于有效運行 Flutter 至關重要。重要的是要注意Flutter 不能在 32 位操作系統上運行。幸運的是,有多種 64 位選項可供選擇,例如樹莓派 OS 64 位(以前稱為 Raspbian)和 Ubuntu 64 位。
樹莓派64 位系統是一個官方支持的操作系統,它為用戶提供友好的界面、有出色的硬件支持和專門針對樹莓派設備優化的性能。它預裝了用于簡化設置的軟件和工具,這是在樹莓派上運行 Flutter 的一個有吸引力的選擇。
除了樹莓派操作系統,另一個值得注意的選項是 Ubuntu Core。Ubuntu Core 是為嵌入式設備設計的精簡版 Ubuntu,它具有增強的安全性、可靠性和易于管理性。
Ubuntu Desktop 64 位系統 是一個知名且廣泛使用的 Linux 發行版,它提供強大且多功能的開發環境。然而,值得注意的是,由于 Ubuntu Desktop 的系統要求較高,對于樹莓派等嵌入式設備來說,它可能會比較占用資源。這就是為什么我們不推薦它用于我們的應用程序。
最終,這些選項之間的選擇是主觀的,取決于個人偏好和需求。值得注意的是,除了樹莓派操作系統和 Ubuntu,還有各種其他 64 位 Linux 發行版可供選擇,你可以自由選擇最符合你需求的操作系統。
在工業場景中,考慮創建一個專門針對你的項目需求定制的自定義發行版,以獲得最佳性能和資源利用率可能是有益的。有關更多信息,請查看 Yocto-Project。
https://www.yoctoproject.org/
如何安裝樹莓派操作系統
為了簡化將所選操作系統安裝到樹莓派上的過程,我們將向你介紹樹莓派燒錄器。這個用戶友好的工具簡化了將操作系統鏡像寫入 SD 卡的過程。下面,我們將提供詳細的分步指南,幫助你開始安裝。
1.首先,從官方網站下載樹莓派燒錄器。下載鏈接。
https://www.raspberrypi.com/software/
2.下載并安裝樹莓派燒錄器后,打開應用程序。
3.你可以從樹莓派燒錄器提供的可用操作系統列表中選擇與想要的操作系統選項,例如樹莓派 OS 64 位或 Ubuntu 64 位。
4.或者,如果你已經下載了以 .img 格式提供的自定義操作系統鏡像,你可以在樹莓派燒錄器中選擇“使用自定義”選項。這允許你從計算機中選擇自定義操作系統鏡像文件,并繼續進行安裝。
5.現在,將 SD 卡插入計算機的讀卡器插槽。確保 SD 卡為空或已經備份任何現有數據,因為安裝過程將覆蓋卡內的內容。
6.在樹莓派燒錄器中,點擊“選擇 SD 卡”選項,并從可用驅動器中選擇你的 SD 卡。仔細檢查以確保選擇了正確的驅動器,以避免意外數據丟失。
7.選擇 SD 卡后,點擊“寫入”按鈕以啟動操作系統鏡像寫入過程。樹莓派燒錄器將下載所選的操作系統鏡像(如果你在步驟 3 中選擇了某個選項)或寫入自定義操作系統鏡像(如果你在步驟 4 中選擇了“使用自定義”選項)到 SD 卡。
8.一旦操作系統鏡像成功寫入 SD 卡,你將從樹莓派燒錄器收到通知或確認消息。
9.安全地從計算機的讀卡器中彈出 SD 卡。
隨著操作系統鏡像成功寫入 SD 卡,你現在可以準備繼續設置樹莓派了。將 SD 卡插入樹莓派的 SD 卡插槽,并打開設備電源以開始啟動過程。樹莓派將使用已安裝的操作系統進行初始化,允許你繼續安裝 Flutter 并運行你的應用程序。
Linux 知識探索:顯示服務器
在我們深入 Flutter 的安裝過程之前,了解 Linux 操作系統的一些基本方面是至關重要的。我們需要熟悉的一個關鍵組件就是 Linux 上的顯示服務器。
如本文所述:
顯示服務器是一個程序,負責協調其客戶端與操作系統其余部分之間的輸入和輸出,以及與硬件和操作系統之間的輸入和輸出?;旧?,由于顯示服務器的存在,你可以以圖形方式(GUI)使用計算機。沒有顯示服務器,你將只能使用命令行界面(TTY)。
顯示服務器為圖形環境提供了框架,以便你可以使用鼠標和鍵盤與應用程序交互。
顯示服務器通過顯示服務器協議(如 X11)與其客戶端進行通信。顯示服務器是任何圖形用戶界面特別是窗口系統中的關鍵組件。
Linux 上最流行的兩種顯示協議是 Wayland 和 X Window 系統(X11 或 X.Org)。這些協議定義了圖形數據如何在屏幕上傳輸和渲染,促進了顯示服務器、應用程序和硬件之間的通信。
X11,也稱為 X.Org,是 Linux 中長期存在的標準顯示協議。它為圖形顯示管理提供了可靠的框架,并提供了窗口管理和網絡透明度等功能。盡管年代久遠,X11 仍然受到各種桌面環境和窗口管理器的廣泛支持。
Wayland 是一個現代、輕量級的顯示協議,注重性能、安全性和簡化的用戶體驗。它提供直接渲染、更流暢的窗口管理并且能夠減少延遲,所以其在 Linux 發行版中越來越受歡迎。
了解這些知識對于理解我們在接下來將使用的 Flutter 嵌入器的選擇至關重要。
在樹莓派上運行 Flutter 的選項
當在樹莓派上運行 Flutter 時,我們有三個主要選項可供選擇:(當然還有其他選項,但在此討論中,我們將重點關注以下三個。)
1.Flutter Linux 桌面:Flutter 提供對 Linux 桌面環境的支持,允許你直接在樹莓派上開發和運行 Flutter 應用程序。此選項提供了最全面和最通用的 Flutter 體驗,提供了對 Flutter 全部功能和特性的訪問。
2.由 Ardera 開發的 Flutter-pi 引擎嵌入器:另一個選項是 Ardera 開發的 Flutter-pi 引擎嵌入器。它專門設計用于優化樹莓派設備上的 Flutter。
3.由 Sony 開發的 Flutter-elinux引擎嵌入器:Sony開發了 Flutter-elinux 引擎嵌入器,旨在實現 Flutter 與嵌入式 Linux 系統的無縫集成。此引擎嵌入器專注于在各種基于 arm64 的選項上運行 Flutter,為運行 Flutter 應用程序提供增強的性能和穩定性。
在本文中,我們將主要關注 Flutter-eLinux,并將其與經典的 Flutter 進行比較。通過探索這兩種方法之間的相似性和差異性,我們可以更深入地了解它們各自的優點和局限性。
值得注意的是,Flutter-pi 主要專注于樹莓派平臺(如文檔中所述)。由于我們的目標是找到一個既能在樹莓派上運行,又能在各種其他 arm64 設備上運行的解決方案,因此我們只會關注 Sony 提供的解決方案。然而,我們不能也不想判斷哪個解決方案更好,我們只想說的是,因為 Sony 解決方案的方法和出色的文檔,我們選擇了它。
為什么我們需要 Flutter-eLinux?
在我們深入探討使用這兩種方法運行 Flutter 的細節之前,讓我們先探索一下 Flutter Linux 桌面和 Flutter-elinux 之間的關鍵區別。理解這些區別將有助于我們理解為什么我們不在樹莓派上使用普通的 Flutter。
如本文所述:
最大的區別是 Flutter-elinux 完全不使用 GTK/GDK。它使用 Wayland、X11 或 DRM 后端。另一方面,Linux 上的 Flutter 桌面嚴重依賴 GTK/GDK,而 GTK/GDK 又需要 X11。
那么,你可能會問自己,這對我們來說為什么重要?
X11 仍然是許多庫和包(尤其是在桌面環境中)的依賴項,所以很難擺脫它,而同時 Wayland 顯然是未來的發展方向。
如果我們看看最新的 arm64 硬件,我們會發現(幾乎)所有硬件現在都支持 Wayland,而且第一批(來自 NXP 的 iMX8 系列)甚至已經不再支持 X11。
與桌面環境相比,嵌入式解決方案通常使用一個更精簡的操作系統,這個操作系統通常是通過 Yocto-Project 等工具單獨定制的。因此,使用 Wayland 要容易得多,而且其采用速度也要快得多。如果我們希望在工業應用中使用 Flutter,那么我們絕對應該能夠使用 Wayland,而不依賴于 X11。
Linux 桌面與嵌入式 Linux 堆棧
遺憾的是,使用自定義嵌入器會影響插件兼容性。Flutter-elinux 使用了與 Flutter Linux 桌面不同的引擎嵌入器。這意味著,如果你有一個專門為 Flutter Linux 桌面設計的插件,它可能無法與 Flutter-elinux 兼容。在這種情況下,你可能需要創建一個與 Flutter-elinux 引擎嵌入器兼容的插件。查看此 Twitter 線程。
性能比較:Flutter 桌面與 Flutter-elinux
為了評估這兩種選項的性能,我們將使用計數器應用和咖啡機應用。我們將在 profile 模式下運行這些應用,并使用開發工具分析它們的性能。
在樹莓派上的性能
在第一個場景中,我們將使用帶有默認 X11 顯示后端的樹莓派 OS。
硬件:樹莓派 4 Model B 8GB
操作系統:樹莓派64 位操作系統(Raspbian)
顯示后端:X11(Raspbian 的默認顯示后端)。Wayland 目前在樹莓派操作系統上僅以 beta 版本提供。盡管如此,為了比較,我們還是在系統級顯示服務器之上運行了 Wayland)
重要提示! 在我們的測試過程中,我們遺憾地丟失了一些運行 Flutter-elinux 測試的圖片。盡管如此,我們仍然有結果,并且會分享出來。
讓我們看看圖片。
左側:計數器應用 — Flutter-elinux — Wayland 后端(在 X11 之上?。?44 FPS。
右側:計數器應用 — Flutter-桌面 — X11 后端 — 59 FPS。
無圖片:計數器應用 — Flutter-elinux — X11 后端 — 57 FPS。
Flutter-elinux-wayland
Flutter-desktop-x11
現在,讓我們用另一個項目來測試這些選項。對于這個比較,我們將使用 Moritz 創建的“咖啡機”項目,該項目涉及更多的復雜性,包括圖表和動畫。
https://github.com/Snapp-X/coffeemachine
讓我們再次看看結果。這次,我們不僅在已經運行的 X11 后端之上啟動了 Wayland(正如我們所預期的,這會導致性能不佳),而且我們還嘗試直接在樹莓派操作系統上運行 Wayland 作為系統級顯示服務器,這目前以 beta 版本支持(并且真的不建議使用,也不穩定)。
左側:咖啡機 — Flutter-elinux — Wayland 后端(在 X11 之上?。?41 FPS。
右側:咖啡機 — Flutter-桌面 — X11 后端 — 59 FPS。
無圖片:咖啡機 — Flutter-elinux — 直接使用 Wayland 后端(beta)— 55 FPS。
無圖片:咖啡機 — Flutter-elinux — X11 后端 — 58 FPS。
Flutter-elinux-wayland
Flutter-desktop-x11
根據 Flutter-elinux 提供的信息,我們可能期望 elinux 的性能更好。然而,結果表明,在某些設置下,Flutter Linux 桌面甚至優于 Flutter-elinux。那么,問題是為什么?
這是 Flutter-elinux 的問題嗎?我們不這么認為。問題很可能在于樹莓派操作系統的默認顯示后端,即 X11。當在 X11 之上運行一個 Wayland 合成器時,它肯定會嚴重影響設備的性能,導致效率降低。
此外,即使在樹莓派 OS 上使用 Wayland 作為系統級選項也沒有那么理想,盡管我們可以看到顯著的改進,但這種設置遠不穩定,并且在系統的其他地方產生了錯誤。
顯然,在樹莓派操作系統上最簡單的選擇是使用 X11 作為系統級選項,并且也將其用于你的 Flutter 開發。然而,對于我們的長期解決方案來說,重要的是也要能夠在 Wayland 下運行,這在這里已經得到了證明。
出于好奇,我們還測試了 Ubuntu 下的性能,盡管它是一個桌面環境,但它默認使用 Wayland 作為顯示后端。
在 Ubuntu 上的性能
在深入細節之前,重要的是要注意,對于像樹莓派這樣的設備來說,Ubuntu 可能會占用大量資源。即使是簡單的任務,如打開瀏覽器或運行其他應用程序,也可能需要一些時間,而且默認的用戶界面可能會顯示出明顯的延遲。
我們使用了 Ubuntu 22.04 進行測試,因為它默認使用 Wayland 作為顯示后端。查看此資源。
2017 年,Ubuntu 在 17.10 版本中將其設為默認。然而,這個實驗并不成功,他們在 Ubuntu 18.04 中又改回了 Xorg?,F在,在 21.04 版本中,Wayland 再次成為默認。
在這個特定的測試中,我們只專注于評估 Ubuntu 中 Wayland 的性能,而沒有評估 X11 的性能。
左側:計數器應用 — Flutter-elinux — Wayland 后端 — 42 FPS。
右側:咖啡機 — Flutter-elinux — Wayland 后端 — 15 FPS。
是的,正如你所看到的,Ubuntu 下的結果非常糟糕,因為 Ubuntu 桌面對于樹莓派等嵌入式設備來說太重了。
結論
如果你正在尋找使用 Flutter 創建測試或原型的方法,那么使用樹莓派設備和 Flutter 桌面可以提供令人滿意的性能。這種設置允許你運行測試應用程序并驗證其功能。
然而,當你正在創建一個真正的產品時,你的應用程序是主要且唯一運行的應用程序,那么建議考慮創建一個專門針對你的硬件和應用程序需求定制的自定義 Linux 發行版。
在這種情況下,使用 Wayland 后端的 Flutter-elinux 是一個極好的選擇。這種設置確保你的應用程序獲得必要的資源,并優化性能,從而提供流暢且可靠的用戶體驗。
在樹莓派操作系統上安裝 Flutter
雖然建議遵循官方文檔在 Linux 上安裝 Flutter,但我們將在此文中提供安裝 Flutter 的最簡單方法的概述。請注意,安裝過程可能會隨著時間的推移而演變,因此參考官方文檔可以確保你獲得最新的說明。
在 Linux 上安裝 Flutter 的最簡單方法是使用 snapd。在繼續之前,請確保你的機器上已安裝 snapd。如果尚未安裝,你可以
一旦安裝了 snapd,你可以通過使用 Snap Store 或命令行來安裝 Flutter。
打開終端并輸入以下命令:
sudo snap install flutter--classic
你可以使用以下命令找到你的 Flutter 路徑:
fluttersdk-path
在樹莓派操作系統上安裝 Flutter-eLinux
在使用 Flutter-elinux 在你的機器上安裝 Flutter 之前,你需要確保已安裝幾個依賴庫。
這些庫包括 curl、unzip、git、clang、cmake(版本 3.15 或更高)和 pkg-config。你可以通過在終端中運行以下命令來安裝這些庫:
sudoapt install curl unzip git clang cmake pkg-config
一旦安裝了依賴庫,你就可以繼續安裝 Flutter-elinux。首先克隆 Flutter-elinux 倉庫并將其移動到 /opt/ 目錄:
$gitclonehttps://github.com/sony/flutter-elinux.git$sudomvflutter-elinux /opt/
接下來,更新你的系統路徑以包含 Flutter-elinux 二進制文件:
$exportPATH=$PATH:/opt/flutter-elinux/bin
為了確保安裝成功且一切正常工作,運行以下命令以檢查 Flutter-elinux 環境:
$flutter-elinux doctor
運行 flutter-elinux devices 命令將顯示已連接的設備。你應該看到兩個已連接的設備,一個使用 elinux-x11 后端,另一個使用 elinux-wayland 后端。
$flutter-elinux devices2 connected devices:
eLinux (desktop) ? elinux-wayland ? flutter-tester ? Ubuntu 20.04.2 LTS 5.8.0-63-genericeLinux (desktop) ? elinux-x11 ? flutter-tester ? Ubuntu 20.04.2 LTS 5.8.0-63-generic
在 X11 上運行
如果你打算使用 x11 后端,你將需要安裝 libx11-dev 庫,通過運行以下命令:
$sudo apt install libx11-dev
然后你可以像這樣運行應用程序:
$flutter-elinux run -d elinux-x11
在 Wayland 上運行
對于 Wayland 后端,你將需要安裝 libwayland-dev 和 wayland-protocols 庫:
$sudo apt install libwayland-dev wayland-protocols
如果你計劃在系統級 X11 之上運行 Wayland(我們目前推薦這樣做),你必須安裝一個 Wayland 合成器。最常用的是 Weston,可以通過以下命令安裝:
$sudo apt install weston
因此,在以 wayland 模式運行你的 Flutter 應用程序之前,你可以輕松地通過運行以下命令啟動 Weston:
$weston &
然后運行:
$flutter-elinux run -d elinux-wayland
IDE 和開發
我們推薦使用 VS Code 作為你的 IDE,因為它輕量級且即使在樹莓派上也能運行得很好。
樹莓派操作系統
要在樹莓派上安裝 VS Code,你可以簡單地在終端中運行以下命令:
sudo apt updatesudo apt installcode
在此鏈接中找到更多信息。
Ubuntu
如本文檔所述,
在基于 Debian/Ubuntu 的發行版上安裝 Visual Studio Code 的最簡單方法是下載并安裝 .deb 包(64 位),可以通過圖形軟件中心(如果可用)或通過命令行安裝:
sudo apt install ./
-
嵌入式設備
+關注
關注
0文章
116瀏覽量
17347 -
Raspberry Pi
+關注
關注
2文章
620瀏覽量
22912 -
樹莓派
+關注
關注
121文章
1949瀏覽量
107003
發布評論請先 登錄
評論