当前位置: 首页 > article >正文

在Ubuntu 20.04上为RK3588/RK3399交叉编译Flutter应用:一份避坑指南与完整配置流程

在Ubuntu 20.04上为RK3588/RK3399交叉编译Flutter应用一份避坑指南与完整配置流程如果你正在为RK3588或RK3399这类国产ARM开发板搭建Flutter开发环境那么交叉编译可能是你绕不开的一道坎。不同于x86平台上的常规开发ARM架构的嵌入式设备往往需要特殊的工具链和配置。本文将带你从零开始在Ubuntu 20.04上为这些开发板搭建完整的Flutter交叉编译环境并分享我在实际项目中积累的关键技巧和常见问题解决方案。1. 环境准备与工具链安装在开始之前确保你的开发机满足以下基本要求运行Ubuntu 20.04的x86_64主机至少8GB RAM16GB更佳50GB可用磁盘空间首先安装基础开发工具sudo apt update sudo apt install -y unzip curl clang cmake pkg-config ninja-build对于ARM64交叉编译我们需要特定的工具链。Ubuntu 20.04官方仓库提供了多个版本的aarch64编译器推荐使用gcc-10sudo apt install -y gcc-10-aarch64-linux-gnu g-10-aarch64-linux-gnu验证安装是否成功aarch64-linux-gnu-gcc-10 --version如果看到类似gcc version 10.x.x的输出说明工具链已正确安装。2. 获取和配置Flutter for Embedded Linux标准的Flutter SDK不支持直接交叉编译到嵌入式Linux平台我们需要使用专门的分支。Sony维护的flutter-elinux是一个不错的选择git clone https://github.com/sony/flutter-elinux.git sudo mv flutter-elinux /opt/然后配置环境变量。编辑/etc/environment文件在PATH中添加Flutter路径PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/flutter-elinux/bin/应用更改source /etc/environment验证Flutter安装flutter-elinux --version3. 创建和配置Flutter项目创建一个新的Flutter项目mkdir demo1 cd demo1 flutter_elinux create demo项目创建完成后关键的配置集中在CMakeLists.txt文件中。我们需要进行几处重要修改在demo/elinux/CMakeLists.txt的开头添加set(CMAKE_EXE_LINKER_FLAGS -fuse-ldgold) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g-10)注意这两行必须放在project(runner LANGUAGES CXX)之前在demo/elinux/runner/CMakeLists.txt中添加必要的库链接set(FLUTTER_LIB ${CMAKE_CURRENT_SOURCE_DIR}/../flutter_lib/) target_link_libraries(${BINARY_NAME} PRIVATE ${FLUTTER_LIB}libffi.so ${FLUTTER_LIB}libwayland-cursor.so.0 ${FLUTTER_LIB}libxkbcommon.so.0 ${FLUTTER_LIB}libmali-wayland.so ${FLUTTER_LIB}libdrm.so.2 ${FLUTTER_LIB}libwayland-server.so.0 )4. 获取和准备必要的库文件RK3588/RK3399开发板通常使用Mali GPU需要特定的图形库支持。这些库文件通常包括libmali-wayland.solibwayland-*.solibdrm.so.2libxkbcommon.so.0libffi.so获取这些库的几种方法从开发板提取scp rootboard-ip:/usr/lib/libmali-wayland.so ./flutter_lib/从厂商SDK获取大多数开发板厂商会提供完整的SDK其中包含必要的库文件自行交叉编译对于开源库如Wayland可以下载源码后交叉编译git clone https://gitlab.freedesktop.org/wayland/wayland cd wayland meson setup build --cross-file cross.txt ninja -C build其中cross.txt内容示例[host_machine] system linux cpu_family aarch64 cpu aarch64 endian little [binaries] c aarch64-linux-gnu-gcc-10 cpp aarch64-linux-gnu-g-105. 常见问题与解决方案5.1 链接器错误问题编译时出现undefined reference错误解决方案确保所有依赖库都已正确放置在flutter_lib目录检查库文件架构是否正确file flutter_lib/libmali-wayland.so应显示ELF 64-bit LSB shared object, ARM aarch645.2 Wayland显示问题问题应用启动后无显示或显示异常解决方案确保开发板已正确配置Wayland环境检查环境变量export WAYLAND_DISPLAYwayland-0 export XDG_RUNTIME_DIR/run/user/05.3 性能优化对于RK3588/RK3399这类嵌入式设备性能调优很重要启用硬件加速export EGL_PLATFORMwayland export MESA_GLSL_CACHE_DISABLEfalse减少Flutter引擎开销 在main()函数中添加void main() { debugDisableShadows true; debugDisableClipLayers true; runApp(MyApp()); }6. 编译与部署完成所有配置后可以开始编译cd demo flutter-elinux build elinux --target-archarm64编译完成后可执行文件位于build/elinux/arm64/debug/bundle目录。将其复制到开发板scp -r build/elinux/arm64/debug/bundle rootboard-ip:/home/root/在开发板上运行cd /home/root/bundle ./demo7. 进阶技巧与优化7.1 减小应用体积嵌入式设备通常存储空间有限可以通过以下方式优化去除调试符号aarch64-linux-gnu-strip bundle/demo使用Release模式编译flutter-elinux build elinux --target-archarm64 --release7.2 自定义Flutter引擎如果标准引擎不能满足需求可以自行编译定制引擎git clone https://github.com/sony/flutter-elinux-engine.git cd flutter-elinux-engine ./flutter/tools/gn --linux --linux-cpu arm64 --target-sysroot /path/to/sysroot ninja -C out/linux_arm64/7.3 远程调试虽然嵌入式设备上难以直接调试但可以通过以下方式辅助开发日志输出import dart:developer as developer; developer.log(Debug message, name: my.app);性能分析flutter-elinux analyze内存检查valgrind --toolmemcheck ./demo在实际项目中我发现RK3588的性能表现相当不错能够流畅运行中等复杂度的Flutter应用。而RK3399则需要更多的性能优化特别是在图形渲染方面。建议在开发初期就考虑性能因素避免后期大规模重构。

