使用 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、網路管理和藍芽。

更普遍地說,許多其他 套件支援 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 Store 的資訊,請參閱 建立並發佈 Linux 應用程式到 Snap Store