Skip to content

警告!此规范内容是不稳定版本,可能会发生破坏兼容性的更新。当无法保障向下兼容时,将会升级此文档的主版本号,如从“1.0”更新到“2.0”。反之,普通更新只会升级次版本号,如“1.0”更新到“1.1”,其对“1.0”版本向下兼容。请在使用前确认此文档的版本号,并为将来可能发生的兼容性变化做好准备。

应用数据目录规范

引言

本规范主要使用者为应用开发厂商,适用面向普通用户的通用软件开发。本规范主要遵循如下原则:

  • 应用与系统隔离:应用不应当向系统目录写入数据。系统还原功能会彻底清除这些数据。

  • 应用间数据隔离:不同应用的私有数据不能相互访问。

数据存储目录

根据以上原则,对应用的目录使用做如下定义:

应用用户数据目录

和用户相关的应用数据,要求应用数据优先在用户目录进行存储。该规范遵循XDG相关目录规范,例如:

env
XDG_DATA_HOME\${appid}
XDG_CONFIG_HOME\${appid}
XDG_CACHE_HOME\${appid}
XDG_DATA_HOME\${appid}
XDG_CONFIG_HOME\${appid}
XDG_CACHE_HOME\${appid}

应用私有数据目录

应用私有数据目录通过环境变量DSG_APP_DATA来指定,默认情况下,DSG_APP_DATA值为:

env
DSG_APP_DATA=/deepin/appdata/${appid}
DSG_APP_DATA=/deepin/appdata/${appid}

该环境变量由系统提供,默认保护应用appid,不需要开发者拼接appid。

该目录仅供应用自身读写,其他应用不允许读写,否则将导致不可预期行为。

该目录权限应当为:

bash
权限:(0770/drwxrwx---)
Uid:(    0/    root)
Gid:(  100/   users)
权限:(0770/drwxrwx---)
Uid:(    0/    root)
Gid:(  100/   users)

应用数据清理

在应用程序卸载时,操作系统应该能够自动清理应用数据目录,如果应用需要进行数据保留,可以在安装时的info.json文件中添加描述信息。

json
{
 "appid": "com.deepin.example",
  "uninstall": {
    "filesystem.app_data": {
      "keep_patterns": [
        "config/*",
        "*data"
      ]
    }
  }
}
{
 "appid": "com.deepin.example",
  "uninstall": {
    "filesystem.app_data": {
      "keep_patterns": [
        "config/*",
        "*data"
      ]
    }
  }
}

keep_patterns为需要保留的文件匹配列表,使用globbing patterns格式,和.gitignore相同,参考Wildcards

在删除时,会匹配DSG_APP_DATA目录下的子目录或文件,保留和keep_patterns匹配的内容。

安全访问控制

本规范要求操作系统实现安全访问控制功能,即其他应用/进程不能访问应用的私有数据目录。

注意事项

  • 应当特别注意,只有和用户无关的数据才能放在应用私有数据目录,如应用激活信息,应用级别的配置数据等。
  • 系统会使用额外的安全模块保障应用之间隔离,请勿直接读取其他应用的数私有据目录。
  • 在程序中请使用DSG_APP_DATA读取目录位置,如果DSG_APP_DATA为空时,再使用/deepin/appdata/${appid}作为回滚的配置。

兼容性说明

兼容性建议

在1040之前的系统中,不支持自动创建应用数据目录,请在rules文件中添加如下代码来创建目录:

rules
# 注意替换${appid}
override_dh_fixperms:
        dh_fixperms
        chmod 770 /deepin/appdata/${appid}
        chown root:users /deepin/appdata/${appid}
# 注意替换${appid}
override_dh_fixperms:
        dh_fixperms
        chmod 770 /deepin/appdata/${appid}
        chown root:users /deepin/appdata/${appid}

或者确认deb包中包含了该目录且权限正确。

兼容列表

  • ★: 支持
  • ☆: 不支持
特性<=1040>=1050
安全访问控制
应用数据清理

参考

  1. Wildcards
  2. Chapter 4. Required files under the debian directory