相关文章:

在Ubuntu 20.04上为RK3588/RK3399交叉编译Flutter应用:一份避坑指南与完整配置流程

在Ubuntu 20.04上为RK3588/RK3399交叉编译Flutter应用:一份避坑指南与完整配置流程 如果你正在为RK3588或RK3399这类国产ARM开发板搭建Flutter开发环境,那么交叉编译可能是你绕不开的一道坎。不同于x86平台上的常规开发,ARM架构的嵌入式设备往…...

WaveTools终极指南:免费解锁鸣潮120帧的完整教程

WaveTools终极指南:免费解锁鸣潮120帧的完整教程 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 想要彻底解决《鸣潮》游戏卡顿问题,享受流畅的120帧体验吗?今天我要为你…...

网络安全薪资揭秘:小白如何逆袭30万年薪,必看收藏

网络安全薪资揭秘:小白如何逆袭30万年薪,必看收藏 网络安全行业薪资高,初级岗位月薪15K-25K,资深专家年薪可达百万。入行需获取CISP等证书,掌握"渗透测试法律合规"等复合技能,通过CTF竞赛和漏洞…...

告别玄学调参:用FPGA+Verilog仿真DDR3的突发读写与预取机制

告别玄学调参:用FPGAVerilog仿真DDR3的突发读写与预取机制 在数字电路设计中,DDR3内存控制器的实现与验证一直是工程师们面临的挑战之一。不同于简单的静态存储器,DDR3以其复杂的时序要求和高效的预取机制著称,这使得单纯的文档阅…...

MiniCPM-O-4_5-GGUF 全解析

一、模型简介MiniCPM-O-4_5-GGUF 是面壁智能(OpenBMB)推出的 MiniCPM-O-4.5 全模态大模型的轻量化量化版本,采用 GGUF 格式优化,专为端侧与低资源设备设计,是当前开源社区中性能最强、部署门槛最低的全模态小参数模型之…...

Python调用外部程序实战:从os.system到subprocess的进阶指南

1. Python调用外部程序的基础方法 在Python中调用外部程序是自动化任务中非常常见的需求。比如你可能需要在自己的Python脚本中集成一个已有的Windows工具,或者批量处理某些文件。最基础的方法就是使用Python内置的os模块。 我第一次接触这个功能是在做一个自动化测…...

程序员必看!网络安全薪资高达5万+,这份免费学习资源助你转行高薪领域,建议收藏!

