本人之前一直是在Windows平台上面开发软件,打包软件,这段时间公司要搞国产化,首先第一步就是要用国产操作系统,选中了UOS,一款Deepin基于Linux开发的操作系统。
公司有一套我用Qt5.10.1写的浏览器外壳,用msvc140编译的,Windows上面的打包工具非常多,这里就不说了,下面来看看我用Qt Installer Framework在centos7上面来打包一个qt编译好的程序并在UOS上面安装。
步骤1:下载安装Qt Installer Framework
http://download.qt-project.org/official_releases/qt-installer-framework/3.1.1/
![12654dd6b4cd908246c376704cc7f4d3.png](https://i-blog.csdnimg.cn/blog_migrate/14d47adda1228d27baf8e142e36fb2a5.png)
![ef8dea1d6ca3be2ab3fa05a71e8ab659.png](https://i-blog.csdnimg.cn/blog_migrate/44075a1b4130ff038ae5d6d3dc280892.jpeg)
上面地址链接进去在上图上选一个用得着的版本下载安装,安装过程按照向导一步步来就是。
以下是我安装完成后本地目录内容:
[root@localhost ~]# cd /root/Qt/QtIFW-3.0.6
[root@localhost QtIFW-3.0.6]# cd bin
[root@localhost bin]# ls
archivegen binarycreator devtool installerbase repogen
我们要用的就是binarycreator 这个工具。
步骤2:构建安装包目录
Tutorial: Creating an Installerdoc.qt.io![1427d0df4a2311ef5e36f8e3c56979b8.png](https://i-blog.csdnimg.cn/blog_migrate/9a50847a0dc96fdd835ff9b9b69e66d4.png)
上面这个链接是Qt doc上面的教程,按照教程基本也可以打好包了。
![8a249bb9da66c12f5d31e0983496eb85.png](https://i-blog.csdnimg.cn/blog_migrate/5786bc613a42547cfa1112f262a57ada.png)
上面是目录结构,tutorial是新建的目录,名字随便取,最好跟你产品的名字一致,本次示例我用的名字叫gdwebframe,此目录下必须有两个目录config,packages。
其中config目录下必须有一个config.xml文件,下图是示例内容
[root@localhost config]# cat config.xml
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>快速开发客户端</Name>
<Version>1.0.0</Version>
<Title>快速开发客户端安装向导</Title>
<Publisher>yajunsun</Publisher>
<!-- Directory name is used in component.xml -->
<StartMenuDir>chongqingguangda</StartMenuDir>
<TargetDir>@HomeDir@/chongqingguangda/kskf</TargetDir>
<Logo>camera42.png</Logo>
</Installer>
![b620b80bf1b7f6b1c0c283c3eb4bff63.png](https://i-blog.csdnimg.cn/blog_migrate/badbc39d0c297174c7c6f56f99c73f4c.jpeg)
config.xml配置内容反应在上图中。更多config.xml内容参考https://doc.qt.io/qtinstallerframework/ifw-globalconfig.html
注意:如果需要Logo,将你的logo文件(png格式)放在config目录中。
接下来packages目录,你可以将你的软件分成几部分以组件的形式放到这个目录下,用户可以选择他需要安装的组件。
比如我本次示例中packages目录下有如下两个目录,代表两个组件
![e8fdf2c761febd571b23c7ad71563dea.png](https://i-blog.csdnimg.cn/blog_migrate/dc5b68473aa60653b80ea556c6024884.png)
组件反应在安装向导上的效果如下
![94fa00c3e6c95b82936dde159ffedcd2.png](https://i-blog.csdnimg.cn/blog_migrate/42f9472eb9f6b0bd0a68e5b0570bf47c.png)
每个组件目录下面又有两个目录data,meta。
data目录存放将要安装的组件内容(执行程序,配置文件,依赖文件,logo文件等),你希望你安装完成后软件包含哪些文件就在这里把这些文件放到data目录中。
![7e52b1df01f211f1c1b1915dcbf33cdf.png](https://i-blog.csdnimg.cn/blog_migrate/e3e147de69be16d0c5a183987ed6a693.png)
meta目录存放的还是配置文件,这里的配置文件针对的是当前组件。
![0663f67627e5f09582f1b18be2fda986.png](https://i-blog.csdnimg.cn/blog_migrate/e3256846934607a94c8798cc534b7db2.png)
上图是我本次示例中meta中的内容,其中必须包含package.xml文件,内容示例如下:
[root@localhost meta]# cat package.xml
<?xml version="1.0" encoding="UTF-8"?>
<Package>
<DisplayName>客户端</DisplayName>
<Description>快速开发客户端</Description>
<Version>1.0</Version>
<ReleaseDate>2020-06-04</ReleaseDate>
<Licenses>
<License name="the component license display" file="license.txt"/>
</Licenses>
<Default>true</Default>
<Script>installscript.qs</Script>
</Package>
[root@localhost meta]#
![fbe205004fceec4a39d0bbc2dbab2432.png](https://i-blog.csdnimg.cn/blog_migrate/06016056917139e98779f709a01c64f4.png)
![dd7a41b7b8745c4f1afa6fe0b9968d7b.png](https://i-blog.csdnimg.cn/blog_migrate/119f4cd3f16d24c2626c787dad9f677c.png)
如果你要展示你的License内容让用户接受,你需要在meta目录中建一个txt文件,然后再package.xml中配置<Licenses><License name="the component license display" file="license.txt"/></Licenses>。
更多package.xml内容请参考https://doc.qt.io/qtinstallerframework/ifw-component-description.html#package-information-file-syntax
以上内容搞完应该就能用binarycreator生成安装包了,但是程序是安装在config.xml定义的<TargetDir>目录中的,用户想要打开软件还得到这个目录中去打开,肯定是很不方便的,下面我在进一步使用脚本来使安装过程生成桌面快捷方式。
看到上面packag.xml中有一项<Script>installscript.qs</Script>了吗,而且我的meta目录中也有一个叫installscript.qs的文件,此文件就是一个脚本文件,这个文件的内容将在安装完成之后执行,生成软件的桌面文件,并将桌面文件复制到桌面,让用户可以在桌面上找到软件的打开入口。
步骤3:创建安装脚本
installscript.qs内容如下:
function Component() {}
Component.prototype.isDefault = function () {
return true;
}
Component.prototype.createOperations = function () {
try {
component.createOperations();
//windows平台的操作
if (installer.value("os") === "win") {
component.addOperation("CreateShortcut", "@TargetDir@/GDWebFrame.exe", "@DesktopDir@/GDWebFrame.lnk");
}
//Linux平台下的操作
if (installer.value("os") === "x11") {
//创建桌面文件@TargetDir是安装目录的变量,GDWebFrame.desktop是桌面文件的文件名
component.addOperation("CreateDesktopEntry", "@TargetDir@/GDWebFrame.desktop", "[Desktop Entry]nEncoding=UTF-8nVersion=1.0nType=ApplicationnTerminal=falsenExec=@TargetDir@/GDWebFramenName=快速开发nIcon=@TargetDir@/camera42.png");
//获取当前桌面路径
var desktoppath = QDesktopServices.storageLocation(0);
//将桌面文件复制到/usr/share/applications/ 目录下
component.addElevatedOperation("Copy", "@TargetDir@/GDWebFrame.desktop", "/usr/share/applications/GDWebFrame.desktop");
//将桌面文件复制到桌面目录下
component.addElevatedOperation("Copy", "@TargetDir@/GDWebFrame.desktop", desktoppath + "/GDWebFrame.desktop");
}
} catch (e) {
print(e);
}
}
示例中的GDWebFrame.desktop文件内容比较简单,按照key=value对应很容易知道含义
[Desktop Entry]n
Encoding=UTF-8n
Version=1.0n
Type=Applicationn
Terminal=falsen
Exec=@TargetDir@/GDWebFramen
Name=快速开发n
Icon=@TargetDir@/camera42.png
更多脚本只是请参考https://doc.qt.io/qtinstallerframework/scripting-qmlmodule.html
以上操作就完成了本次示例中组件”客户端“的配置,多个组件的操作是一样的。
步骤4:生成安装包
上面都就绪后就可以开始执行以下命令生成安装包了
[root@localhost ~]# cd /root/Qt/QtIFW-3.0.6/bin
[root@localhost bin]# ls
archivegen binarycreator devtool installerbase repogen
[root@localhost bin]# binarycreator -c /workspace/createinstaller/gdwebframe/config/config.xml -p /workspace/createinstaller/gdwebframe/packages gdwebframe_kskf
[root@localhost bin]# ls
archivegen binarycreator devtool gdwebframe_kskf installerbase repogen
[root@localhost bin]# mv gdwebframe_kskf /workspace/createinstaller/gdwebframe/gdwebframe_kskf
[root@localhost bin]#
binarycreator -c /workspace/createinstaller/gdwebframe/config/config.xml -p /workspace/createinstaller/gdwebframe/packages gdwebframe_kskf
-c 指出config.xml的路径。-p 指出packages目录的路径。 最后的gdwebframe_kskf是生成的安装包程序名字
gdwebframe_kskf直接生成后是在和binarycreator一起的目录中,我将它移到本次示例根目录下。
![06de5357953f7a37a6d2ff080723014f.png](https://i-blog.csdnimg.cn/blog_migrate/4d202fd2d7b95e62979edb3e61a69c62.png)
步骤5:分发安装
直接在centos7中安装gdwebframe_kskf,程序图标出现在桌面上
![3a756193e32ca6ccee95f016f5287abf.png](https://i-blog.csdnimg.cn/blog_migrate/4cb0392db246afc9d091cbe49877e85a.png)
我将复制到UOS操作系统上安装后效果如下图所示
![8fb68b6314e4d3853684e07497d68e05.png](https://i-blog.csdnimg.cn/blog_migrate/54d75a5976d1f845606941f3bc038c78.png)
以上就是本次示例的全部内容。