标题使用Qt Installer Framework工具进行打包Qt 在ubuntu下运行的应用程序
使用Qt Installer Framework工具进行打包,使用官网example中的tutorial
将Qt生成的应用程序拷贝到/xxx/package-file/tutorial/packages/com.vendor.product/data 文件夹下
创建pack.sh脚本
输入以下内容
#!/bin/sh
exe="xinput" #你需要发布的程序名称
des="/home/touch/workspace/xinput/package-file/xinput-setup" #创建文件夹的位置
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des
该脚本会将程序所依赖的库拷贝过来
修改config.xml
/home/touch/workspace/xinput/package-file/tutorial/config/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>xinput</Name>
<Version>1.0.0</Version>
<Title>xinput Installer</Title>
<Publisher>Gary.Lin</Publisher>
<StartMenuDir>Xinput</StartMenuDir>
<TargetDir>/usr/bin/Xinput</TargetDir>
</Installer>
根据实际需求修改参数
创建桌面启动图标
需要创建Xinput.desktop文件
[Desktop Entry]
Version=1.0.0
# //版本,可选
Name=xinput
# //程序名,必须
Name[zh_CN]=xinput
# //中文程序名,可选
Exec=/usr/bin/Xinput/xinput
# //可执行程序路径,必须。路径必须是绝对路径
Icon=/usr/bin/Xinput/Xinput.png
# //程序图标,可选。路径必须是绝对路径,末尾不能有空格,否则将会导致无法加载图标
Type=Application
# //类型为应用程序,必选
修改installscripts.qs
在此脚本文件中添加相应的代码
function operationForLinux()
{
//var params = "[Desktop Entry]" + "\n";
var params = "Name=Xinput" + "\n";
params += "Icon=@TargetDir@/Xinput.png" + "\n";
params += "Version=@Version@" + "\n";
params += "Exec=@TargetDir@/xinput" + "\n";
params += "Terminal=false" + "\n";
params += "Encoding=UTF-8" + "\n";
params += "Type=Application" + "\n";
params += "Categories=Network" + "\n";
var desktop = "Xinput.desktop";
component.addOperation("CreateDesktopEntry", desktop, params);
var desktoppath = QDesktopServices.storageLocation(0);
//installer.executeDetached("sh", installer.value("TargetDir") + "/getroot.sh", installer.value("TargetDir"));
component.addElevatedOperation("Copy", "@TargetDir@/Xinput.desktop", "/usr/share/applications/Xinput.desktop");
component.addElevatedOperation("Copy", "/usr/share/applications/Xinput.desktop", desktoppath + "/Xinput.desktop");
component.addElevatedOperation("Execute","sudo","sh","@TargetDir@/changeuser.sh");
//installer.executeDetached("sh", installer.value("TargetDir") + "/desktop.sh", installer.value("TargetDir"));
//installer.executeDetached("sh", "@TargetDir@/changeuser.sh");
// var XDG_DATA_HOME = installer.environmentVariable("XDG_DATA_HOME");
//if(XDG_DATA_HOME.length > 0)
//{
// var XDG_DATA_HOME = installer.environmentVariable("XDG_DATA_HOME");
// if(XDG_DATA_HOME.length > 0)
// {
// var XDG_DESKTOP_DIR = installer.environmentVariable("XDG_DESKTOP_DIR");
// component.addOperation("Copy", XDG_DATA_HOME+"/applications/" + desktop, installerDir + XDG_DESKTOP_DIR);
// }
//}
}
Component.prototype.createOperations = function()
{
try {
// call the base create operations function
component.createOperations();
operationForLinux();
} catch (e) {
console.log(e);
}
}
修改生存桌面图标的用户所属组
创建changeuser.sh脚本文件
#!/bin/bash
wholestring=`who`
name=`echo $wholestring|awk '{print $1}'`
echo $name
. ~/.config/user-dirs.dirs
chown $name:$name $XDG_DESKTOP_DIR/Xinput.desktop
#sudo sed -i "/Same thing without a password/a\ $name ALL=(ALL) NOPASSWD: ALL" "/etc/sudoers"
删除桌面文件的脚本
创建deleteDesktop.sh
read path < desktoppath.txt
if [["$path" != ""]];then
rm $path/Xinput.desktop
fi
执行打包命令
binarycreator -c config/config.xml -p packages Xinput