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 会失败。
链接
- 引擎:https://github.com/fivif/flutter-riscv64-linux
- LocalSend:https://github.com/fivif/localsend-riscv64
测试环境
硬件 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。