赞
踩
简介
本文档描述了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目录,启动时建议使用脚本添加环境变量启动,不允许安装到系统目录。∗说明:lib目录下的库请不要相互依赖,否则可能会导致应用插件库加载不正常∗∗∗4、文件系统权限∗∗∗4.1、系统目录∗系统分区为只读状态,主要用于为应用提供基本的运行依赖库。请不要依据系统目录内容来做任何特性,后期系统将会将应用运行在沙箱中,系统目录中的内容将会都不可信。∗4.2、用户目录∗软件包不允许直接向HOME目录直接写入文件,后期系统将会使用沙箱技术重新定向$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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。