[wine zone] 更新的自动打包程序
Tofloor
poster avatar
ericneon
deepin
2021-06-26 01:00
Author

适用于Deepin和UOS的wine程序打包,基于UOS生态适配群里的原有脚本,感谢前期的各位大佬。

当我们用deepin-wine安装了一个win32程序后,会在~/.local/share/applications/ 下面生成一个.desktop文件,这里存放了软件启动的相关信息。并且会在 ~/.deepinwine/apps/ 下面生成一个软件包,后面当我们利用这个文件夹进行打包时,需要重新编辑软件的相关信息。我在自动打包程序中添加了交互部分,使用户可以直接输入软件的中文名以及版本号,然后程序默认读取.desktop文件里的信息,并自动复制整个apps下面的文件夹到上一级目录,然后进行自动打包过程。

脚本放在百度网盘中,以下也有源码。

链接: https://pan.baidu.com/s/1LBjrkIFbVIkHIRHMBRxwDg  密码: 3jmi

#——————————————————————————————————————————————————————————————————————————————
#UOS打包脚本
#首先可以查看当前已经安装程序的名称和位置
#正式使用前,可以将各echo行注释掉,这里只是用于测试
ls ~/.local/share/applications/
#另一种可能是.desktop文件存放在桌面,则
#ls ~/Desktop/

#——————————————————————————————————————————————————————————————————————————————
#进行必要的交互,获取需要修改的信息
read -p "请输入您要打包软件的中文名称:" name_zh_cn  
echo "您要打包的是:${name_zh_cn}" 
read -p "请输入版本号:" version
read -p "请输入您的姓名:"
read -p "请输入您的联系方式或邮箱:" email
desktop_file=~/.local/share/applications/$name_zh_cn'.desktop'
#当desktop文件存放在桌面或别处时,请修改这里的路径
#desktop_file=~/Desktop/$name_zh_cn'.desktop'

#读取.desktop文件内容
#var=`echo $desktop_file | awk -F ' ' '{print $1,$8}' |sed "s/=/ /g"`
var=$desktop_file
#………………………………………………………………………………………………………………………………………………………………………………………………………………
#一句话介绍描述
#可在官网,软件下载站找到相关描述,或自己撰写
app_note=`cat $var | awk -F '=' 'NR==2{print $2}'`
echo 软件简介=$app_note

#………………………………………………………………………………………………………………………………………………………………………………………………………………
#英文名(驼峰命名)
#驼峰命名是指混合使用大小写字母来构成变量和函数的名字,可理解为:几个单词不用空格组合在一起,首字母大写区分彼此。
#upper_name="Kwmusic"
upper_name=`cat $var | awk -F '=' 'NR==8{print $2}'| sed -e 's/.exe//g'|sed "s/\b\(.\)/\u\1/g"`
echo 英文名=$upper_name

#………………………………………………………………………………………………………………………………………………………………………………………………………………
#中文名,此处名字需要与deepin-wine助手安装exe程序时,确认窗口显示的中文名字相一致,
#也和desktop文件中name后的名字一致。如果确实显示为英文,这里也写英文。
name_zh_cn=`cat $var | awk -F '=' 'NR==2{print $2}'`
echo 软件名=$name_zh_cn
#………………………………………………………………………………………………………………………………………………………………………………………………………………
#域名,
#一般为官网网址中不含www和com的部分,比如:www.winmount.com,这里指winmount

#app_url=$(echo $var |awk '{print $2}')
app_url=$(echo $upper_name |tr [:upper:] [:lower:])
echo 软件网址=$app_url
#………………………………………………………………………………………………………………………………………………………………………………………………………………
#分类
#AudioVideo音视频,Audio音频,Video视频,Development开发,Education教育,Game游戏,
#Graphics图形,Network网络,Office办公,Settings设置,System系统,Utility实用工具
#以上为主分类,更多细分类可参考https://blog.csdn.net/shawzg/article/details/106943100
cagegories=`cat $var | awk -F '=' 'NR==4{print $2}'`
echo 类型=$cagegories
#………………………………………………………………………………………………………………………………………………………………………………………………………………
#exe程序地址,注意开头的c是小写
#通过查看desktop文件获得,通常是“Exec=”一行的末尾一段,比如下面一行作为例子:
#C:\\\\Program\\ Files\\\\Meitu\\\\XiuXiu\\\\XiuXiu.exe
#改写为:c:\\Program Files\\Meitu\\XiuXiu\\XiuXiu.exe
#如果可执行文件在用户目录时,用“$USER”代替用户名,比如下面一行:
#"c:\\users\\你的uos账户名字\\Application Data\\Typeeasy\\11.5\\TypeEasy.exe"
#再改写为"c:\\users\\$USER\\Application Data\\Typeeasy\\11.5\\TypeEasy.exe"
#path="C:\\Program Files\\kuwo\\kuwomusic\\9.1.1.4_W4\\bin\\kwmusic.exe"

path=`cat $var | awk -F '=' 'NR==6{print $2}' |sed -e 's/^.*c\:/C\:/g'|sed 's/\//\\\\/g'` 
echo 路径=$path

#exe程序名
#上面exe文件路径最后的部分
main_exe=`cat $var | awk -F '=' 'NR==8{print $2}'`
echo 主程序=$main_exe

