你好,欢迎进入江苏优软数字科技有限公司官网!

诚信、勤奋、创新、卓越

友好定价、专业客服支持、正版软件一站式服务提供

13262879759

工作日:9:00-22:00

一步步教你在 Windows 上构建 dotnet 系应用的 UOS 软件安装包

发布时间:2024-02-12

浏览次数:0

接下来,本文将告诉您如何按照文件夹组织的顺序进行组织。

2.2.1 文件夹

安装包的文件结构组织根目录包含两个文件夹: 和 opt。 /文件夹是构建过程文件夹,里面包含了软件包构建过程相关的控制文件。本文这里只需要放入构建控制文件即可。 该文件完全符合官方规范。

为了方便大家理解,本文将以打包下载器为例,帮助大家了解手动打包的细节。

当我们开始制作安装包的时候,我们还需要给应用程序命名,即命名AppID应用程序的唯一标识。 在UOS中,系统也采用了类似的规范。 应用商店仅接受使用域名倒排规则命名的应用程序。请务必使用厂商的倒排域名+产品名称作为应用程序包名称,例如com..demo格式。 前半部分是厂家域名倒过来,后半部分是产品名称。 如果您使用非所有者的域名作为前缀,则可能会发生这种情况。 域名所有者提出投诉,导致软件被下架或删除

这里必须强调的是,只允许使用小写字母。本文下方出现的任何AppID或appid或${appid}等占位符都必须使用本应用的唯一标识字符串。 请确保手动打包时,各处都使用相同的字符串进行命名。

在本文中,下载器被命名为org..。虽然看起来有点陌生,可读性较差,但这就是UOS官方规范。 你只能跟着它。

首先创建一个工作文件夹,然后我们所有的文件都会组织到这个工作文件夹中。比如我这里创建的是C:\\\\Work文件夹

首先在工作文件夹中创建一个文件夹。 请确保区分大小写。 在 Linux 上它区分大小写。

进入该文件夹并创建一个名为的文本文件。 然后打开文本编辑器并编辑该文件。 该文件需要UTF-8格式编码,并且没有BOM头。 所谓BOM头,就是在文件的前两个字节中写入编码信息。 这是网上常用的方法。 BOM头最初是用来表示编码字节顺序的,后来被用来识别和区分文件。 编码。使用编辑器时,默认配置不带BOM头。

根据规范,写入文件的内容,比如下面的例子

Package: org.dotnetcampust.unofiledownloader
Version: 1.1.3
Section: utils
Priority: optional
Architecture: amd64
Multi-Arch: foreign
Build-Depends: debhelper (>=9)
Standards-Version: 3.9.6
Maintainer: lindexi
Homepage: https://blog.lindexi.com/
Description: 下载器.

上述各个字段/属性的描述如下。 以下内容来自从头开始制作deb文件 - 博客

/ 文件夹还可以包含许多其他文件,但在本例中不需要使用它们,因此我们将跳过它们。如果有兴趣,请参阅新的维护者手册

2.2.2 选择文件夹

完成文件写入后,创建/opt/apps/${appid}/文件夹。 请将 ${appid} 替换为您的 AppID 值。 该文件夹是应用程序根目录文件夹。

在本文中,我们将创建 C:\\\\Work\\opt\\apps\\org..\\ 文件夹。 请特别注意文件命名的小写字母。

应用程序根目录应包含文件、两个目录和一个info文件。文件结构如下



└─opt
└─apps
└─org.dotnetcampust.exampleapplication
│ info

├─entries
│ ├─applications
│ │ org.dotnetcampust.exampleapplication.desktop
│ │
│ └─icons
│ └─hicolor
│ └─24x24
│ └─apps
│ org.dotnetcampust.exampleapplication.png

└─files
└─bin
│ UnoFileDownloader.Skia.Gtk
│ ...

下面将继续按照这个顺序为您一一介绍。

2.2.2.1 文件夹

首先创建文件夹。 根据规范,您可以将任何文件插入files文件夹中,包括应用程序可执行文件。规范建议将可执行文件放入files/bin文件夹中。 我们是听话的开发者,所以我们设置了 -c -r linux-x64 --self- true 的输出文件夹(我的是 X:\\\\Code \\.\\src\\\\.Skia.Gtk\\bin\\\\net8.0\\ linux-x64\\\\文件夹)将所有文件复制(移动)到files/bin文件夹中

2.2.2.2 文件夹

再次创建一个文件夹,文件夹中应该放置的内容是桌面/开始菜单图标和应用程序启动信息。 在文件夹内创建一个文件夹,并创建一个AppId。 文件夹内的文本文件。以同样的方式,请将AppId替换为AppId。 与您的应用程序标识符。 在本文的示例中,将创建 C:\\\\Work\\opt\\apps\\org..\\\\\\org... 文件。

接下来,打开文本编辑器并编辑文本文件。 同样,该文件需要采用UTF-8编码格式。以下是org...文件的示例内容。 该文件当前使用标准格式。 相关标准及其他领域请参考文档。

