飞道的博客

UOS应用商店打包规范

346人阅读  评论(0)

简介
本文档描述了UOS应用商店的上架应用打包规范。
1、应用标识(包名)
应用标识/包名(appid)是应用的唯一标识,应用商店只接受使用倒置域名规则命名的应用,如:
com.apps.demo
推荐使用你已经拥有的域名作为应用名称。如果使用未拥有的域名作为前缀,可能会引起该域名拥有者进行申诉,导致你的应用被删除。
2、应用安装
2.1、安装路径
应用的全部安装文件必须在如下目录:
/opt/apps/${appid}/
说明:禁止使用deb的postinst等钩子对系统进行修改,包含这些脚本的软件包都无法上架
3、目录结构
.
├── DEBIAN
│ ├── control
│ └── md5sums
└── opt
└── apps
└── com.apps.demo
├── entries
│ ├── applications
│ │ └── com.apps.demo.desktop
│ ├── icons
│ │ └── hicolor
│ │ └── scalable
│ │ └── apps
│ │ └── com.apps.demo.svg
│ ├── mime
│ │ └── packages
│ │ └── com.apps.demo.xml
│ ├── plugins
│ │ ├── fcitx
│ │ └── libuosinput.so
│ │ └── browser
│ │ └── libuosbrowser.so
│ └── services
│ │ └── com.apps.demo.xml
├── files
│ ├── bin
│ │ └── com.apps.demo
│ ├── doc
│ │ ├── changelog.gz
│ │ └── copyright
│ └── lib
│ └── com.demo.app.so.5.2.1
└── info
20 directories, 13 files
应用根目录下面有entries/files两个目录和一个info文件.
3.1、info文件
info文件是应用的描述文件,使用json格式,info内容如下:
{
“appid”: “com.apps.demo”,
“name”: “Demo”,
“version”: “5.0.0.0”,
“arch”: [“amd64”, “mips64”],
“permissions”: {
“autostart”: false,
“notification”: false,
“trayicon”: false,
“clipboard”: false,
“account”: false,
“bluetooth”: false,
“camera”: false,
“audio_record”: false,
“installed_apps”: false
},
“support-plugins”: [
“plugins/demo”
],
“plugins”: [
“plugins/browser”,
“plugins/fcitx”
]
}
info文件中各个字段的说明如下:

appid:应用标识

name:应用名称

version:应用版本,格式为 {MAJOR}.{MINOR}.{PATCH}.{BUILD},所有版本号均为纯数字

arch:应用支持架构,当前商店支持如下CPU架构

amd64:x86架构CPU
mips64:龙芯系列CPU
arm64:ARM64位CPU
sw_64:申威CPU
permissions:应用权限描述。

autostart:是否允许自启动
notification:是否允许使用通知
trayicon:是否运行显示托盘图标
clipboard:是否允许使用剪切板
account:是否允许读取登录用户信息
bluetooth:是否允许使用蓝牙设备
camera:是否允许使用视频设备
audio_record:是否允许进行录音
installed_apps:是否允许读取安装软件列表
开发者需要注意,应用只允许使用普通用户权限启动,禁止应用以任何形式获取root权限。
support-plugins: 支持的插件类型
plugins:实现的的插件类型,在对应的plugins目录下,按照实现的插件类型放置文件
3.2、entries目录
存放程序的各种入口文件,一般在entries目录下有applications/autostart/services/plugins/icons等目录.开发者请按规范将对应的文件放到指定的目录进行打包,安装完成之后系统会自动链接到对应目录。
3.2.1、applications目录
applications是程序启动文件放置的位置,一般会有一个以appid命名的desktop文件放置在这个目录中。目前使用标准的desktop格式,相关标准可以参考
https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.1.html
一个简单的例子,com.apps.demo.desktop内容如下:
[Desktop Entry]
Categories=Audio;AudioVideo;Qt;
Name=Deepin Demo
GenericName=Demo
Type=Application
Exec=/opt/apps/com.apps.demo/files/bin/com.apps.demo %F
Icon=com.apps.demo
MimeType=audio/musepack;application/musepack;application/x-ape;audio/ape;audio/x-ape;audio/x-musepack;application/x-musepack;audio/x-mp3;application/x-id3;audio/mpeg;audio/x-mpeg;audio/x-mpeg-3;audio/mpeg3;audio/mp3;audio/x-m4a;audio/mpc;audio/x-mpc;audio/mp;audio/x-mp;application/ogg;application/x-ogg;audio/vorbis;audio/x-vorbis;audio/ogg;audio/x-ogg;audio/x-flac;application/x-flac;audio/flac;audio/3gp;audio/imy;audio/midi;audio/x-mpeg-4;audio/mpeg4;audio/mp4;audio/xmf;audio/x-wav;application/x-wav;audio/x-ms-wma;application/x-ms-wma;audio/aac;application/aac;
Comment[zh_CN]=为您播放本地及网络音频流
GenericName[zh_CN]=音乐
Name[zh_CN]=音乐

