2011-12-14 56 views
2

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

什么是与这种情况下你的经验?有没有官方资源来描述这种情况?

+1

我正在寻找相同的答案。事实证明,这是一套概念。请查看[link](http://android.stackexchange.com/questions/42245/google-backup-multiple-devices-using-the-same-account-what-happens-on-restore#answer-49425 ) – 2013-10-30 19:11:02

回答

5

该机制没有任何面向用户的文档,也没有针对应用程序开发人员的大量文档,因为它应该自动执行正确的操作,但是the code is available。以下所有信息均来自检查源代码和bmgr工具的记录选项。这个答案适用于更加面向开发人员,从Android Stack Exchange上的用户友好型answer I originally wrote开始。

讲起套,婴儿

Android的备份服务有一个概念叫做设置:设定备份从一台设备上的一个运输的所有数据。每组由一个唯一字符串标识,例如设备上的IMEI。当备份应用程序(或安装的应用程序列表)时,其备份数据将进入与其备份设备关联的集合中。所有集合仍然是特定于用户的Google帐户的。如果您擦除设备并将其卖给其他人,他将无法访问该设备的设置,除非他能登录到您的Google帐户。

默认行为

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

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

后出厂重置设备,它会从该设备的最后一个备份,如果有一个,而做不到这一点,从其他一些设备的备份,如果有一个恢复,但它将开始建立自己的一套然后开始。

bmgr:基本使用

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

不要尝试在除设备根外的设备上使用它:您需要系统级别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位十六进制数被称为令牌,并唯一标识该组。右侧的东西是拥有该设备的设备的(相对)友好名称。例如,manta是Nexus 10的代码名称; TF101是指原来的华硕变压器。您可以通过指定的令牌恢复从一组您所选择的软件包的数据:

bmgr restore 3ff7800e963f25c5 com.shadowburst.showr 

您可以到命令的末尾添加更多的包名来一次恢复几个包,也可以指定不包名称(只是令牌)来恢复该组中的数据的每个程序包(即,它执行的还原操作是全系统)。

最后,你可以从当前的一组擦拭了包的数据:

bmgr wipe com.shadowburst.showr 

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

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

+0

当我运行'bmgr恢复'时,我应该期待onRestore()立即被调用吗? – 2014-01-20 17:55:26

相关问题