[Desktop Entry] 
Categories=Network
Name=UnoFileDownloader
Name[zh_CN]=简单的下载器
Keywords=deepin;uniontech;downloader
Keywords[zh_CN]=深度;统信;下载器
Comment=The UnoFileDownloader can download file.
Comment[zh_CN]=可以简单下载文件。
Exec=/opt/apps/org.dotnetcampust.unofiledownloader/files/bin/UnoFileDownloader.Skia.Gtk
Icon=org.dotnetcampust.unofiledownloader
Type=Application
Terminal=false
StartupNotify=true
MimeType=audio/aac;application/aac;

以下是从官方文档复制过来的文档中关键字段的解释。

应用程序类型可以参考以下值进行设置。

除以上类别外,填写其他类别将归入“其他申请”

完成 .text 文件,然后创建图标文件夹来存储应用程序图标。 图标有 svg 矢量格式和 png 非矢量格式。虽然官方文档说非矢量格式推荐使用 png 格式,但实际上只能使用 png 格式。 我尝试过其他格式,例如jpg,但都不起作用。 它们将被默认的应用程序图标替换。 将jpg后缀改为png也不起作用。 的

您只需放置一份矢量格式图标的副本。 路径是/icons///apps/${appid}.svg。 放置图标后,复制其路径并与此文档进行比较,看看文件夹级别是否正确。

如果使用非矢量格式,则根据分辨率放置图标,如:

entries/icons/hicolor/24x24/apps/${appid}.png
entries/icons/hicolor/16x16/apps/${appid}.png

同样,放置图标后,请复制其路径并与此文档进行比较。我在制作安装包时,少了一层文件夹。 经过长时间排查,发现是文件夹级别错误。

2.2.2.3 信息文件

完成应用程序根目录下包含的两个目录和文件后,开始编写info文件。该文件是应用程序描述文件。 用于dde桌面环境安装软件包时自动配置程序的安装文件。 采用JSON格式,内容一般如下

{
"appid": "org.dotnetcampust.unofiledownloader",
"name": "UnoFileDownloader",
"version": "1.1.3",
"arch": ["amd64", "arm64"],
"permissions":
{
"autostart": false,
"notification": false,
"trayicon": false,
"clipboard": false,
"account": false,
"bluetooth": false,
"camera": false,
"audio_record": false,
"installed_apps": false
}
}

这里需要提醒大家的是,UOS官方文档提供的info文件示例中,文件内容的j​​son格式是错误的。 该属性和下一个属性之间缺少逗号。 如果你想复制官方的例子,也可以 请确保json格式正确

程序图标_sublime text程序图标_图标程序和详细文字说明

写完这些,文件结构就完成了。 本例完成后的文件结构如下

C:\\lindexi\\Work


├─DEBIAN
│ control

└─opt
└─apps
└─org.dotnetcampust.unofiledownloader
│ info

├─entries
│ ├─applications
│ │ org.dotnetcampust.unofiledownloader.desktop
│ │
│ └─icons
│ └─hicolor
│ └─24x24
│ └─apps
│ org.dotnetcampust.unofiledownloader.png

└─files
└─bin
│ UnoFileDownloader.dll
│ UnoFileDownloader.pdb
│ UnoFileDownloader.Skia.Gtk
│ UnoFileDownloader.Skia.Gtk.deps.json
│ UnoFileDownloader.Skia.Gtk.dll
│ UnoFileDownloader.Skia.Gtk.pdb
│ UnoFileDownloader.Skia.Gtk.runtimeconfig.json
│ UnoFileDownloader.uprimarker
│ WindowsBase.dll
│ Microsoft.CSharp.dll
│ ...

完成文件结构后,我们就进入打包环境,开始创建deb包。

第三步:打包deb文件

此示例打包使用 WSL 中的 dpkg 工具来创建 deb 文件。 开始前请务必准备好环境。 下载链接:

首先使用cd命令进入工作路径,例如本文示例中使用的C:\\Work文件夹。

cd /mnt/c/lindexi/Work

要输入其他盘符,请使用/mnt/[盘符]。值得一提的是,WSL中的中文支持相当不错,可以放心进入中文文件夹。

进入后使用ls命令确保进入正确的文件夹。 预期输出如下

lindexi@DESKTOP-51A5UGG:/mnt/c/lindexi/Work$ ls
DEBIAN opt

接下来,输入 dpkg-deb -b 。 打包命令

lindexi@DESKTOP-51A5UGG:/mnt/c/lindexi/Work$ dpkg-deb -b . UnoFileDownloader.deb
dpkg-deb: building package 'org.dotnetcampust.unofiledownloader' in 'UnoFileDownloader.deb'.

这样得到的.deb包就是UOS上可以使用的安装包文件

文件权限

在 WSL 中打包 dpkg-deb 时,如果你像我一样使用磁盘路径挂载,并且磁盘是 NTFS 格式,则可能会遇到以下错误信息