Desktop文件中需要关注的字段为:
Exec:程序的入口,后期会被沙箱启动。
MimeType:程序支持的关联类型
示例:

打包路径
entries/applications/com.apps.demo.desktop
安装路径
p/usr/share/applications/com.apps.demo.desktop

3.2.2、autostart目录
程序自启动入口文件。注意如果需要程序自启动,请在info文件中配置打开自启动权限,即设置autostart为true。
自启动权限为高风险权限,用户可以在不告知应用的情况下关闭应用的自启动权限。、

打包路径
entries/autostart/com.apps.demo.desktop
安装路径
/etc/xdg/autostart/com.apps.demo.desktop

3.2.3、services目录
程序注册的dbus服务目录,例如:
[D-BUS Service]
Name=com.apps.demo
Exec=/opt/apps/com.apps.demo/files/bin/com.apps.demo --dbus
一个应用只允许配置一个service。
示例:

打包路径
entries/services/com.apps.demo.xml
安装路径
/usr/share/dbus-1/service/com.apps.demo.xml

3.2.4、plugins目录
plugins目录放置提供给其他应用使用的内容,plugins目录下面可以有多个子目录。plugins的目的是为了其他应用提供一种插件机制,使得其他应用程序可以访问本应用提供的内容。
1、在plugins目录中,必须以目标的插件类型(plugin-mimetype)子目录名称,在对应的插件类型子目录中放置需要共享给宿主应用的内容。
2、一个应用可以给多个应用提供插件,需要对每一个插件类型创建对应的子目录,并在里面放置共享的内容。
3、需要在描述文件中列出需要注入宿主应用的插件类型。
技术上,安装器将会根据info文件描述的plugins列表,将对应插件link到相关程序的/opt/apps/ t a r g e t a p p i d / p l u g i n s / {target_appid}/plugins/ targetappid/plugins/{plugin-mimetype} 目录中, 同时在宿主应用程序启动时会设置一个APP_PLUGIN_DIR,使得宿主程序可以获取注入的内容。
注意事项:
1、desktop/service请指向自己的应用目录的/opt/apps/com.apps.demo/files目录下的文件。
2、对于特殊的应用,有多个入口的desktop文件,表示功能不同的程序。对于这种需要有多个入口的程序,采用严格限制的白名单方式进行申请。一般应用程序不允许有多个入口的desktop文件。
3、在plugins机制中,plugins的每一个子目录以及主程序目录均是无法相互访问的,在开发过程中请尤其注意这一点。
示例:
|

打包路径
entries/plugins/fcitx/libuosinput.so
entries/plugins/browser/libuosbrowser.so
安装路径
/usr/lib/x86_64-linux-gnu/fcitx/libuosinput.so
/usr/lib/mozilla/plugins/libuosbrowser.so

3.2.5、icons目录
放置应用图标icons,目录结构与系统icons目录结构保持一致即可,建议路径为icons/hicolor/scalable/apps/com.apps.demo.svg,使用svg格式图标。
如果使用非矢量格式,请按照分辨率来放置图标,如:
icons/hicolor/24x24/apps/com.apps.demo.png
icons/hicolor/16x16/apps/com.apps.demo.png
支持的分辨率包括: 16/24/32/48/128/256/512。
示例:

打包路径
icons/hicolor/scalable/apps/com.apps.demo.svg
icons/hicolor/24x24/apps/com.apps.demo.png
icons/hicolor/16x16/apps/com.apps.demo.png
安装路径
/usr/share/icons/hicolor/scalable/apps/com.apps.demo.svg
/usr/share/icons/hicolor/24x24/apps/com.apps.demo.png
/usr/share/icons/hicolor/16x16/apps/com.apps.demo.png

