在 Android 中实现自动备份 API
在当今高科技世界中,数据是最大的意义。对于我们现在的大多数人来说,数据丢失是一场噩梦。备份数据,无论是计算机硬盘上的数据还是您使用的应用程序的自定义设置数据,都应该是您的首要任务之一。作为应用程序开发人员,我们应该为消费者提供备份数据的能力。幸运的是,Android 提供了一个名为 Auto Backup API 的功能,该功能已经使用了一段时间。
自动备份 API
它将本地应用程序数据保存在用户的 Google Drive 帐户中的私人文件夹中,每个应用程序的最大存储限制为 25 MB。 (数据不计入用户的 Google Drive 配额)。当达到应用程序的配额限制时,系统将停止备份数据。另一方面,旧备份会在创建新备份时被删除。要使用其默认配置启用它,只需将以下行添加到清单文件的应用程序标记。
android:allowBackup="true"
这里的所有都是它的…! Android 框架负责整个过程。要使其发挥作用,还有一个额外的先决条件。应在用户的设备上启用 Google 备份和重置功能,并为其分配一个备份帐户。此选项通常在 Android 9 上的“设置”>“备份和重置”>“应用数据”中可用。用户的数据现在可用于备份。
默认情况下包括文件、根目录和外部文件目录、数据库和 sharedPreferences,但是,此 API 始终忽略 noBackupFiles、缓存和 codeCache 文件夹。现在的问题是何时以及多久将数据发布到 Google Drive。备份过程由各种事件启动。
- 设备未使用。
- 自上次备份以来至少已过去 24 小时。
- 该设备通过 WiFi 或移动数据连接到互联网(取决于用户的备份配置)。
独特的配置
假设我们要求在整个备份过程中只考虑 sharedPreferences,而忽略其余的文件/目录。清单的应用程序标记的 fullBackupContent 功能使这变得简单。在 res > xml 中,我们需要创建一个包含以下信息的 XML 文件(备份 rules.xml)。在本例中,sharedPreferences 文件名为 data.xml。
然后,如下图,我们可以指向这个文件。
android:fullBackupContent="@xml/backup_rules"
- clientSideEncryption:客户端机密用于加密备份。
- deviceToDeviceTransfer:允许用户使用本地设备到设备传输将备份从一台设备移动到另一台设备。
备份代理
Android 充当应用程序和备份系统之间的桥梁。在使用文件备份时,它通常与 Key-Value 备份机制一起使用,实际上并不是必需的。但是,如果我们需要委托或回调来处理备份过程完成或达到配额限制等事件,我们可以为此设计一个代理。
Java
class gfgAgent : BackupAgentHelper() {
override fun onFullBackup(data: FullBackupDataOutput?) {
super.onFullBackup(data)
Log.e("BACK", "onFullBackup")
}
}
我们必须构造一个 BackupAgentHelper 子类并覆盖所需的方法/事件。之后,我们必须在清单文件的应用程序标签中定义我们的代理。
测试
使用 ADB shell 命令,我们可以强制备份和恢复。
adb shell bmgr enabled
备份
要创建完整备份,请按顺序运行以下四个指令。
1.激活备份管理器
adb shell bmgr backup @pm@
adb shell bmgr run
2.启动备份管理器并运行它
adb shell bmgr fullbackup
当系统执行完整备份时,会自动关闭程序,以防止在此过程中发生任何本地数据更改。我们可以在清单中启用一个标志,以便在前台运行备份。 (适用于大于 24 的版本)
恢复
当通过 Google Play 商店或使用 ADB 命令重新安装程序时,数据会自动恢复(使用 Android Studio 安装)。该程序在安装后但在用户可用之前恢复。如果我们需要使用 shell 命令来强制恢复,我们可以按照这里的详细说明进行操作。是不是有点太理论了?让我们打开 Android Studio 并试验一下这个 API。
避免备份
尽管备份是必不可少的,但此过程中不应包含一些内容。考虑以下示例:
- 与设备相关的任何信息,例如 FCM 令牌
- 当用户使用相同的 Google 帐户在另一台设备上安装该程序时,该程序将被恢复。在这种情况下,我们不应该拥有来自先前设备的数据。
- 任何敏感的用户信息,例如用户名和密码
- 授权令牌
- 当他在不同的设备上下载他的应用程序时,我们应该让他通过登录流程,而不是获取旧令牌并让用户直接使用应用程序。
- 很多文件
始终牢记给定的配额,即每个应用程序 25 MB。我们不应该添加可能占用所有可用空间的文件,从而导致备份失败。