当前位置:   article > 正文

使用Qt installer framework制作安装包_qt制作安装包时,怎么写installerscript.qs

qt制作安装包时,怎么写installerscript.qs

简述:

使用Qt库开发的应用程序,一般有两种发布方式:(1)静态编译发布。这种方式使得程序在编译的时候会将Qt核心库全部编译到一个可执行文件中。其优势是简单单一,所有的依赖库都集中在一起,其缺点也很明显,可执行程序体量较大,光Qt核心库加起来就得十多兆。(2)制作安装包发布。这种方式的原理也简单,就是将可执行程序和其依赖的库文件一起打包压缩,制作成安装包发布。制作安装包的工具挺多,这里介绍的是Qt官方的安装包制作框架Qt installer framework.这个框架由Qt官方出品,广泛应用于Qt library, Qt Creator等安装包产品。

系统环境:

linux 系统:Fedora 29  64bit

Qt5.11.3 : qt-opensource-linux-x64-5.11.3.run

installer framework : QtInstallerFramework-linux-x64.run

 

1. 打包前准备

打包前要确定所需要打包的运行文件、依赖库以及资源文件等

2. 目录组织结构

从Qt installer framework安装目录下的examples里面复制一个出来,在此基础上进行修改:

  1. |--root //根目录
  2. |--app.pro //工程文件
  3. |--config //配置
  4. |--config.xml //配置文件
  5. |--packages
  6. |--appDir
  7. |--data
  8. |--meta
  9. |--package.xml
  10. |--README

根目录下面创建两个子目录:config和packages。

1> config

在config目录下创建一个config.xml文件,该文件用于定制安装包的UI和行为,其基本格式如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Installer>
  3. <Name>License Agreement Example</Name>
  4. <Version>1.0.0</Version>
  5. <Title>License Agreement Example</Title>
  6. <Publisher>Qt-Project</Publisher>
  7. <StartMenuDir>Qt Installer Framework Example</StartMenuDir>
  8. <TargetDir>@HomeDir@/IfwExamples/licenseagreement</TargetDir>
  9. </Installer>
  10. <?xml version="1.0" encoding="UTF-8"?>
  11. <Installer>
  12. <Name>软件名称</Name>
  13. <Version>版本号</Version>
  14. <Title>安装程序窗口标题</Title>
  15. <Publisher>发布者名称</Publisher>
  16. <!-- Directory name is used in component.xml -->
  17. <StartMenuDir>要生成的开始菜单目录</StartMenuDir>
  18. <TargetDir>@HomeDir@/.vris/xxx</TargetDir>
  19. <!-- TargetDir>默认安装路径</TargetDir -->
  20. <!-- RunProgram>@TargetDir@/init.sh</RunProgram -->
  21. <Logo>xxx.png</Logo>
  22. <RemoteRepositories>
  23. <Repository>
  24. <Url>http://localhost:9000/update/app/repository</Url>
  25. <!-- Url>http://www.your-repo-location/repository</Url -->
  26. </Repository>
  27. </RemoteRepositories>
  28. </Installer>
  29. <?xml version="1.0"?>
  30. <Installer>
  31. <Name>Some Application</Name>
  32. <Version>1.0.0</Version>
  33. <Title>Some Application Setup</Title>
  34. <Publisher>Your Company</Publisher>
  35. <ProductUrl>http://www.your-fantastic-company.com</ProductUrl>
  36. <InstallerWindowIcon>installericon</InstallerWindowIcon>
  37. <InstallerApplicationIcon>installericon</InstallerApplicationIcon>
  38. <Logo>logo.png</Logo>
  39. <Watermark>watermark.png</Watermark>
  40. <RunProgram></RunProgram>
  41. <RunProgramArguments></RunProgramArguments>
  42. <RunProgramDescription></RunProgramDescription>
  43. <StartMenuDir>Some Application Entry Dir</StartMenuDir>
  44. <UninstallerName>SDKMaintenanceTool</UninstallerName>
  45. <AllowNonAsciiCharacters>true</AllowNonAsciiCharacters>
  46. <Background>background.png</Background>
  47. <TargetDir>@homeDir@/testinstall</TargetDir>
  48. <AdminTargetDir>@rootDir@/testinstall</AdminTargetDir>
  49. <RemoteRepositories>
  50. <Repository>
  51. <Url>http://www.your-repo-location/packages/</Url>
  52. </Repository>
  53. </RemoteRepositories>
  54. </Installer>

