使用 Flutter 构建 Linux 应用

此页面讨论了使用 Flutter 构建 Linux 应用的独特注意事项,包括 shell 集成和为分发准备应用。

与 Linux 集成

Linux 编程接口(包括库函数和系统调用)围绕 C 语言和 ABI 设计。幸运的是,Dart 提供了 dart:ffi,它旨在使 Dart 程序能够高效地调用 C 库。FFI 为 Flutter 应用提供了使用 malloccalloc 分配本机内存、支持指针、结构和回调以及 ABI 类型(如 longsize_t)的能力。

有关从 Flutter 调用 C 库的更多信息,请参阅 使用 dart:ffi 进行 C 互操作

许多应用将受益于使用一个包,该包将底层库调用包装在一个更方便、更符合惯例的 Dart API 中。 Canonical 构建了一系列包,重点是使 Dart 和 Flutter 能够在 Linux 上运行,包括对桌面通知、dbus、网络管理和蓝牙的支持。

更一般地说,许多其他 包支持 Linux,包括常见的包,如 url_launchershared_preferencesfile_selectorpath_provider

为分发准备 Linux 应用

可执行二进制文件位于项目中的 build/linux/<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 商店 的信息,请参阅 构建并发布 Linux 应用程序到 Snap 商店