《程序员必看!网络安全薪资高达5万,这份免费学习资源助你转行高薪领域,建议收藏!》 本文分析了程序员工资水平及影响因素,指出技术实力和软实力是薪资差异的关键。特别指出网络安全领域人才缺口高达95万,薪…...

数字时代的自我主宰:软件测试从业者的技术戒断指南

在算法编织的比特洪流中,软件测试工程师,这群数字世界的“质检员”与“守门人”,正首当其冲地承受着技术双刃剑的另一面。我们终日与代码、设备和屏幕为伍,敏锐地捕捉每一个潜在缺陷,却也可能在无形中,让自…...

AI殖民主义数据战争:软件测试从业者的挑战、角色与破局之路

在数字时代的宏大叙事中,“AI殖民主义”正从一个学术概念演变为一场席卷全球的静默战争。这场战争的核心战场并非物理疆域,而是数据、算法与认知主权。对于身处技术前线的软件测试从业者而言,这场战争并非遥不可及的宏观叙事,而是…...

PyTorch Dataset类详解:从基础实现到高级优化

1. PyTorch数据集类基础解析在深度学习项目中,数据处理环节往往占据了整个开发流程70%以上的时间。PyTorch作为当前最流行的深度学习框架之一,其torch.utils.data.Dataset类为数据加载提供了标准化的解决方案。这个抽象类就像是一个数据容器,…...

HTC老机型救砖刷机指南:从官解到S-OFF,手把手带你绕过版本限制

HTC经典机型深度救砖指南:解锁、降级与固件自由之路 手里那台老HTC突然黑屏卡logo?升级后卡成幻灯片?或是单纯怀念当年那个丝滑流畅的Sense UI?别急着让它退休。作为曾经的刷机王者,HTC设备有着极强的可玩性——只要掌…...

技术返祖:软件测试中的纸质备份策略与哲学思辨

在数字化浪潮席卷全球的今天,“返祖”一词似乎与技术进步背道而驰。然而,当我们深入软件测试这一追求极致稳定与可靠的领域,会发现一种引人深思的现象正在悄然回归——对纸质备份的重新审视与策略性应用。这并非简单的技术倒退,而…...

终极Windows激活指南:KMS_VL_ALL_AIO智能脚本完全解析

终极Windows激活指南:KMS_VL_ALL_AIO智能脚本完全解析 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows激活而烦恼吗?KMS_VL_ALL_AIO智能激活脚本提供了一套…...

python agen

Python 的 asend 是异步生成器协议里的一个底层方法,很多人刚接触时容易把它和普通的 send 搞混,或者觉得它没什么用。其实在异步编程里,asend 扮演着一个挺微妙的角色,尤其是在处理协程之间的双向通信时。 先说说这个东西到底是什…...

Python调用Halcon引擎避坑指南:从环境配置到DLL依赖一步到位

Python与Halcon深度整合实战:跨平台部署全流程解析 在工业视觉领域,Halcon作为老牌机器视觉库与Python生态的融合越来越紧密。但当开发者兴冲冲地完成算法开发后,往往会发现程序在其他机器上根本无法运行——缺失的DLL、神秘的License报错、版…...

3分钟搞定!Windows系统显示iPhone HEIC照片缩略图终极指南

3分钟搞定!Windows系统显示iPhone HEIC照片缩略图终极指南 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 还在为iPh…...

D3KeyHelper技术深度解析:基于AutoHotkey的暗黑3按键自动化实现原理

D3KeyHelper技术深度解析:基于AutoHotkey的暗黑3按键自动化实现原理 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款基…...

LSB隐写术实战避坑指南:用Python处理大图时如何优化性能与正确评估隐藏效果

LSB隐写术实战避坑指南:用Python处理大图时如何优化性能与正确评估隐藏效果 当你第一次尝试在1000x1000像素的高清图片中嵌入秘密信息时,是否遇到过这样的场景:点击运行按钮后,盯着屏幕发呆五分钟,循环进度条像蜗牛爬行…...

10分钟掌握暗黑2存档编辑器:新手完整使用教程

10分钟掌握暗黑2存档编辑器:新手完整使用教程 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否厌倦了在暗黑破坏神2中反复刷装备的枯燥过程?是否想快速体验不同职业build的乐趣却苦于培养周期太长&a…...

AMD Ryzen 处理器功耗调校终极指南:RyzenAdj 完整教程

