应用元数据包架构

从 Android 14 开始,Android 软件包安装程序可以摄取有关应用的元数据(例如数据安全实践),以用于 Android 平台功能,例如更新后的位置信息权限提示。

有两种方法可以提供此元数据

  • 对于预装在系统映像上的应用,设备制造商可以通过将包含以下所述的可持久化捆绑包的 XML 文件添加到系统映像中,来提供有关应用的元数据。

  • 对于正在安装或更新的应用,要指定此元数据,应用安装程序应将一个 PersistableBundle 对象传入 setAppMetadata() 方法。

顶层可持久化捆绑包包含以下键/值对。除非另有说明,否则每个键都是可选的。

version(必需)
应用元数据格式的版本号。将 2 用作此当前版本的值,将 long 用作类型。如果 AppMetadata 的预期键或内容类型发生更改,Android 将更改版本号。
safety_labels
一个 PersistableBundle 对象,用于指定应用的安全标签 (safety-labels)。
system_app_safety_label
一个 PersistableBundle 对象,用于指定应用的安全标签 (system-app-safety-label)。对于充当系统服务的应用,使用 system_app_safety_label 捆绑包而非 safety_labels 捆绑包。
transparency_info
一个 PersistableBundle 对象,用于指定应用透明度信息

安全标签格式

safety_labels 捆绑包包含以下键/值对

version(必需)
安全标签格式的版本号。将 1 用作此当前版本的值,将 long 用作类型。
data_labels
一个 PersistableBundle 对象,用于指定应用收集和共享的数据
security_labels
一个 PersistableBundle 对象,用于指定应用数据删除和加密实践
third_party_verification
一个 PersistableBundle 对象,用于指定应用的数据安全实践如何由第三方验证

收集和共享的数据

data_labels 捆绑包包含以下键/值对

data_collected
一个 PersistableBundle 对象,用于指定应用收集的数据类型。
data_shared
一个 PersistableBundle 对象,用于指定应用共享的数据类型。

数据类别

data_collecteddata_shared 键都使用 data_category 捆绑包格式,其中包含以下列表中所示的键/值对。每个键都映射到一个 PersistableBundle 对象,该对象指定了特定类别的数据类型

  • 个人
  • 财务
  • 位置
  • 电子邮件和短信
  • 照片和视频
  • 音频
  • 存储
  • 健康与健身
  • 联系人
  • 日历
  • 标识符
  • 应用性能
  • 应用内操作
  • 搜索和浏览

数据类型

data_category 捆绑包中的每个键都映射到一个使用 data_type 格式的不同捆绑包。您在 data_type 格式中指定的键取决于您为 data_category 选择的内容。

可能的 data_type 键/值对显示在以下列表中。这些键的每个值都是一个 PersistableBundle 对象,它描述了应用针对该特定数据类型的数据使用实践。某些数据类型只使用一个键。

个人

  • 姓名
  • 电子邮件地址
  • 实际地址
  • 电话号码
  • 种族和民族
  • 政治或宗教信仰
  • 性取向或性别认同
  • 个人标识符
  • 其他

财务

  • 银行卡和银行账户
  • 购买历史记录
  • 信用评分
  • 其他

位置

  • 大致位置
  • 精确位置

电子邮件和短信

  • 电子邮件
  • 短信
  • 其他

照片和视频

  • 照片
  • 视频

音频

  • 录音
  • 音乐文件
  • 其他

存储

文件和文档

健康与健身

  • 健康
  • 健身

联系人

联系人

日历

日历

标识符

其他

应用性能

  • 崩溃日志
  • 性能诊断
  • 其他

应用内操作

  • 用户互动
  • 应用内搜索历史记录
  • 已安装应用
  • 用户生成内容
  • 其他

搜索和浏览

网页浏览历史记录

数据使用

data_usage 捆绑包包含以下键/值对

purposes(必需)

一个整数数组,表示收集或共享数据的具体原因,并使用 PersistableBundle putIntArray 方法。每个捆绑包都至少需要以下定义的一个目的。

  • 1: PURPOSE_APP_FUNCTIONALITY(应用功能)
  • 2: PURPOSE_ANALYTICS(分析)
  • 3: PURPOSE_DEVELOPER_COMMUNICATIONS(开发者通信)
  • 4: PURPOSE_FRAUD_PREVENTION_SECURITY(欺诈预防与安全)
  • 5: PURPOSE_ADVERTISING(广告)
  • 6: PURPOSE_PERSONALIZATION(个性化)
  • 7: PURPOSE_ACCOUNT_MANAGEMENT(账号管理)
is_collection_optional

布尔值。指定用户是否可以选择加入或退出数据收集。

注意: 仅为表示数据收集的 data_category 捆绑包设置此值;不要为数据共享设置此值。

ephemeral

布尔值。指定应用是否仅在内存中(而非磁盘上)处理服务器端数据,以及应用保留数据的时间是否不超过服务特定数据处理请求所需的时间。

