[bmgr]android应用数据备份以及还原

bmgr是一个shell工具你可以用来与备份管理器在Android设备(支持API级别8或更高)。它提供了命令来指导的备份和恢复操作,这样你不需要反复清除数据或采取类似的侵入性的步骤来测试您的应用程序的备份代理。这些命令是通过adb shell。

使用备份操作
通常,应用程序必须通知备份管理器在它的数据已经改变。通过dataChanged()。备份管理器将调用您的备份代理的onBackup()实现在未来某个时刻。如果调用dataChanged(),可以调用一个备份请求从命令行运行bmgr备份命令。

命令:
adb shell bmgr backup <package>

当您执行该备份命令,您的应用程序的备份代理将调用来执行备份操作在未来一段时间内(通过你的onBackup()方法),尽管没有保证当它会发生。然而,您可以强制执行所有没有运行的备份操作,通过使用bmgr运行命令:

命令:
Adb shell bmgr run

这个命令会导致所有调用备份代理的应用程序的都备份。

使用恢复操作
恢复操作不像备份操作,这是成批的在一起运行在一个偶然的基础上,立即执行恢复操作。备份管理器目前提供了两种类型的恢复操作。
第一种恢复整个装置的数据备份。典型的表现只有当一个设备是第一个提供(复制设置和其他保存的状态从用户之前的设备),是一个操作,只有系统可以执行。
第二种恢复操作单个应用程序恢复到它的“活跃的”数据集;也就是说,应用程序将放弃其当前数据和恢复到最后一次正确数据,保存在当前的备份映像。
您可以调用第二个恢复操作与requestRestore()方法。备份管理器将调用您的备份代理的onRestore()实现。

当测试您的应用程序,你可以立即调用恢复操作,绕过requestRestore()方法。使用bmgr恢复命令:
adb shell bmgr restore <package>
备份管理器将立即实例化应用程序的备份代理和调用它来恢复。这将发生,即使应用程序是当前没有运行。

其他命令:
Wiping data(擦拭数据)

一个应用程序的数据可以被清除从Activity数据集合中。这个操作非常有用,当你在开发一个备份代理。以防错误引导你写错误的数据或保存的状态信息。你可以擦拭一个应用程序的数据与bmgr擦拭命令:
adb  shell  bmgr  wipe <package>

接下来的备份操作应用程序的代理进程将看起来好像应用程序从未支持任何东西之前。

查看backup(备份)是否可用
adb shell bmgr enabled

如果备份操作可用的,如果您的应用程序的备份代理是从未被调用备份,以验证操作系统是否认为它应该执行这些操作。

你也可以直接禁用或启用备份管理器:
adb shell bmgr enable <boolean>

警告!
当备份是禁用的,当前的备份运输将明确地擦拭Activity中的数据。如果当一个用户说他们不希望他们的数据备份,备份管理器方面希望。则没有新的数据将被保存从设备,没有恢复操作将成为完成恢复操作。除非备份管理器是重新启用(通过设置或通过以上bmgr命令)。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是您需要的java代码: ``` import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ADBController { public static void main(String[] args) throws IOException { Runtime runtime = Runtime.getRuntime(); Process process = null; //Send reboot command process = runtime.exec("adb reboot"); System.out.println("ADB command sent: adb reboot"); //Wait for device to restart try{ Thread.sleep(10000); //Wait for 10 seconds }catch(InterruptedException e){ System.out.println("InterruptedException caught"); } //Loop until getRestoreStatus() returns non-empty string String restoreStatus = ""; long startTime = System.currentTimeMillis(); while(restoreStatus.isEmpty()){ try{ process = runtime.exec("adb shell bmgr getPendingRestores"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); restoreStatus = reader.readLine(); System.out.println("Restore status: " + restoreStatus); reader.close(); }catch(IOException e){ System.out.println("IOException caught"); e.printStackTrace(); } //Exit loop after 30 seconds if((System.currentTimeMillis() - startTime) > 30000){ System.out.println("Exiting loop after 30 seconds"); break; } //Wait for 5 seconds before checking restore status again try{ Thread.sleep(5000); //Wait for 5 seconds }catch(InterruptedException e){ System.out.println("InterruptedException caught"); } } } } ``` 注意:在使用此代码之前,请确认您已经安装并配置好了ADB驱动程序以及在Path环境变量中添加了ADB的路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值