dpkg-deb: error: control directory has bad permissions 777 (must be >=0755 and <=0775)

上面的错误信息即使使用 chmod -R 0755 / 或 chmod -R 0755 命令也没有用。因为如果 wsl 进入 mnt 的 NTFS 磁盘格式,则无法通过 chmod 设置 0755 权限。 详情请参阅。

对于 NTFS,这个值是 000,而到了 777,这里太多了。 ,我们把umask的值设为022sublime text程序图标,即右边的755。

解决办法是在WSL配置中设置umask=22,将权限转换为755,具体步骤如下

进入命令行,先提权,然后创建或编辑/etc/wsl.conf文件

lindexi@DESKTOP-51A5UGG: sudo su
lindexi@DESKTOP-51A5UGG: vi /etc/wsl.conf

在/etc/wsl.conf文件中配置umask=22的值。 配置完成后文件内容大致如下。 如果/etc/wsl.conf文件不存在,可以完全替换为以下内容。 详情请参阅

[automount]
enabled = true
root = /mnt/
options = "metadata,umask=22,fmask=11"
mountFsTab = false

配置完成后,需要重启WSL才能生效。重启WSL需要使用命令行(打开一个新终端)输入wsl --命令关闭,然后重启命令行即可完成重启。

请不要使用从网上随意复制的关闭服务的方法。

或者为了更安全,您可以自行重新启动计算机。

重启完成后,输入 dpkg-deb -b 。 命令进行打包。

符号

通过上述步骤得到的deb包还没有签名。 如需签名请参考开发者调试签名文档中心-同心UOS生态社区

签名步骤需要在UOS系统上进行。 对于开发环境,甚至可以安装未签名的deb包。也就是说,签名步骤是可选的。

开始签名之前,请先注册一个开发者账号

然后打开同心应用商店sublime text程序图标,搜索“证书工具”,安装证书工具。

程序图标_图标程序和详细文字说明_sublime text程序图标

安装完成后,进入UOS命令行。 可以使用快捷键ctrl+alt+T进入,输入cert-tool -="UOS账号" -="UOS密码"进行初始化,如下命令行所示

cert-tool -username=lindexi -password=123123123

完成初始化后,就可以对未签名的deb包进行签名了。 命令行格式如下

deepin-elf-sign-deb [deb-file]

请将[deb-file]替换为待签名的deb包路径

例如本文的命令行如下

deepin-elf-sign-deb UnoFileDownloader.deb

打字完毕,慢慢等待签名。 当您最终看到成功警告时,签名就完成了。

Signed successfully!

签名后的deb包会放在待签名的deb包目录下创建的目录中。 签名完成后我们可以进入这个文件夹查看deb文件。

为了确保签名已经成功,可以使用-deb-命令来验证签名

首先使用cd命令进入文件夹,然后使用如下命令验证签名

deepin-deb-verify [签名的 deb 包]

请将 [ deb ] 替换为您实际的 deb 包。 在此示例中,输入以下命令

deepin-deb-verify UnoFileDownloader.deb

如果输出[INFO],则证明签名成功。

接下来,您可以尝试双击已签名的 deb 来安装它。

FAQ dpkg提示最终错误

原因是//文件最后一行少了一个空行

dpkg提示''字段错误

//可能是编辑文件时,编辑器写入了BOM头

您可以使用二进制查看器查看文件的前两个字节是否包含 BOM 标头。 例如EF BB BF开头就是一个UTF-8 BOM头。关于BOM头的详细信息请参见BOM(字节顺序标记())_百度百科

解决办法是换个文本编辑器或者手动删除BOM信息

dpkg提示No such file或者错误

详细的错误信息是

dpkg-deb: error: failed to open package info file '/DEBIAN/control' for reading: No such file or directory

请确保您位于正确的文件夹中并且工作路径正确

开始菜单图标为空白或默认应用程序图标

原因是图标文件错误或者文件路径错误。

比如我少了一层文件夹,就会写成512*512的文件夹。

建议放置图标后,将复制路径与本文档进行对比,看看是否放置了错误的文件夹。

确保图标文件的格式使用非矢量格式中的.png格式,无论是后缀名还是图像格式本身,尤其是从网上下载的图标。如果不确定,可以使用或者自带图像查看工具来了解其文件格式。

矢量 svg 图标。 请确保 svg 使用简单的格式,而不是超级复杂的 svg 格式。

应用程序启动崩溃

打包前,建议将发布的输出文件夹复制到UOS中测试运行。 首先,确保发布的二进制文件本身可以正常运行。

如果二进制文件本身可以运行但无法通过点击开始菜单启动或者找不到已安装的应用程序,请检查info文件格式、字段和字段值是否符合要求,文件是否正确。

打开控制台调试

如果您想在打包后运行已安装的应用程序进行调试,以查看输出控制台,您可以在打包过程中编辑.text文件并将值设置为true。这将在启动程序时显示控制台

如果还有什么不明白的地方,欢迎进群交流。

如有侵权请联系删除!

13262879759

微信二维码