3.2.6、polkit目录
polkit 是一个应用程序级别的工具集,通过定义和审核权限规则,实现不同优先级进程间的通讯:控制决策集中在统一的框架之中,决定低优先级进程是否有权访问高优先级进程。该目录用于存放polkit配置文件,文件是 XML 格式,以 .policy 结尾,目录结构与系统polkit目录结构保持一致即可。
示例:

打包路径
polkit/actions/com.apps.demo.policy
安装路径
/usr/share/polkit-1/actions/com.apps.demo.policy

3.2.7、mime目录
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。该目录用于存放mime配置文件,目录结构与系统mime目录结构保持一致即可,文件是XML格式,以.xml结尾。
示例:

打包路径
mime/packages/com.apps.demo.xml
安装路径
/usr/share/mime/packages/com.apps.demo.xml

3.2.8、fonts目录
存放字体和配置文件,包含files和conf两个子目录。
files用来保存字体文件目录结构与系统fonts目录结构保持一致即可
conf目录用来存放字体配置
示例:

打包路径
fonts/files/truetype/wenquanyi.ttf
fonts/conf.d/57-wenquanyi.conf
安装路径
/usr/share/fonts/truetype/wenquanyi.ttf
/etc/fonts/conf.d/57-wenquanyi.conf

3.2.10、fcitx目录
fcitx是一个以 GPL 方式发布的输入法平台,可以通过安装引擎支持多种输入法,支持简入繁出,是在 Linux 操作系统中常用的中文输入法,用于保存皮肤、自定义标点、码表等信息。目录结构与系统fcitx目录结构保持一致即可,需要跟entries/plugins/fcitx下的输入法插件库配合使用。
示例:

打包路径
fcitx/skin/dark/pinyin.png
安装路径
/usr/share/fcitx/skin/dark/pinyin.png

3.3、files目录
存放应用程序需要的各种文件,对于该目录放置文件并无限制,但是建议将可执行程序放置到bin子目录。应用程序或者插件依赖的第三方库请放置在/opt/apps/ a p p i d / f i l e s / l i b 目 录 , 启 动 时 建 议 使 用 脚 本 添 加 环 境 变 量 启 动 , 不 允 许 安 装 到 系 统 目 录 。 ∗ 说 明 : l i b 目 录 下 的 库 请 不 要 相 互 依 赖 , 否 则 可 能 会 导 致 应 用 插 件 库 加 载 不 正 常 ∗ ∗ ∗ 4 、 文 件 系 统 权 限 ∗ ∗ ∗ 4.1 、 系 统 目 录 ∗ 系 统 分 区 为 只 读 状 态 , 主 要 用 于 为 应 用 提 供 基 本 的 运 行 依 赖 库 。 请 不 要 依 据 系 统 目 录 内 容 来 做 任 何 特 性 , 后 期 系 统 将 会 将 应 用 运 行 在 沙 箱 中 , 系 统 目 录 中 的 内 容 将 会 都 不 可 信 。 ∗ 4.2 、 用 户 目 录 ∗ 软 件 包 不 允 许 直 接 向 {appid}/files/lib目录,启动时建议使用脚本添加环境变量启动,不允许安装到系统目录。 *说明:lib目录下的库请不要相互依赖,否则可能会导致应用插件库加载不正常* **4、文件系统权限** *4.1、系统目录* 系统分区为只读状态,主要用于为应用提供基本的运行依赖库。请不要依据系统目录内容来做任何特性,后期系统将会将应用运行在沙箱中,系统目录中的内容将会都不可信。 *4.2、用户目录* 软件包不允许直接向 appid/files/lib使lib44.14.2HOME目录直接写入文件,后期系统将会使用沙箱技术重新定向$HOME,任何依赖该特性的行为都可能失效。
建议应用使用如下环境变量写入数据和配置:
$XDG_DATA_HOME
$XDG_CONFIG_HOME
$XDG_CACHE_HOME
以下目录可能需要用户同意才能进行写入

XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_VIDEOS_DIR="$HOME/Videos"

关于目录的定义,可以参考:
https://specifications.freedesktop.org/basedir-spec/basedir-spec-0.6.html


转载:https://blog.csdn.net/weixin_43855876/article/details/111699658
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场