我遇到了同样的问题 - 正如谷歌开发者小组中所发现的那样 . 我引用Chris Grebeldinger(原作者)的非常详细的解释 .
“在文档中:http://developer.android.com/guide/topics/data/backup.html#Testing
它建议通过以下方式测试应用程序的备份/恢复:
-
安装你的应用
-
确保已启用备份/恢复
-
更改一些数据并调用dataChanged()
-
强制bmgr运行备份传递
-
卸载应用程序
-
重新安装应用程序并检查您的数据是否已恢复
一切似乎都很好,直到第4步,当我在日志中看到这个:
V / BackupManagerService(306):removePackageParticipantsLocked:uid = 10078#1 V / BackupManagerService(306):删除com.example.app的备份知识
然后是第5步:
V / BackupManagerService(306):restoreAtInstall pkg = com.example.app token = 21 V / BackupManagerService(306):没有恢复集 - 跳过恢复
因此,当卸载应用程序时,显然备份的数据会被破坏,这意味着官方测试工作流程可能无法正常工作?测试这个的最佳方法是什么?“
有没有人设法运行并正确测试此样本?
2 回答
再次感谢Chris Grebeldinger,他回答了我对google android开发者小组中原帖的回复 .
它是如何工作的:
在设备A中安装应用程序 .
设置设备A中的任何数据或首选项 .
在设备A上强制备份 . (使用adb shell bmgr backup [app_name],adb shell bmgr run) .
grab 第二台设备B.
在设备B上执行恢复出厂设置 .
重置后,再次安装该应用程序 .
恢复操作应该成功 .
令我恼火的是,谷歌Android文档中显示的“步骤”似乎非常详细,决定省略它看似必要的必要步骤 .
正如克里斯在答复中提到的那样,我希望这有助于其他找到同样问题的人 .
谢谢 .
编辑:
在使用不同设备进行进一步测试后,似乎整个备份/恢复过程可能因制造商和设备而异 . 我可以使用Google的文档方法测试示例应用程序,即使用nexus 7卸载和安装 - 只是巧合 . 因此,我的建议是在测试期间不要期望相同的行为和一致性 .
尝试使用模拟器进行测试 . 只需卸载并安装应用程序,带有API 22的Nexus 5就可以为我工作 .
完整过程:
按adb启用备份:
bmgr enable true
设置本地运输:
bmgr transports android/com.android.internal.backup.LocalTransport
运行您的应用并准备备份
运行备份:
bmgr backup <package> & bmgr run
从模拟器卸载应用程序
再次安装应用程序 - 还原应自动进行
提示:查找logcat以进行“备份”活动