备份和恢复方面的变更

对于在 Android 12 上运行且以其为目标平台的应用,备份和恢复的工作方式发生了变化。Android 备份和恢复有两种形式:

  • 云端备份:用户数据存储在用户的 Google 云端硬盘中,以便之后可以在相应设备或新设备上恢复。
  • 设备到设备 (D2D) 传输:用户数据直接从用户的旧设备发送到其新设备,如通过使用数据线。

如需详细了解如何备份和恢复数据,请参阅通过自动备份功能备份用户数据使用 Android Backup Service 备份键值对

D2D 传输功能变更

对于在 Android 12 及更高版本上运行且以其为目标平台的应用:

  • 指定 android:allowBackup="false" 会禁止备份到 Google 云端硬盘,但不会停用应用的 D2D 传输这种方式。

  • 使用 XML 配置机制指定包含和排除规则不再影响 D2D 传输,不过仍影响 Google 云端硬盘备份。如需指定 D2D 传输的规则,您必须使用下一部分中所述的新配置。

新的包含和排除格式

在 Android 12 及更高版本上运行且以其为目标平台的应用对 XML 配置使用不同的格式。这种格式要求您分别为云端备份和 D2D 传输指定包含和排除规则,从而明确区分 Google 云端硬盘备份和 D2D 传输。

(可选)您还可以使用它来指定备份的规则,在这种情况下,系统会忽略旧配置。

XML 格式变更

下面是 Android 11 及更低版本中用于备份和恢复配置的格式:

<full-backup-content>
    <include domain=["file" | "database" | "sharedpref" | "external" |
                     "root"] path="string"
    requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] />
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                     "root"] path="string" />
</full-backup-content>

下面以粗体显示了格式的变更。

<data-extraction-rules>
  <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
  </cloud-backup>
  <device-transfer>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
  </device-transfer>
</data-extraction-rules>

配置的每一部分(<cloud-backup><device-transfer>)包含仅适用于该特定传输类型的规则。例如,这样可让您从 Google 云端硬盘备份中排除某个文件或目录,同时仍在 D2D 传输过程中传输该文件或目录。如果您的文件太大而无法备份到云端,但可以在设备之间毫无问题地传输,这可能会很有用。

如果您没有为某种特定的备份模式指定规则(例如,如果缺少 <device-transfer> 部分),则系统会为除 no-backupcache 目录之外的所有内容完全启用该模式,如备份的文件中所述。

您的应用可以在 <cloud-backup> 部分中设置 disableIfNoEncryptionCapabilities 标志,以确保只有在可以加密时(例如,当用户具有锁定屏幕时)备份操作才会发生。如果用户的设备无法支持加密,设置此约束条件可阻止将备份内容发送到云端,但由于不会将 D2D 传输内容发送到服务器,因此即使在不支持加密的设备上,D2D 传输也会继续执行。

应用的清单标志

通过在清单文件中使用 android:dataExtractionRules 属性,将您的应用指向新的 XML 配置。当您指向新的 XML 配置时,系统会忽略指向旧配置的 android:fullBackupContent 属性。以下代码示例展示了新的清单文件条目:

<application
    ...
    <!-- The below attribute is ignored. -->
    android:fullBackupContent="old_config.xml"
    <!-- You can point to your new configuration using the new
         dataExtractionRules attribute . -->
    android:dataExtractionRules="new_config.xml"
    ...>
</application>