对于在 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-backup
和 cache
目录之外的所有内容完全启用该模式,如备份的文件中所述。
您的应用可以在 <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>