Flatpak打包(6)——構建一個簡單的應用

全部文章目錄:
Flatpak打包(1)——Flatpak 介紹
Flatpak打包(2)——Flatpak應用元素
Flatpak打包(3)——應用Flatpak
Flatpak打包(4)——構建第一個Flatpak
Flatpak打包(5)——開始配置
Flatpak打包(6)——構建一個簡單的應用
Flatpak打包(7)——Flatpak Builder
Flatpak打包(8)——應用Sandbox(沙盒)
Flatpak打包(9)——應用分發
Flatpak打包(10)——可用運行時(Runtime)
Flatpak打包(11)——命令參考
Flatpak打包(12)——Flatpak-builder命令參考

flatpak實用程序提供了一組用於構建和分發應用程序的命令。這些命令允許創建新的Flatpak應用,可以在其中構建新的或現有的應用程序。
本節將介紹如何構建一個簡單的應用程序,該應用程序在運行時不需要任何額外的依賴關係。爲了完成這些示例,您應該先完成設置步驟(Getting Setup)。

創建應用

要創建一個應用程序,第一步是使用build-init命令。這會創建一個可以構建應用程序的目錄,其中包含正確的目錄結構和有關應用程序信息的元數據文件。build-init的格式是:

$ flatpak build-init DIRECTORY APPNAME SDK RUNTIME [BRANCH]
  • DIRECTORY是將被創建以包含應用程序的目錄的名稱
  • APPNAME是應用程序的D-Bus名稱
  • SDK 是將用於構建應用程序的SDK 的名稱
  • RUNTIME是應用程序所需的運行時的名稱
  • BRANCH通常是將要使用的SDK和運行時的版本

例如,要使用GNOME 3.22 SDK構建GNOME Dictionary 應用程序,該命令將如下所示:

$ flatpak build-init dictionary org.gnome.Dictionary org.gnome.Sdk org.gnome.Platform 3.22

現在可以試試這個命令。在下一步中,將在生成的dictionary目錄中構建一個應用程序。

構建

flatpak build用於使用sdk構建應用程序。此命令用於提供對沙箱的訪問權限。例如,以下內容將在appdir沙盒(位於files目錄中)中創建一個文件:

$ flatpak build dictionary touch /app/some_file

(最好在繼續之前刪除此文件。)
build命令允許使用傳統的configure,make和make install在flatpak中構建已有的應用程序。可以用GNOME Dictionary來試試這個。
首先,下載源文件,提取它們並切換到生成的目錄:

$ wget https://download.gnome.org/sources/gnome-dictionary/3.20/gnome-dictionary-3.20.0.tar.xz
$ tar xvf gnome-dictionary-3.20.0.tar.xz
$ cd gnome-dictionary-3.20.0/

那麼您可以使用build命令在以前創建的dictionary 目錄中構建和安裝源代碼:

$ flatpak build ../dictionary ./configure --prefix=/app
$ flatpak build ../dictionary make
$ flatpak build ../dictionary make install
$ cd ..

:此處make的時候會有一個bug,提示錯誤:

...
make[3]: Entering directory '/home/zhangsl/Desktop/qtiplot/gnome-dictionary-3.20.0/libgdict'
  CC       libgdict_1_0_la-gdict-enum-types.lo
In file included from gdict-enum-types.c:6:0:
./gdict-client-context.h:84:1: error: unknown type name ‘GdictContext’
 GdictContext *        gdict_client_context_new          (const gchar        *hostname,
 ^~~~~~~~~~~~
make[3]: *** [Makefile:656: libgdict_1_0_la-gdict-enum-types.lo] Error 1
make[3]: Leaving directory '/home/zhangsl/Desktop/qtiplot/gnome-dictionary-3.20.0/libgdict'
make[2]: *** [Makefile:535: all] Error 2
make[2]: Leaving directory '/home/zhangsl/Desktop/qtiplot/gnome-dictionary-3.20.0/libgdict'
make[1]: *** [Makefile:484: all-recursive] Error 1
make[1]: Leaving directory '/home/zhangsl/Desktop/qtiplot/gnome-dictionary-3.20.0'
make: *** [Makefile:416: all] Error 2

參考https://git.gnome.org/browse/gnome-dictionary/commit/?id=d529e2dd056f05cb1115c2f68bb6f773b4b14948可知,解決方法如下:

--- a/libgdict/gdict-client-context.h           
+++ b/libgdict/gdict-client-context.h           
@@ -19,7 +19,7 @@                               
 #ifndef __GDICT_CLIENT_CONTEXT_H__             
 #define __GDICT_CLIENT_CONTEXT_H__             

-#include <glib-object.h>                       
+#include "gdict-context.h"                     

 #define GDICT_TYPE_CLIENT_CONTEXT              (gdict_client_context_get_type ())               
 #define GDICT_CLIENT_CONTEXT(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDICT_TYPE_CLIENT_CONTEXT, GdictClientContext))   

因爲這些都在沙箱中運行,所以sdk中的編譯器和其他工具用於構建和安裝,而不是主機系統上的那些工具。

完成構建

一旦構建了應用程序,就需要使用build-finish命令來指定對主機不同部分的訪問,例如聯網和圖形套接字。該命令還用於指定用於運行應用程序的命令(通過修改元數據文件完成)以及創建應用程序的exports目錄。例如:

$ flatpak build-finish dictionary --socket=x11 --share=network --command=gnome-dictionary

在這一點上,已經成功地建立了一個flatpak應用並準備好運行。要測試應用程序,您需要將Dictionary 導出到存儲庫,添加該存儲庫,然後安裝並運行該應用程序:

$ flatpak build-export repo dictionary
$ flatpak --user remote-add --no-gpg-verify --if-not-exists tutorial-repo repo
$ flatpak --user install tutorial-repo org.gnome.Dictionary
$ flatpak run org.gnome.Dictionary


這裏我在執行安裝命令的時候會出現一個錯誤:

$ flatpak --user install tutorial-repo org.gnome.Dictionary
error: Error searching remote tutorial-repo: Can't find ref org.gnome.Dictionary

出現原因是沒有在同一目錄內構建所有的flatpak應用,即所有的flatpak應用均應在同一目錄中構建。
這會導出應用程序,創建一個名爲tutorial-repo的存儲庫,將Dictionary應用程序安裝在每個用戶的安裝區域並運行它。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章