【问题标题】:Android BackupManager and multiple devices linked with the same accountAndroid BackupManager 和多个设备链接到同一个帐户
【发布时间】:2012-01-20 02:31:49
【问题描述】:

我一直想知道,当同一个启用了BackupManager 的应用程序安装在链接到同一个 Google 帐户的多台设备(例如智能手机和平板电脑)上时,Android's BackupManager 将如何发挥作用。 It seems that I am not the only one, 但我找不到任何关于此的规范。

您对这种情况有什么经验?是否有任何官方资源可以描述该案例?

【问题讨论】:

  • 我正在寻找相同的答案。原来有一个集合的概念。请看link

标签: android backup android-backup-service


【解决方案1】:

这个机制没有任何面向用户的文档,也没有很多应用程序开发人员的文档,因为它应该自动做正确的事情,但是the code is available。以下所有信息均来自检查源代码和bmgr 工具的文档选项。这个答案被改编为更加面向开发人员,来自Android Stack Exchange 上的用户友好的answer I originally wrote

让我们来谈谈套装吧,宝贝

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

默认行为

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

因此,当您设置新设备时,它会从旧设备的备份中恢复应用列表,并从旧设备的备份中恢复每个应用。如果您在一台设备上安装了应用程序,然后将其安装在另一台设备上,则该应用程序将使用旧设备中的数据进行恢复。无论哪种情况,数据现在都备份到设备的集合中,这意味着从现在开始,两个设备的备份数据是分开的。

将设备恢复出厂设置后,如果有设备,它将从该设备的上次备份中恢复,如果有,则从其他设备的备份中恢复,但从那时起它将开始创建自己的设备集开。

bmgr:基本使用

bmgr 工具用于调试和测试,让您可以稍微控制备份/恢复过程。您可以在adb shell 中使用此工具来触发所选包的备份和恢复、擦除包的备份数据,甚至是整个设备的恢复。

不要尝试在设备上的 shell 中使用它,除非以 root 身份使用:您需要系统级别的 android.permission.BACKUP 才能用它做任何有趣的事情。

为了测试,你可以让一个包立即更新它的备份数据:

bmgr backup com.shadowburst.showr
bmgr run

(或任何包名)。从默认选择的备份数据中恢复一个包:

bmgr restore com.shadowburst.showr

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

更多控制

现在是备份系统在其启动时不会执行的操作。要查看可用的备份数据集:

bmgr list sets

你会得到一些像这样的输出:

  3ff7800e963f25c5 : manta
  3f0e5c90a412cca7 : manta
  3dd65924a70e14c8 : TF101
  3baa67e9ce029355 : m0

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

bmgr restore 3ff7800e963f25c5 com.shadowburst.showr

您可以在命令末尾添加更多包名称以一次恢复多个包,或者您可以不指定包名称(只是令牌)以恢复具有该集合中数据的每个包(也就是说,它执行全系统恢复)。

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

bmgr wipe com.shadowburst.showr

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

您不能让设备开始写入不同的集合,也不能一次性擦除整个集合。

【讨论】:

  • 当我运行 'bmgr restore' 时,我应该期望 onRestore() 被立即调用吗?
  • 不是马上:我认为它只是排队。但我不认为会有太多延迟。我只是在这里猜测:我认为官方文档没有太多关于这个主题的内容。
  • 我希望它至少在用户重新安装应用程序时运行。但在我的测试中并非如此。所以我在摸索它到底有什么用处……
  • 我正在研究安卓数据备份的东西。我观察到数据备份没有同步到具有相同电子邮件 ID 的多个设备。例如:我在“A 设备”中安装了一个应用程序,并对数据库级别进行了一些更改,然后执行了 bmgr 工具命令,之后我卸载了该应用程序,然后重新安装。在这里,我可以看到我之前添加的数据。之后,我在“B 设备”中安装了相同的应用程序,但我无法获取数据备份。在这里,我使用了在两个设备中配置的相同邮件 ID。有什么建议可以将数据备份到两个设备中?
  • @Karthik 只能通过使用上面的bmgr restore 命令从 A 的备份集中恢复 B。 Google 备份用于在设备之间进行同步,因此它很繁琐且无法正常工作。
猜你喜欢
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 2016-05-25
相关资源
最近更新 更多