本页将讨论使用 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 构建了一系列库,重点在于为 Dart 和 Flutter 在 Linux 上提供支持,包括对桌面通知、dbus、网络管理和蓝牙的支持。

总的来说,许多其他 库都支持创建 Linux 应用,包括常用的库,如 url_launchershared_preferencesfile_selectorpath_provider

准备 Linux 应用以供分发

#

可执行二进制文件位于您的项目中的 build/linux/x64/<build mode>/bundle/ 目录下。在 bundle 目录中,与可执行二进制文件一起,您还可以找到两个子目录:

  • lib 包含必需的 .so 库文件
  • data 包含应用程序的数据资源,如字体或图像

除了这些文件之外,您的应用程序还依赖于编译时使用的各种操作系统库。要查看库的完整列表,请在应用程序的目录上使用 ldd 命令。

例如,假设您有一个名为 linux_desktop_test 的 Flutter 桌面应用程序。要检查其系统库依赖项,请使用以下命令:

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 打包指南