【开源编译】Flutter引擎 & Localsend

Flutter 官方没有发布 riscv64 Linux 引擎产物

用源码在K3上把引擎编了出来,顺手把 LocalSend 的桌面 GUI 也跑通了。两个仓库都开源了。


一、flutter-riscv64-linux —— 引擎

riscv64 的 Flutter 引擎构建配方,含预编译产物。

已验证

  • 干净构建:4490 步 / 92 分钟 / 0 失败
  • 装好后 flutter build linux --debug 和 --release 直接可用,不需要任何特殊参数(不用 --local-engine,不用 --no-tree-shake-icons)
  • 上游 Flutter 代码零改动

Release 提供三种包

包 大小 用途
最小 SDK 104.6 MB 常规使用
仅引擎 22.7 MB 已有匹配 Dart SDK
完整 SDK 182 MB 分卷,含全部 13 个 snapshot

附带一个性能发现

Skia 的 fontconfig 字体族匹配存在问题:723 个字体下首帧要 9.0 秒。打了个 59 行的补丁后降到 1.6 秒(5.6×)。

这个问题不只影响 Flutter —— 723 个字体是 Bianbu 的默认配置,板上所有 GTK4 / libadwaita / Chromium 程序都在付这个开销。补丁和数据都在仓库里。


二、localsend-riscv64 —— 应用

LocalSend 桌面 GUI 的 riscv64 适配。

已验证

  • deb 包 20.1 MB,dpkg -i 装完即可运行
  • GUI 正常渲染、设备发现、HTTPS 传输全部打通
  • 实测手机 → 板子传了一张 296 KB 的图,两端 MD5 一致
  • 中文本地化正常

对上游的改动

只有两处,共 10 行:

  • cargokit 的 target 映射表加 riscv64 条目(+6 行)
  • 插件 -Werror 与 ayatana deprecation 冲突(+4 行)

业务代码未作任何修改。


已知限制

写清楚,避免踩坑。

GPU 呈现路径未打通。 PVR 驱动状态正常(驱动 OK、固件 OK),但 zink 在 Wayland 下要求 nullDescriptor 特性,实际回退到 llvmpipe 软件渲染。这是目前最大的缺口。

没构建 profile 引擎。 flutter build linux --profile 会失败。


链接


测试环境

硬件    SpacemiT K3(16 核:8×X100@2.4GHz + 8×A100@2.0GHz),7.7 GiB
系统    Bianbu 4.0.1,kernel 6.18.3-generic,riscv64
工具链  clang 21.1.8,ninja 1.13.2,gn 1000,lld 21
版本    Flutter 3.41.0 / Dart 3.15.0-51.0.dev

欢迎试用,问题可以在仓库提 issue。