使用 Flutter 构建 Linux 应用
此页面讨论了使用 Flutter 构建 Linux 应用的独特注意事项,包括 shell 集成和为分发准备应用。
与 Linux 集成
Linux 编程接口(包括库函数和系统调用)围绕 C 语言和 ABI 设计。幸运的是,Dart 提供了 dart:ffi
,它旨在使 Dart 程序能够高效地调用 C 库。FFI 为 Flutter 应用提供了使用 malloc
或 calloc
分配本机内存、支持指针、结构和回调以及 ABI 类型(如 long
和 size_t
)的能力。
有关从 Flutter 调用 C 库的更多信息,请参阅 使用 dart:ffi
进行 C 互操作。
许多应用将受益于使用一个包,该包将底层库调用包装在一个更方便、更符合惯例的 Dart API 中。 Canonical 构建了一系列包,重点是使 Dart 和 Flutter 能够在 Linux 上运行,包括对桌面通知、dbus、网络管理和蓝牙的支持。
更一般地说,许多其他 包支持 Linux,包括常见的包,如 url_launcher
、shared_preferences
、file_selector
和 path_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 商店。