红联Linux门户
Linux帮助

把一个Qt应用打包为一个snap应用-snapcraft scriptlets应用实例

发布时间:2017-02-04 10:17:36来源:ubuntutouch作者:ubuntutouch
我们在先前的文章"如何把一个qmake的Ubuntu手机应用打包为一个snap应用"(http://www.linuxdiyf.com/linux/22344.html)中体会了如何把一个qmake的项目打包为一个snap应用.在今天的教程中,我们利用Qt Creator来创建一个项目,并最终把我们的应用打包为一个snap项目.在打包的过程中,我们可以体会在snapcraft中的scriplets(https://snapcraft.io/docs/build-snaps/scriptlets).
 
1)创建一个Qt Helloworld项目
首先,我们打开我们的Qt Creator:
把一个Qt应用打包为一个snap应用-snapcraft scriptlets应用实例
把一个Qt应用打包为一个snap应用-snapcraft scriptlets应用实例
把一个Qt应用打包为一个snap应用-snapcraft scriptlets应用实例
这样我们就创建了一个最简单的一个helloworld应用.
 
2)创建snapcraft.yaml文件
我们在项目的根目录下,打入如下的命令:
$ snapcraft init  
上面的命令将会为我们在当前目录下生成一个叫做snap的目录(snapcraft version 2.26,之前的版本没有创建这个snap目录).
liuxg@liuxg:~/snappy/desktop/qtapp$ tree -L 3  
.  
├── main.cpp  
├── mainwindow.cpp  
├── mainwindow.h  
├── mainwindow.ui  
├── qtapp.pro  
├── qtapp.pro.user  
├── README.md  
└── snap  
   └── snapcraft.yaml
所有文件的架构如上面所示.我们可以通过编辑修改这个snapcraft.yaml文件:
snapcraft.yaml
name: qthello   
version: '0.1'   
summary: a demo for qt hello app  
description: |  
This is a qt app demo  
grade: stable   
confinement: strict   
apps:  
qthello:  
command: desktop-launch $SNAP/opt/myapp/qtapp  
plugs: [home, unity7, x11]  
parts:  
project:  
plugin: qmake  
source: .  
qt-version: qt5  
project-files: [qtapp.pro]  
install: |  
install -d $SNAPCRAFT_PART_INSTALL/opt/myapp  
install qtapp $SNAPCRAFT_PART_INSTALL/opt/myapp/qtapp  
integration:  
plugin: nil  
stage-packages:  
- libc6  
- libstdc++6  
- libc-bin  
after: [desktop-qt5]
在这里,我们必须指出的是:
install: |  
install -d $SNAPCRAFT_PART_INSTALL/opt/myapp  
install qtapp $SNAPCRAFT_PART_INSTALL/opt/myapp/qtapp
由于在原始的qtapp.pro文件中,并没有相应的代码让我们如何去安装我们的qtapp应用文件.我们在这里使用了上面的install来安装我们的应用.根据在Scriplets(https://snapcraft.io/docs/build-snaps/scriptlets)里的描述:
“install”  
The install scriptlet is triggered after the build step of a plugin.
这里的scripts将会在build之后自动被自动执行.它首先创建一个叫做myapp的目录,接着把我们在build目录中的二进制执行文件qtapp安装到myapp目录下.这样就最终形成了我们的snap包.
我们安装好qthello应用,并执行:
把一个Qt应用打包为一个snap应用-snapcraft scriptlets应用实例
把一个Qt应用打包为一个snap应用-snapcraft scriptlets应用实例
 
整个项目的源码在:https://github.com/liu-xiao-guo/qthello.更多阅读:https://github.com/liu-xiao-guo/wechat1
在这个snap应用中,我们把对Qt所有的库的依赖都打包到一个包里,这样我们最终的snap包的大小很大.如果开发者想减少这个Qt应用的大小的话,开发者可以参阅文章"利用ubuntu-app-platform提供的platform接口来减小Qt应用大小"(http://www.linuxdiyf.com/linux/26295.html)来减小整个应用的大小.
 
本文永久更新地址:http://www.linuxdiyf.com/linux/28128.html