内容转自社区论坛 by mozixun | 原文链接
该教程适合AppImage/使用Electron框架构建等几乎不需要额外依赖的应用
要稍微加一点的也可以
在开始这个教程之前,首先我们要搞清楚玲珑容器内是如何工作的,这里我用一张图来解释
了解了deb/rpm应用和玲珑容器内到底是怎么工作的区别之后才能对本文后面的讲解有清楚的认知
一级包管理器和二级包管理器的区别可以看我之前那个帖子:https://bbs.deepin.org.cn/post/276254
在正式讲如何转换之前,首先,先大致描述一下XDG_DATA_DIRS这个变量概念( 举个例子,我安装了玲珑版QQ和HMCL和deb/rpm版的QQ音乐和Discord,那么XDG_DATA_DIRS下的目录大概成下面这样 )

那么应用的快捷方式都放在XDG_DATA_DIRS/applications下,用于表明该应用如何启动以及可以干些什么别的事(比如用它可以打开一些文件等)
那么如上图,这时候系统的启动器(比如KDE Plasma应用程序启动器和GNOME全局菜单)就会遍历XDG_DATA_DIRS下的所有目录去找对应的快捷方式和应用图标;以上图为例(且desktop文件配置好的情况下,如何指定图标我后面会写),那么启动器就会在玲珑标注好的XDG_DATA_DIRS里找到QQ和HMCL对应的.desktop快捷方式和desktop快捷方式指定好的图标并显示出来,在系统默认的XDG_DATA_DIRS(比如/usr/share)里找到QQ音乐和Discord对应的.desktop快捷方式和快捷方式指定好的图标并显示出来
说完这个,我再用下图展示一下玲珑内应用的运行环境( 包括发起请求的应用和处理请求的应用都是玲珑的,并且浏览器和应用使用的Runtime不一样 )和直接用deb/rpm安装的应用区别(应用调用以使用xdg-open命令打开ys.mihoyo.com为例)

对玲珑应用内的调用转发机制有一定了解后,不难理解玲珑的打包主要有三个点:
1.要有应用本体 2.在玲珑的XDG_DATA_DIRS下要有应用快捷方式和对应图标 3.(部分应用) 要能对(文件/网页)调用做出响应
那么接下来的打包教程就以这三个点的实现为具体目标来实现 (我以motrix为例)
1.下载打包样板并解压到一个你认为合适的目录:
样板下载地址: https://gitee.com/LFRon/linyaps-packaging-guide/releases/download/1.0/com.id.linyaps.tar.gz
2.将软件安装包进行解压:
.deb教程:https://blog.csdn.net/qq_34825514/article/details/124311711
.appimage解压教程(执行时加上–appimage-extract即可):
/xx/app.appimage --appimage-extract
3.将软件本体放置到合适位置
先进入到你解压样板后的文件夹,然后再进入到linglong/sources
将你经过第二步后得到的软件本身(可能在deb解压后的/opt/xx或者/usr/lib等乱七八糟的位置),直接将文件夹本体替换,例如,现在我在linglong/sources文件夹里解压了motrix.appimage,得到了红框下的软件本体:
打开之后是这样:

那就将squashfs-root(或者你经过类似方法得到的其他文件夹)复制到linglong/sources里用于取代your_app文件夹,并重命名成你想要的文件夹名,比如,我把motrix软件本体所在的文件夹重命名为motrix,经过操作后linglong/sources文件夹会成为如下结构

最后确定程序的执行文件是哪一个,以motrix为例,我们发现并不需要执行AppRun直接执行motrix二进制文件就可以直接启动,于是我们就了解了在这个文件夹下启动它的命令是./motrix

4.编辑linglong.yaml文件
退回到工程目录后,linglong.yaml文件编辑方法如下:
先看前面:

其中id对标deb包debian/control文件里的Package:这一行,是应用唯一的识别符,而name才是在玲珑商店上显示的应用名字
description即应用的介绍
其次,基础运行环境中,使用的base(基础环境)必须声明,使用的runtime(也就是运行库)可以不加,比如motrix这样的Electron应用,使用org.deepin.base作底已经足够,那就可以把runtime删了变成这样:

接着,在command命令中,把”com.id.linyaps”字样改成你自己设置的id即可,之所以没有要在command里直接执行,是因为command那一行玲珑在打包识别应用时会自动调整它,不需要人工干预,打包者只需要在command那调整好包名即可,而且可以在自定义脚本中加一些其他参数以适应玲珑环境或者增加新的功能
再看下面build脚本如何编写

