1. Flutter与嵌入式:从零开始搭建你的开发环境
大家好,我是老张。今天咱们聊聊Flutter在嵌入式领域的那些事儿。说实话,我第一次把Flutter跑在树莓派上时,心里还挺没底的——毕竟这玩意儿原本是为手机App设计的。但跑起来那一刻,我确实被惊艳到了。
1.1 Flutter在嵌入式领域的优势
为什么我要在嵌入式设备上用Flutter?说白了,就三个字:快、美、省。
- 渲染性能强:Flutter自己管渲染,不依赖系统控件。我在项目里试过,60fps的动画在树莓派3B+上跑得稳稳的。
- 跨平台省心:一套代码,Android、Linux、Windows都能跑。我有个同事,为了给不同平台写UI,维护了三套代码,后来改用Flutter,整个人都轻松了。
- 热重载真香:改完代码按一下保存,UI立马更新。调试嵌入式UI时,这功能能省你一半时间。
- 生态成熟:Material Design组件直接拿来用,不用自己画按钮、写动画。
核心观点:Flutter不是来取代Qt或LVGL的,它是给那些需要「漂亮界面+快速迭代」的嵌入式项目准备的。如果你的设备只是显示几个数字,那用LCD屏加几个像素点就够了。但如果你要做智能家居面板、工业HMI、医疗设备界面——Flutter绝对是首选。
1.2 嵌入式开发环境搭建
环境搭建这块,我踩过不少坑。咱们分Linux和Windows两条路来讲。
1.2.1 Linux环境(推荐)
我个人习惯用Ubuntu 20.04 LTS,稳定,坑少。你如果用的是其他发行版,原理一样,包管理器换一下就行。
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 安装必要工具
sudo apt install -y curl git unzip xz-utils zip libglu1-mesa
# 3. 安装Clang(Flutter嵌入式编译需要)
sudo apt install -y clang cmake ninja-build pkg-config
# 4. 安装GTK开发库(Linux桌面运行需要)
sudo apt install -y libgtk-3-dev liblzma-dev
我的经验:记得装 liblzma-dev,这个包很容易被忽略。我第一次编译Flutter嵌入式应用时,卡在链接阶段半小时,最后发现就是少了这个库。
1.2.2 Windows环境
Windows下搭建稍微麻烦点,但也不是不行。我建议你直接用PowerShell(管理员模式)操作。
# 1. 安装Chocolatey(包管理器)
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# 2. 安装必要工具
choco install -y git cmake ninja visualstudio2022buildtools
# 3. 安装Visual Studio组件(嵌入式编译需要)
choco install -y visualstudio2022-workload-vctools
注意:Windows下编译嵌入式Flutter应用,必须安装Visual Studio的C++工具链。光装MinGW是不够的,我试过,会报一堆链接错误。
1.3 Flutter SDK安装与配置
SDK安装其实不复杂,但版本选择有讲究。我个人建议用stable分支,别追新。
# 1. 下载Flutter SDK(以Linux为例)
cd ~
git clone https://github.com/flutter/flutter.git -b stable
# 2. 添加环境变量
echo 'export PATH="$PATH:$HOME/flutter/bin"' >> ~/.bashrc
source ~/.bashrc
# 3. 检查安装
flutter doctor
# 4. 启用Linux桌面支持(嵌入式开发需要)
flutter config --enable-linux-desktop
# 5. 启用嵌入式设备支持
flutter config --enable-embedded
运行 flutter doctor 后,你会看到类似这样的输出:
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.16.0, on Ubuntu 20.04, locale zh_CN.UTF-8)
[✓] Android toolchain
[✓] Linux toolchain
[✓] Chrome
[!] Android Studio (not installed)
[✓] Connected devices (1 available)
看到 [✓] Linux toolchain 和 [✓] Connected devices 就说明环境基本OK了。
避坑指南:我曾经在配置环境变量时写错了路径,结果 flutter 命令一直找不到。后来发现是 ~/.bashrc 里多了一个空格。嗯,这种低级错误,犯过一次就记住了。
1.4 嵌入式目标板准备(以树莓派为例)
树莓派是嵌入式Flutter开发的首选目标板。便宜、文档全、社区活跃。我手上有3B+和4B两块,实测都能跑。
1.4.1 烧录系统
推荐使用Raspberry Pi OS Lite(64位),不带桌面环境,省资源。
# 1. 下载镜像
wget https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2023-12-11/2023-12-11-raspios-bookworm-arm64-lite.img.xz
# 2. 解压
xz -d 2023-12-11-raspios-bookworm-arm64-lite.img.xz
# 3. 烧录到SD卡(假设SD卡设备是/dev/sdb)
sudo dd if=2023-12-11-raspios-bookworm-arm64-lite.img of=/dev/sdb bs=4M status=progress
1.4.2 启用SSH和WiFi
烧录完成后,别急着拔卡。在SD卡的boot分区里创建两个文件:
# 启用SSH(空文件即可)
touch /media/your_user/boot/ssh
# 配置WiFi
cat > /media/your_user/boot/wpa_supplicant.conf << EOF
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="你的WiFi名称"
psk="你的WiFi密码"
key_mgmt=WPA-PSK
}
EOF
1.4.3 安装Flutter运行时依赖
把SD卡插回树莓派,上电启动,SSH连进去:
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 安装EGL和DRM库(Flutter嵌入式需要)
sudo apt install -y libegl1-mesa-dev libgles2-mesa-dev libdrm-dev
# 3. 安装输入设备库
sudo apt install -y libinput-dev libudev-dev
# 4. 测试GPU是否正常工作
sudo apt install -y mesa-utils
glxinfo | grep "OpenGL renderer"
如果看到类似 OpenGL renderer: V3D 4.2 的输出,说明GPU驱动正常。
重要提醒:树莓派的GPU驱动默认是关闭的。你需要在 /boot/config.txt 里加上 dtoverlay=vc4-fkms-v3d 来启用。我第一次没加这行,Flutter应用启动后黑屏,折腾了一下午才发现问题。
1.5 验证环境:跑一个Hello World
环境都搭好了,咱们跑个例子验证一下。在开发机上执行:
# 1. 创建新项目
flutter create --platforms=linux my_embedded_app
cd my_embedded_app
# 2. 编译为嵌入式目标
flutter build linux --release
# 3. 把编译产物传到树莓派
scp -r build/linux/arm64/release/bundle pi@树莓派IP:/home/pi/my_app
# 4. SSH到树莓派,运行
ssh pi@树莓派IP
cd /home/pi/my_app
./my_embedded_app
如果屏幕上出现了一个Flutter默认的计数器应用,恭喜你——环境搭建成功了!
小结一下:这一章我们搞定了三件事——理解了Flutter在嵌入式领域的优势,搭建了开发环境,准备好了树莓派目标板。下一章,咱们会深入Flutter的嵌入式渲染原理,看看它到底是怎么在小小的树莓派上跑出流畅动画的。
嗯,环境搭建这块确实有点琐碎,但这是必经之路。我当年刚开始搞嵌入式Flutter时,光环境就折腾了两天。你现在跟着这篇文章走,顺利的话两小时就能跑起来。有什么问题,欢迎在课程群里交流。