其中,name和version子元素是必需的,其他子元素则是可选的,并且顺序可以任意。

2 > 组件

Qt installer framework引入了组件的概念。即每一个独立模块可以单独放在一个组件component中,对于大型程序这样清晰的结构有利于工程组织,降低复杂度。例子中比较简单,只使用了一个组件,根据需要可以创建多个组件。

  1. packages
  2. - com.vendor.root
  3. - data
  4. - meta
  5. - com.vendor.root.component1
  6. - data
  7. - meta
  8. - com.vendor.root.component1.subcomponent1
  9. - data
  10. - meta
  11. - com.vendor.root.component2
  12. - data
  13. - meta

3 > packages

在packages目录下每个组件都需要创建两个子文件夹meta和data。

meta目录下用于存放一些配置文件,用于指定安装和部署过程。在meta文件夹中至少需要一个package.xml及所有在该文件中引用到的资源文件,如脚本文件、界面资源、翻译文件等。

package.xml文件描述了一个组件的基本信息,其格式如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Package>
  3. <DisplayName>README (requires license agreement)</DisplayName>
  4. <Description>README can only be installed if the user agrees to the licenses.</Description>
  5. <ReleaseDate>2019-09-30</ReleaseDate>
  6. <Version>固件的版本号</Version>
  7. <Default>true</Default>
  8. <Licenses>
  9. <License name="Creative Commons (CC0 1.0)" file="cc0.txt"/>
  10. <License name="GNU GENERAL PUBLIC LICENSE Version 3" file="gpl3.txt"/>
  11. </Licenses>
  12. <!-- Licenses>许可信息名称以及许可文件名</Licenses -->
  13. <!--Default>默认是否选中协议</Default-->
  14. <!-- Script>脚本文件</Script -->
  15. </Package>
  16. <?xml version="1.0" encoding="UTF-8"?>
  17. <Package>
  18. <DisplayName>显示的名称</DisplayName>
  19. <Description>描述</Description>
  20. <Version>4480</Version>
  21. <ReleaseDate>发行日期</ReleaseDate>
  22. <Default>true</Default>
  23. <!-- Script>installscript.js</Script -->
  24. </Package>
  25. <?xml version="1.0"?>
  26. <Package>
  27. <DisplayName>QtGui</DisplayName>
  28. <Description>Qt gui libraries</Description>
  29. <Description xml:lang="de_de">Qt GUI Bibliotheken</Description>
  30. <Version>1.2.3</Version>
  31. <ReleaseDate>2019-09-30</ReleaseDate>
  32. <Name>com.vendor.root.component2</Name>
  33. <Dependencies>com.vendor.root.component1</Dependencies>
  34. <Virtual>false</Virtual>
  35. <Licenses>
  36. <License name="License Agreement" file="license.txt" />
  37. </Licenses>
  38. <Script>installscript.qs</Script>
  39. <UserInterfaces>
  40. <UserInterface>specialpage.ui</UserInterface>
  41. <UserInterface>errorpage.ui</UserInterface>
  42. </UserInterfaces>
  43. <Translations>
  44. <Translation>sv_se.qm</Translation>
  45. <Translation>de_de.qm</Translation>
  46. </Translations>
  47. <DownloadableArchives>component2.7z, component2a.7z</DownloadableArchives>
  48. <AutoDependOn>com.vendor.root.component3</AutoDependOn>
  49. <SortingPriority>123</SortingPriority>
  50. <UpdateText>This changed compared to the last release</UpdateText>
  51. <Default>false</Default>
  52. <ForcedInstallation>false</ForcedInstallation>
  53. <Essential>false</Essential>
  54. <Replaces>com.vendor.root.component2old</Replaces>
  55. </Package>

其中License节中指定了协议条款,file属性指定了协议条款所在的文件。UserInterfaces和Translations节分别指定了界面资源文件和翻译文件。Script节指定了脚本文件,在脚本文件中可以对安装过程进行更为详细的定制。