先将红框改为你的应用本体文件夹名称,我在案例中将其改为了motrix,故在案例中直接将红框中的内容改为motrix即可
由于前面我们已经知道motrix的appimage安装包设计是进入程序主文件夹之后直接执行motrix,所以在绿框中将”./样本启动文件.sh”直接改为执行motrix即可,也就是如下图:
当然,你想开启Electron的Wayland会话,那也可以如下图这样改(但目前Electron的Wayland显示协议版并不成熟,不建议使用):

那么最终,构建脚本就被改成了如下图这样:
5.加入desktop启动快捷方式和应用图标
主要的部分完成后,剩下的就是让应用的快捷方式可以正常运行应用,以及能正常显示图标
于是我们先从修改desktop文件说起
首先,从deb安装包和appimage解压后的文件里找出.desktop的快捷方式,将其复制到你的工作目录/linglong/sources/share/applications文件夹后再打开,你会看到:
那么,这里X-AppImage是给AppImage特供的,这里目前用不到可以删除,除去这个,剩下的重要属性功能如下:
Name用于设置启动菜单里会显示的应用名字
Categories用于设置这个应用的快捷方式会放在哪个类型的文件夹里 (如图就会放在网络应用里)
Exec用于设置你双击它后会执行什么命令
Icon用于设置它会显示哪个图标,如果你只如图设置应用名字那么桌面环境就会自动去寻找以该名字(不包括后缀名)对应的图片
那么在这里我们主要就要设置Exec和Icon两个属性,
Exec只需要填写进入该容器后应该执行什么,前面的玲珑会生成时自动补上,由于我们的启动脚本放在
对应容器内的路径就是(这截图我是提前执行了ll-builder run –exec bash后才搞出来的)
所以我们如下图填写Exec路径即可

然后图像我们直接填写成你想要的名字即可(不要填绝对路径),比如我这里填成motrix:

然后我们保存desktop文件即可完成对desktop快捷方式的编辑
然后再讲如何放置对应应用图标
由于在前面,我们已经将Icon设置成motrix,所以图标按如下教程这么放置即可:
首先先找到你想给应用设置成的图标,比如我找了这个:

然后我一打开发现是512×512像素的:
这里注意:以KDE Plasma为例,启动器最高只支持512×512的像素,不要把图片分辨率弄太高
于是我们就回到工作目录/linglong/sources/share下面这么新建文件夹:
mkdir -p icons/hicolor/512x512/apps
然后文件管理器打开效果如下:

然后我们把找到的图标重命名成你在desktop文件里设置的Icon后跟着的名字加上后缀即可,我这里是改成motrix.png,最终复制过去效果如下:
于是这样桌面快捷方式和应用图标放置都大功告成了。
PS:很多appimage应用会直接给你usr/share下面一整个icons文件夹,那就打开看清楚它图标的名字然后直接复制到工作目录对应路径后对着改即可~
6.构建和调试应用
终于到了激动人心的构建环节了! 那就让我们返回到工作目录,也就是linglong.yaml所在的文件夹
然后打开终端输入以下内容并回车
ll-builder build
我这里运行情况如下:

注:如果这里报错缺so二进制库文件,那就在pkgs.org或者https://www.debian.org/distrib/packages#search_contents里下载对应安装包并解包后,再把so文件放到工作目录的linglong/sources/libs文件夹下,接着重新执行ll-builder build再检查有无需要的so文件,如果还有需要重复以上操作或者进阶使用玲珑杀手即可
其实玲珑杀手我还没用过
最后我们先进行调试运行(防止应用有额外的功能库需要),也就是在终端中输入以下内容并回车
ll-builder run
然后我们就会看到界面出现

提示:由于org.deepin.base缺失xdg-open和systemd-run两个文件,故在文件夹内打开和内置浏览器打开并不是所有应用都正常,如果需要这两个的就会发现没反应:
如果遇到这个问题就下载这个压缩包 >>>
之后把bin和libs覆盖原文件夹即可解决
7.导出layer安装包
由于导出可运行的uab文件在除deepin/UOS以外的发行版不支持,而且导出的文件体积会巨大(因为包括Runtime),所以我只提供导出安装包的教程
ll-builder run测试通过后,终端输入以下内容回车即可
ll-builder export --layer
我这里输出内容如下:
导出安装包后的工作区目录如下:

然后安装本地导出的layer包即可,比如在当前文件夹下打开终端,输入以下内容即可完成安装:

然后经过检查,桌面图标显示正常
那么一个样板玲珑应用就已经打包成功了,本教程至此结束,希望这个教程能更好地帮助您构建玲珑包!
发表回复