注意: 仅为表示数据收集的 data_category 捆绑包设置此值;不要为数据共享设置此值。

数据删除和加密实践

security_labels 捆绑包包含表示应用数据删除和加密实践的键/值对

is_data_deletable
布尔值。指定应用是否允许用户请求应用删除其用户数据。
is_data_encrypted
布尔值。指定应用收集的所有用户数据是否在传输过程中加密。

第三方验证

third_party_verification 捆绑包由单个键 url 组成。此 URL(表示为字符串值)指定用于验证应用数据安全信息的第三方网站。

系统服务安全标签格式

对于充当系统服务的应用,使用 system_app_safety_label 捆绑包而非 safety_labels 捆绑包,并包含以下键/值对

url必需

  • 指向包含充当系统服务的应用安全信息的页面的 URL。
  • 使用 string 作为类型。
  • 如果未提供,则应使用隐私政策 URL 作为备用。
  • 注意:Google Play 商店使用 privacy_policy 作为备用。

透明度信息格式

transparency_info 捆绑包包含以下键/值对

developer_info
一个 PersistableBundle 对象,用于指定应用开发者信息
app_info
一个 PersistableBundle 对象,用于指定应用信息

开发者信息

developer_info 捆绑包包含以下键/值对

developer_#
一个 PersistableBundle 对象,用于标识开发者。developer_info 包含一个或多个 developer_#,其中 # 是一个整数。例如 developer_0developer_1developer_2 等。

开发者

developer_# 捆绑包包含以下键/值对

name必需
一个字符串,声明开发者的名称。
email必需
一个字符串,声明开发者的电子邮件地址。
address必需
一个字符串,声明开发者的邮寄地址。
country_region必需
一个字符串,声明开发者的国家或地区。
website
一个字符串,声明开发者的网站。

app_registry

  • 一个字符串,声明开发者的商店或注册表。
  • 如果开发者也在商店或其他注册表上注册,则该值应为商店的 Android 软件包名称或注册表的 URL。
  • 允许多个商店的多个条目。
  • 对于 Google Play,请使用 com.android.vending
  • 如果开发者是 Google Play SDK 索引中列出的 SDK,请省略此属性。
  • 如果开发者未在任何应用商店或注册表上注册,请省略此属性。

app_registry_id

  • 一个字符串,声明开发者在指定 app_registry 中的 ID。
  • 如果开发者也在商店或其他注册表上注册,则该值应为他们的商店或注册表身份。
  • 允许多个商店的多个条目。
  • 对于在 Google Play 注册的开发者,此值必须是开发者页面的 URL(例如,https://play.google.com/store/apps/dev?id=5700313618786177705 是开发者 Google LLC 的 URL)。
  • 如果开发者是 Google Play SDK 索引中列出的 SDK 开发者,请使用 SDK 的 Google Play SDK 索引 URL(例如,https://play.google.com/sdks/details/com-google-android-gms-play-services-ads 是 Google 移动广告 (GMA) SDK 的 Google Play SDK 索引 URL)。
  • 如果开发者在其他商店或注册表上注册,则可以提供应用商店 URL 或其他标识符。
  • 如果开发者未在任何应用商店注册,则可以省略此属性。

应用信息

app_info 捆绑包包含以下键/值对

title必需
一个字符串,声明应用的标题。
description必需
一个字符串,以人类可读的英文文本块形式声明应用的目的。
contains_ads必需
一个布尔值,声明应用是否显示任何广告。

privacy_policy必需

  • 一个字符串,包含一个 URL 属性,链接到详细说明用户数据处理方式的隐私政策。
  • 对于传输用户数据的应用是必需的。
  • 如果应用不包含此链接,则假定该应用不处理用户数据。
category必需

一个字符串,包含以下应用类别之一,最能描述应用的主要目的

  • Android(仅适用于 AOSP 组件)*
  • 艺术与设计
  • 汽车与交通工具
  • 美妆
  • 图书与参考
  • 商务
  • 漫画
  • 通讯
  • 约会
  • 教育
  • 娱乐
  • 活动
  • 财务
  • 美食佳饮
  • 游戏
  • 健康与健身
  • 家居与住宅
  • 安装程序(仅适用于应用商店或其他安装程序)*
  • 库与演示
  • 生活方式
  • 地图与导航
  • 医疗
  • 音乐与音频
  • 新闻与杂志
  • 亲子
  • 个性化
  • 摄影
  • 生产力
  • 安全*
  • 购物
  • 社交
  • 体育
  • 工具
  • 旅游与本地
  • 更新程序(仅适用于设备的默认无线 (OTA) 更新应用)*
  • 视频播放器与编辑器
  • 天气
contact_info
一个 PersistableBundle 对象,其中包含应用的联系信息(如下)。

联系信息

contact_info 捆绑包包含以下键/值对

email必需
一个字符串,声明应用的电子邮件地址。
website
一个字符串,声明应用的网站。