AMD Ryzen 处理器功耗调校终极指南:RyzenAdj 完整教程 【免费下载链接】RyzenAdj Adjust power management settings for Ryzen APUs 项目地址: https://gitcode.com/gh_mirrors/ry/RyzenAdj RyzenAdj 是一款功能强大的开源工具,专门为 AMD Ryzen…...

5分钟掌握FreeRouting:终极PCB自动布线工具完全指南

5分钟掌握FreeRouting:终极PCB自动布线工具完全指南 【免费下载链接】freerouting Advanced PCB auto-router 项目地址: https://gitcode.com/gh_mirrors/fr/freerouting FreeRouting是一款专业的开源PCB自动布线工具,能够与KiCad、Eagle等主流PC…...

疲劳驾驶司机异常驾驶行为检测及预警系统的全面解决方案

疲劳驾驶司机异常驾驶行为检测及预警系统 1.开放全部源代码,可自行进行修改 2.提供完整程序打包软件.exe,不用任何编译环境,直接点开就能运行 3.包括疲劳检测(打哈欠,低头,闭眼),人脸…...

基于docker安装MySQL、RabbitMQ、ElasticSearch、minio

MySQL 拉取镜像 docker pull mysql:5.7进入到/usr/mysql/conf目录下 cd /usr/mysql/conf创建文件 vi my.cnf插入以下内容 [client] default_character_setutf8 [mysqld] collation_server utf8_general_ci character_set_server utf8保存退出 在该目录(/usr…...

Rednote推行全球化战略:数据分离、服务条款差异,国际业务布局几何?

Rednote的全球化目标与初步举措去年在“TikTok难民”潮流中短暂成名的中国应用Rednote,立志成为全球社交媒体巨头。《连线》杂志发现,随着业务拓展,该公司正逐步将中国和国际用户群体区分开来。Rednote近期推出了新的网络域名Rednote.com&…...

科技史上的今天:4月23日

今天是4月23日,在科技发展的长河中,这一天见证了多个里程碑式的时刻,从物理学的奠基到航空工业的突破,再到互联网时代的商业博弈。以下是发生在今天的四件科技大事。 量子力学之父普朗克诞生 1858年的今天,德国物理学…...

索尼相机功能终极解锁指南:OpenMemories-Tweak完全教程

索尼相机功能终极解锁指南:OpenMemories-Tweak完全教程 【免费下载链接】OpenMemories-Tweak Unlock your Sony cameras settings 项目地址: https://gitcode.com/gh_mirrors/op/OpenMemories-Tweak 索尼相机功能扩展工具OpenMemories-Tweak是一款专为索尼相…...

AI经验存共享平台,躺着赚睡后收入

你有没有想过,那些熬了无数个夜、踩过无数个坑才总结出的AI开发经验,其实可以变成一份帮你赚取‘睡后收入’的资产?你有没有过这种经历?做 AI 开发,踩了一堆坑,熬了好几个夜,总结了一堆经验&…...

USB摄像头热拔插导致应用卡死?手把手教你用select给V4L2的DQBUF加超时保护

USB摄像头热拔插导致应用卡死?手把手教你用select给V4L2的DQBUF加超时保护 在嵌入式Linux和Android HAL开发中,USB摄像头热拔插导致的应用程序卡死是一个常见但令人头疼的问题。想象一下这样的场景:你的应用程序正在流畅地预览摄像头画面&…...

PyTorch CUDA检查报‘out of memory’?一个关于`PYTORCH_NVML_BASED_CUDA_CHECK`的避坑指南

PyTorch CUDA检查报‘out of memory’?深入解析PYTORCH_NVML_BASED_CUDA_CHECK的避坑指南 当你面对一台配置了多张NVIDIA 4090显卡的服务器,nvidia-smi显示显存充足,但PyTorch的torch.cuda.is_available()却返回False并报出"out of memo…...

告别CANTP配置恐惧症:手把手教你用Vector CANoe搭建UDS诊断通信环境(附实战Demo)

从零构建UDS诊断通信环境:Vector CANoe实战指南与避坑手册 第一次打开Vector CANoe的CANTP配置界面时,那些密密麻麻的参数和陌生的缩写词是否让你感到无从下手?N_PDU类型、BS/STmin参数、流控帧配置……这些概念在文档里看起来简单&#xff0…...