如何保存和加载Android应用程序状态的快照?

时间:2013-04-27 10:34:06

标签: android state snapshot savestate

在阅读本文之前,请注意我不是在谈论捕获屏幕

动机

很多时候,为了测试应用程序,我们需要经过许多活动(包括加载/启动屏幕),直到我们到达我们刚刚更新的那个为了测试它。

我希望通过捕获应用程序的确切状态(内存,首选项,活动堆栈......)来减少这段时间,以便再次去那里。

另一个例子:QA团队可以告诉我在哪种情况下会发生错误,而不必告诉我整个过程,直到他们到达那里(因为它可能无法重现)然后我可以运行应用程序,并确切地知道抛出异常的地方,直接通过DDMS的日志去那里。

另一个例子:我们处理游戏,QA团队已经测试了几个小时的游戏并达到了某个阶段,并希望保存应用程序的当前状态,以便从这一点开始测试并制作多个测试它,而不是每次从头开始运行应用程序,等待它加载并完成所有阶段,直到它们到达这个阶段。

我认为还有其他一些场景可能会有用。

问题

这样的事情在VM世界中可能是可能的(例如virualBox),它可能是android模拟器(至少根据this post,但他们也说它是“挑剔的”,不知道是什么在这种情况下意味着),但不是设备。

上面的例子,尽管它们可能有效,但它们适用于整个操作系统,而不适用于特定的应用程序,所以即使我选择使用它们,也需要很长时间才能使用(另外我需要使用一个模拟器,通常比任何设备慢得多。)

我很确定当前的API不支持这样的事情(出于安全原因,它可能是一件好事)。

问题

是否可以使用ROOT捕获并加载整个应用状态?可能也是一个系统应用程序?

也许这个任务已经有了应用程序?

1 个答案:

答案 0 :(得分:0)

由于应用程序通常会将其整个状态保存在SharedPreferences中并且持久存储在数据库中,因此在大多数应用程序中,您可以分别使用adb backupadb restore备份和还原数据和状态:

<强>备份

adb backup -f app.ab com.company.app

<强>恢复

adb restore app.ab

PS :此功能是在ICS中引入的,并且需要是root。

更多信息in this tutorial