跳转至正文

使用 Flutter 构建 Linux 应用

使用 Flutter 为 Linux 构建应用时的平台相关注意事项。

本页讨论使用 Flutter 构建 Linux 应用时的特有注意事项,包括 shell 集成以及为分发做准备。

与 Linux 集成

#

Linux 编程接口由库函数和系统调用组成,围绕 C 语言与 ABI 设计。幸运的是,Dart 提供了 dart:ffi 包,使 Dart 程序能够调用 C 库。

外部函数接口(FFI)允许 Flutter 应用通过原生库执行以下操作:

  • 使用 malloccalloc 分配原生内存

  • 支持指针、结构体与回调

  • 支持 longsize_t 等应用程序二进制接口(ABI)类型

要了解如何从 Flutter 调用 C 库,请参阅使用 dart:ffi 的 C 互操作

许多应用受益于使用将底层库调用封装为更便捷、符合 Dart 习惯的 API 的包。Canonical 构建了一系列包,专注于在 Linux 上启用 Dart 与 Flutter,包括对桌面通知、dbus、网络管理和 Bluetooth 的支持。

一般而言,还有许多其他支持创建 Linux 应用的包,包括 url_launchershared_preferencesfile_selectorpath_provider 等常用包。

为 Linux 应用分发做准备

#

可执行二进制文件位于项目的 build/linux/x64/<build mode>/bundle/ 下。在 bundle 目录中,可执行文件旁还有两个目录:

  • lib 包含所需的 .so 库文件

  • data 包含应用的数据资源,例如字体或图片

除这些文件外,应用还依赖编译时链接的各类操作系统库。要查看完整库列表,请对应用目录运行 ldd 命令。

例如,要创建名为 linux_desktop_test 的新 Flutter 桌面应用、构建它并检查其系统库依赖,请运行以下命令:

flutter create linux_desktop_test
cd linux_desktop_test
flutter build linux --release
ldd build/linux/x64/release/bundle/linux_desktop_test

要打包该应用以便分发,请包含 bundle 目录中的全部内容,并确认目标 Linux 系统已安装所有必需的系统库。

可能只需使用以下命令:

sudo apt-get install libgtk-3-0 libblkid1 liblzma5

要了解如何将 Linux 应用发布到 Snap Store,请参阅构建并将 Linux 应用发布到 Snap Store

其他资源

#

要了解如何为 Flutter 桌面应用创建 Linux Debian(.deb)与 RPM(.rpm)构建,请参阅分步 Linux 打包指南