#………………………………………………………………………………………………………………………………………………………………………………………………………………
#版本号
#Deepin-wine助手安装确认窗口可以显示,安装完成试运行,通常"关于"中会显示,建议以“关于“中显示为准。
#version="6.0.3.3"

echo 版本号=$version

#………………………………………………………………………………………………………………………………………………………………………………………………………………
#容器ID, 
#直接在desktop文件中,找到类似Exec=env WINEPREFIX="/home/henryuos/.deepinwine/apps/美图秀秀_1"一行,
#其中“美图秀秀“是被安装的程序的名字,后面“_”之后的字符串就是容器ID。
#也可到deepin-wine助手默认把程序文件安装到~/.deepinwine/apps目录下,查看生成的“中文名_字符串”的文件夹,容器ID指“_”后面的字符串
#比如程序安装目录为~/.deepinwine/apps/WinMount_1,提取其中“_”后面的字符串“1”

apps_wineid="1"

#………………………………………………………………………………………………………………………………………………………………………………………………………………
#您的邮箱
#email="[email protected]"

echo email=$email



#………………………………………………………………………………………………………………………………………………………………………………………………………………
#……………………………………以下部分为不需要编辑的内容………………………………………………………………………………………………………………

#………………………………………………………………………………………………………………………………………………………………………………………………………………
#……………………………………获取脚本所在路径,cd切换到脚本目录……………………………………………………………………………………………
cd $(dirname $0)
#cd $(dirname $(readlink $0)) #soft  link

#………………………………………………………………………………………………………………………………………………………………………………………………………………
#格式化程序名
name=$(echo $upper_name |tr [:upper:] [:lower:])
url=$app_url"."$name
if [ $app_url == $name ]; then
 url=$name
fi
echo "package ""com."$url".deepin"" ......"

#………………………………………………………………………………………………………………………………………………………………………………………………………………
chmod +x *.sh
chmod +x icotool
chmod +x wrestool
chmod +x ./debian/*

#rm -fr package_save/
rm -fr final.dir/
rm -fr icons/
rm -fr staging.dir/

#………………………………………………………………………………………………………………………………………………………………………………………………………………
#将容器复制到上级文件夹并改名
cp -r ~/.deepinwine/apps/$name_zh_cn"_"$apps_wineid/ ~/.deepinwine/"Deepin-"$upper_name/

#………………………………………………………………………………………………………………………………………………………………………………………………………………
#最终生成的包的描述
export app_description=$app_note
#应用程序英文名
export app_name=$upper_name
#应用程序中文名
export app_name_zh_cn=$name_zh_cn
#要打包的原始容器名(目前假定容器一定存放于当前用户目录下)
#export origin_bottle_name=".WeChat"
#部署时在用户机器上的容器名(部署后位于~/.deepinwine/容器名)
export public_bottle_name="Deepin-"$upper_name
#desktop文件中的分类
export desktop_file_categories=$cagegories
#desktop文件中的图标名,与包名匹配
#export desktop_file_icon="deepin.com.wechat.svg"
#desktop文件中StartupWMClass字段。用于让桌面组件将窗口类名与desktop文件相对应。这个值为实际运行的主程序EXE的文件名,wine/crossover在程序运行后会将文件名设置为窗口类名
export desktop_file_main_exe=$main_exe
export exec_path=$path
#最终生成的包的包名,包名的命名规则以deepin开头,加官网域名(需要前后对调位置),如还不能区分再加上应用名
export deb_package_name="com."$url".deepin"
#专业版的包名
export elephant_deb_package_name="deepin.com."$name
#最终生成的包的版本号,版本号命名规则:应用版本号+deepin+数字
export deb_version_string=$version"deepin1"
#之前老的包名,安装新的包自动卸载老的包
export old_package_name="deepin.com."$name
export deb_packager_email=$email

wine_depends="libasound2 (>= 1.0.16), libc6 (>= 2.28), libglib2.0-0 (>= 2.12.0), libgphoto2-6 (>= 2.5.10), libgphoto2-port12 (>= 2.5.10), libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0), liblcms2-2 (>= 2.2+git20110628), libldap-2.4-2 (>= 2.4.7), libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14),
libpcap0.8 (>= 0.9.8), libpulse0 (>= 0.99.1), libudev1 (>= 183), libvkd3d1 (>= 1.0), libx11-6, libxext6, libxml2 (>= 2.9.0),
ocl-icd-libopencl1 | libopencl1, udis86, zlib1g (>= 1:1.1.4), libasound2-plugins, libncurses6 | libncurses5 | libncurses"

export package_depends="$wine_depends, deepin-wine-plugin-virtual"

export apprun_cmd='$HOME/.deepinwine/deepin-wine5-stable/bin/wine'
export SPECIFY_SHELL_PATH='$HOME/.deepinwine/deepin-wine-helper/run_v3.sh'

export patch_loader="LD_PRELOAD=/opt/apps/$deb_package_name/files/libloader.so"

./script-packager.sh $@

echo $deb_package_name
Reply Favorite View the author
All Replies
ericneon
deepin
2021-06-26 01:08
#1

这是一个shell脚本,可以放在任何位置,添加运行权限即可自动打包了。如果有什么问题,可以留言。

Reply View the author
jianguo922
deepin
2021-06-28 06:35
#2

谢谢分享       

Reply View the author
da******[email protected]
deepin
2023-02-24 04:20
#3
The user is banned, and the content is hidden.