Android BackupManager和与同一帐户链接的多个设备

Flo*_*low 4 backup android android-backup-service

我一直想知道,当在同一个Google帐户上链接的多个设备(例如智能手机和平板电脑)上安装相同的已启用应用时,AndroidBackupManager会如何行动BackupManager.似乎我不是唯一一个,但我找不到任何关于此的规范.

您对此方案的体验如何?是否有描述该案例的官方资源?

Dan*_*lme 7

这种机制没有任何面向用户的文档,也没有大量的应用程序开发人员文档,因为它应该自动做正确的事情,但代码是可用的.以下所有信息均来自检查源代码和bmgr工具的文档选项.从我最初Android Stack Exchange的用户友好的答案来看,这个答案适合更加面向开发人员.

我们来谈谈套装,宝贝

Android的备份服务有一个称为集合的概念:在一个传输上从一个设备备份的所有数据的集合.每个集合由唯一字符串标识,例如设备上的IMEI.当备份应用程序(或已安装的应用程序列表)时,其备份数据将进入与其备份的设备关联的集合中.所有套装仍然特定于用户的Google帐户.如果您擦除设备并将其出售给其他人,除非他可以登录您的Google帐户,否则他将无法访问该设备的设置.

默认行为

安装应用程序或设备恢复其应用程序列表时,备份系统首先在该设备的设备中查找该程序包的备份数据.如果它没有找到(因为它是一个没有备份数据的全新设备,或者因为该设备上从未安装过该包),它会将搜索范围扩展到其他设备.(如果有选择,它将使用用于完整设备还原的最后一组.)

因此,当您设置新设备时,它将从旧设备的备份中恢复应用程序列表,并从旧设备的备份中恢复每个应用程序.如果您在一台设备上安装了应用程序并将其安装在另一台设备上,则该应用程序将使用旧设备中的数据进行恢复.在任何一种情况下,数据现在都备份到设备的集合中,这意味着来自两个设备的备份数据与现在分开.

出厂重置设备后,如果有设备,它将从该设备的最后一次备份恢复,如果有的话,从其他设备的备份中恢复,但是从那时起它将开始创建自己的设备.

bmgr:基本用法

bmgr工具用于调试和测试,并为您提供对备份/恢复过程的一点控制.您可以在a中使用此工具adb shell来触发所选软件包的备份和还原,擦除软件包的备份数据,甚至整个设备还原.

除了root之外,不要尝试在设备上的shell中使用它:你需要系统级别android.permission.BACKUP来做任何有趣的事情.

对于测试,您可以使包立即更新其备份数据:

bmgr backup com.shadowburst.showr
bmgr run
Run Code Online (Sandbox Code Playgroud)

(或任何包名称).要从备份数据中恢复一个包,它将默认选择:

bmgr restore com.shadowburst.showr
Run Code Online (Sandbox Code Playgroud)

这仅适用于已安装的软件包:它不会安装软件包以恢复数据.这两个命令都只是用于测试,因为通常设备会在需要时备份和恢复数据.

更多控制

现在,对于备份系统不会在其上执行的操作.要查看可用的备份数据集:

bmgr list sets
Run Code Online (Sandbox Code Playgroud)

你会得到这样的输出:

  3ff7800e963f25c5 : manta
  3f0e5c90a412cca7 : manta
  3dd65924a70e14c8 : TF101
  3baa67e9ce029355 : m0
Run Code Online (Sandbox Code Playgroud)

左侧的64位十六进制数称为令牌,并唯一标识该集.右边的东西是拥有该集合的设备的(相对)友好名称.例如,manta是Nexus 10的代号; TF101是指原来的华硕变压器.您可以通过指定其令牌来从您选择的集合中恢复包的数据:

bmgr restore 3ff7800e963f25c5 com.shadowburst.showr
Run Code Online (Sandbox Code Playgroud)

您可以在命令末尾添加更多程序包名称以一次还原多个程序包,或者您可以不指定程序包名称(只是令牌)来还原包含该组中数据的每个程序包(即,它执行完整系统恢复).

最后,您可以从当前集中擦除包的数据:

bmgr wipe com.shadowburst.showr
Run Code Online (Sandbox Code Playgroud)

这将使其下一个备份操作从头开始.在调试备份代码时,这可能很有用.

您不能让设备开始写入不同的设置,也不能一次擦除整个设备.