Flutter基于ELinux嵌入式开发环境搭建及项目创建与打包
文章目录
目录
一、环境搭建
1.安装Linux虚拟机
下载VMWare,下载Ubuntu镜像,按VMWare操作步骤,创建虚拟机,注意资源配置,内存最好配置8GB左右,硬盘配置50GB左右, 也可以配置较少资源给虚拟机,如果后期不够用可以进行扩容;
2.安装flutter-elinux
参考https://github.com/sony/flutter-elinux进行SDK安装,下载SDK注意使用git命令下载,不要直接download资源(因为项目创建、依赖安装等需要用到SKD目录下的git配置,直接下载项目中不带git相关配置)
3.配置环境变量
环境变量配置分为两部分,vi命令编辑~/.bashrc文件,将如下环境变量粘贴到此文件;
- Flutter-elinux SDK环境变量的配置
export PATH=$PATH:/opt/flutter-elinux/bin export PUB_HOSTED_URL=https://pub.flutter-io.cn export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn export PATH=$PATH:/opt/flutter-elinux/flutter/bin - Buildroot环境变量的配置
需要从屏幕厂商拷贝Buildroot目录到linux虚拟机固定目录,配置如下环境变量;
export PATH=$PATH:/home/root1/buildroot/output/host/bin
export PATH=$PATH:/home/root1/buildroot/output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib
二、创建项目
直接用flutter-elinux官方给的指令创建项目,不要使用flutter命令,flutter命令创建出来的项目中没有elinux文件夹(不支持elinux),如果是现有项目要移植到elinux,可以使用flutter-elinux创建和现有项目相同的项目,再将原有项目代码进行移植,或者可以在新创建的项目中使用flutter-elinux create . 对elinux平台进行支持;
三、打包部署
- 参考https://github.com/sony/flutter-elinux/wiki/Building-flutter-apps,使用第三种打包方式:Use Buildroot Toolchain,用如下命令创建一个shell文件run_build.sh,方便后期执行打包命令,注意如下Buildroot相关路径的配置,另外文件创建完成后要使用chmod添加权限才可以被执行 chmod 777 ./run_build.sh:
flutter-elinux build elinux --target-arch=arm64 \ --target-compiler-triple=aarch64-buildroot-linux-gnu \ --target-sysroot=/home/root1/buildroot/output/staging \ --target-compiler-flags=--gcc-toolchain=/home/root1/buildroot/output/host
2.部署需要连接arm板:
- 用Type-C连接ARM板,主机安装HyperTerminal,新建一个连接,选择一个端口,波特率选择115200,然后点击确定,重启arm板,确定是否连接成功;
- 将ARM板连接网线,HyperTerminal命令行中使用ip addr show或者ifconfig查看板子IP;
- Linux虚拟机中,Files -> Other Locations -> Connect to Server输入ftp://192.168.4.72 进行FTP连接板子文件系统;创建一个文件夹,将打包好的包拷贝到板子的新建文件夹下;
- 启动程序,./flutter_project_getx –bundle=./
四、真机调试
1.创建真机连接配置文件
参考https://github.com/sony/flutter-elinux/wiki/Remote-target-devices,在~目录下创建一个隐藏文件,.flutter_custom_devices.json,使用flutter-elinux devices查看是否成功创建了真机的连接;
2.打debug包
flutter-elinux build elinux --target-arch=arm64 \
--target-compiler-triple=aarch64-buildroot-linux-gnu \
--target-sysroot=/home/root1/buildroot/output/staging \
--target-compiler-flags=--gcc-toolchain=/home/root1/buildroot/output/host \
--debug
打包完成后,执行flutter-elinux run –d { deviceId } -v, deviceId就是上一步中配置文件中的id;
注意:这里最好用-v来显示全部的日志信息,否则可能不会显示板子上启动的debug包的vmService的地址,就无法通过vscode的attach连接真机;
执行完flutter-elinux run –d deviceId –v以后,一路输入板子密码,最后板子程序启动成功,将日志中显示出来的vmService的地址复制出来,拷贝到虚拟机中vscode的launch.json中如下图:

然后VScode启动选项选择此Attach选项,就可以连接到板子的vmService了,修改代码保存后,会自动同步到板子上;
注意:要成功Attach板子还需要有一个端口映射的操作,需要在.flutter_custom_devices.json中配置端口映射,如下图

3.可能出现的问题
问题1
[ERROR][ELinuxWindowWayland(1066)] Failed to connect to the Wayland display.
[ERROR][CreateRenderSurface(1338)] Wayland display is invalid.
首先在板子上执行:weston-simple-egl,看能否跳出来wayland的动画示例,然后执行weston &,查看XDG_RUNTIME_DIR绑定的路径和.flutter_custom_devices.json绑定的一致,如下截图:

问题2

4.另一种调试方式
以上方式自动化程度高,但是传输文件很慢,尤其是传输debug包(160MB)的时候,要3分钟才能传输成功,非常慢,可以使用ftp直接传输,详细步骤:
- 打包部署,参照2.4.2,对项目进行打包,然后打开虚拟机中的资源管理器,如下图进行连接:

-
连接成功以后进入程序部署目录,然后将打好的包从虚拟机中拷贝到板子部署目录;
- 启动可执行文件,使用HyperTerminal连接板子(或者直接使用ssh),启动flutter可执行文件,如下图:

- 拷贝vmService的启动地址: http://127.0.0.1:42801/fzgpO39Wp1E=/ 到虚拟机中的vscode的launch.json中的attach项,如下图

- 端口转发,在虚拟机中执行如下指令,将虚拟机的端口转发到嵌入式板子的对应端口,为下一步attach做准备;ssh -L 42801:127.0.0.1:42801 root@192.168.4.72
- 启动attach,在虚拟机中,vscode的Run and Debug中选择Attach,然后启动,如下图:

五、资源占用情况
1. App没有数据刷新
启动时间<=3s, 平均CPU占用:5%左右,平均内存占用:6.5%左右;
2.以10ms的频率获取全部6通道数据
CPU占用119.5%,内存占用9.1%,资源占用情况如下:
3.以50ms的频率获取全部6通道数据
CPU占用46.1%,内存占用6.1%,资源占用情况如下:
4.以100ms的频率获取全部6通道数据
CPU占用25.0%,内存占用6.5%,资源占用情况如下:

5.以200ms的频率获取全部6通道数据
CPU占用16.0%,内存占用6.1%,资源占用情况如下:

总结
flutter相比QT开发嵌入式UI的优点如下:
1.现代化的声明式 UI 编程范式
-
Flutter 的声明式:你只需改变状态变量(例如
isButtonVisible = false),然后整个build方法会基于新状态重新描述 UI,框架智能地计算出最小改动并高效地更新屏幕。
2.逻辑清晰
Bug 更少:单一的数据源(状态)流向UI,状态和UI的对应关系非常明确,不易产生状态不一致的Bug。
3.行业标杆的开发效率——热重载 (Hot Reload)
-
UI 调试的“即时反馈”:调整边距、颜色、动画曲线、布局结构,都像在网页上调CSS一样即时。开发者可以大胆尝试,极大地降低了试错成本。
-
状态不丢失:调试登录页面时,热重载后无需重新输入用户名密码,状态被完整保留。这能让开发者深入多级界面后,依然能快速迭代
-
4.真正的跨平台 UI 一致性
-
消除平台差异:设计师再也不用担心一个按钮在A平台是方的,在B平台变圆了。
-
统一品牌形象:对于追求统一品牌视觉的产品,Flutter 是确保在任何设备上都保持一致的理想选择
更多推荐
所有评论(0)