data文件夹中则用于存放我们实际需要打包的程序文件(依赖库, 运行文件等),Qt installer framework在制作过程中用archivegen会将这些文件压缩成7zip格式。安装过程中自动从压缩包中提取出数据文件。

4 > .pro 工程文件

作用是生成安装包程序,关键命令是:

binarycreator --online-only -c $$PWD/config/config.xml -p $$PWD/packages ${QMAKE_FILE_OUT}
  1. TEMPLATE = aux
  2. INSTALLER = installer
  3. INPUT = $$PWD/config/config.xml $$PWD/packages
  4. example.input = INPUT
  5. example.output = $$INSTALLER
  6. example.commands = ../../bin/binarycreator -c $$PWD/config/config.xml -p $$PWD/packages ${QMAKE_FILE_OUT}
  7. example.CONFIG += target_predeps no_link combine
  8. QMAKE_EXTRA_COMPILERS += example
  9. OTHER_FILES = README
  10. #TEMPLATE = subdirs
  11. TEMPLATE = aux
  12. INSTALLER = xxxInstaller
  13. INPUT = $$PWD/config/config.xml $$PWD/packages
  14. xxx.input = INPUT
  15. xxx.output = $$INSTALLER
  16. #xxx.commands = binarycreator -c $$PWD/config/config.xml --repository $$PWD/packages/xxx/data/repository -p $$PWD/packages ${QMAKE_FILE_OUT}
  17. xxx.commands = binarycreator --online-only -c $$PWD/config/config.xml -p $$PWD/packages ${QMAKE_FILE_OUT}
  18. #binarycreator -c config/config.xml -p packages installer
  19. xxx.CONFIG += target_predeps no_link combine
  20. QMAKE_EXTRA_COMPILERS += xxx
  21. OTHER_FILES = README
  22. DISTFILES += \
  23. packages/AI/meta/package.xml \
  24. packages/xxx/meta/package.xml

3、创建存储库

使用repogen工具创建一个软件包目录的所有软件包的联机存储库:
repogen -p ${DIR_PACKAGES} ${DIR_REPOSITORY}
存储库目录结构如下:

  1. |--repository
  2. |--Updates.xml
  3. |--xxx
  4. |--4480autostart.7z
  5. |--4480autostart.7z.sha1
  6. |--4480content.7z
  7. |--4480content.7z.sha1
  8. |--4480lib64.7z
  9. |--4480lib64.7z.sha1
  10. |--4480meta.7z
  11. |--4480share.7z
  12. |--4480share.7z.sha1

创建存储库后,将其上传到Web服务器。 且在安装程序配置文件(config.xml)中指定存储库的位置。

Update.xml文件描述了一个存储库更新的基本信息,其格式如下:
 

  1. <Updates>
  2. <ApplicationName>{AnyApplication}</ApplicationName>
  3. <ApplicationVersion>1.0.0</ApplicationVersion>
  4. <Checksum>true</Checksum>
  5. <PackageUpdate>
  6. <Name>psyBar</Name>
  7. <DisplayName>xxx</DisplayName>
  8. <Description>xxx APP</Description>
  9. <Version>4480</Version>
  10. <ReleaseDate>2019-09-30</ReleaseDate>
  11. <Default>true</Default>
  12. <UpdateFile CompressedSize="23335175" OS="Any" UncompressedSize="41776361"/>
  13. <DownloadableArchives>autostart.7z,lib64.7z,share.7z,content.7z</DownloadableArchives>
  14. <SHA1>f4ee0c953ece442d13fa68cfdaa7eb96f9e1e919</SHA1>
  15. </PackageUpdate>
  16. </Updates>

4、静默升级

maintenancetool --silentUpdate -v
  1. |--xxx
  2. |--components.xml
  3. |--installer.dat
  4. |--maintenancetool
  5. |--maintenancetool.dat
  6. |--maintenancetool.ini
  7. |--network.xml
  8. |--lib-install.sh

 

 

参考:

使用Qt installer framework制作安装包

Qt5+安装包制作(Qt Installer Framework)

Qt Installer Framework 使用说明(二)

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/170722
推荐阅读
相关标签
  

闽ICP备14008679号