此页面显示如何手动触发自动备份,键/值备份和还原操作,以确保您的应用程序正确保存和恢复数据。

一、备份如何运行

该部分介绍了Android备份框架中的各种功能,以及它们如何与支持自动备份和键/值备份的应用程序进行交互。 在应用程序开发阶段,框架的大部分内部工作都被抽象出来,因此您不需要知道这些信息。 然而,在测试阶段,对这些概念的了解很重要。

下图说明了备份和还原期间数据流的方式:

备份管理器服务是一个Android系统服务,协调和启动备份和还原操作。 该服务可通过BackupManager API访问。 在备份操作期间,服务会将您的应用程序查询备份数据,然后将其传送到备份传输,然后归档数据。 在恢复操作期间,备份管理器服务从备份传输中检索备份数据,并将数据恢复到设备。

备份传输是负责存储和检索备份的Android组件。 Android设备可以有零个或多个备份传输,但只有其中一个传输可以被标记为活动。 可用的备份传输可能因设备而异(由于设备制造商和服务提供商的自定义),但大多数支持Google Play的设备都附带以下传输:

1、Google传输(默认) -  大多数设备上的活动备份传输是Google移动服务的一部分。 本文档假定用户正在使用Google传输。 此传输将自动备份数据存储在用户的Google云端硬盘帐户中的私人文件夹中。 密钥/值备份数据存储在Android备份服务中。

2、本地传输 - 将备份数据在本地存储在设备上。 这种传输通常用于开发/调试目的,在现实世界中无用。

如果设备没有任何备份传输,则无法备份数据。 您的应用没有受到不利影响。

注意:由于备份传输可能因设备而异,因此在使用备份时,Android无法保证数据的安全。 使用备份来存储敏感数据(如用户名和密码)要小心谨慎。

二、先决条件

您需要了解以下工具:

1、adb - 在设备或仿真器上运行命令。

2、bmgr - 执行各种备份和恢复操作。

3、logcat - 查看备份和还原操作的输出。

三、准备您的设备或模拟器

通过以下检查清单准备您的设备或模拟器进行备份测试:

1、对于自动备份,请检查您是否使用运行Android 6.0(API级别23)或更高版本的设备或模拟器。

2、对于Key / Value Backup,请检查您是否使用运行Android 2.2(API级别8)或更高版本的设备或模拟器。

3、检查设备或模拟器上是否已启用备份和还原,并添加了Google帐户。 有两种方法来检查:

1)、在设备上,转到设置 - >备份和还原。

2)、从adb shell,运行bmgr启用。

在物理设备上,通常在初始设置向导期间启用备份和还原。 仿真器不运行安装向导,因此请勿忘记启用备份,并在设备设置中指定备份帐户。

4、通过运行以下命令,确保Google Backup Transport可用并处于活动状态:

$ adb shell bmgr list transports

然后,检查控制台的以下输出:

android/com.android.internal.backup.LocalTransport
* com.google.android.gms/.backup.BackupTransportService

没有Google Play的物理设备和没有Google API的仿真器可能不包括Google备份传输。 本文假设您正在使用Google备份传输。 您可以使用其他备份传输测试备份和恢复,但过程和输出可能不同。

四、测试备份

要启动应用程序的备份,请运行以下命令:

$ adb shell bmgr backupnow <PACKAGE>

backupnow命令在运行Android 7.0或更高版本的设备和仿真器上可用。 它根据包的清单声明运行密钥/值备份或自动备份。 检查logcat以查看备份过程的输出。 例如:

D/BackupManagerService: fullTransportBackup()
I/GmsBackupTransport: Attempt to do full backup on <PACKAGE>---- or ----V/BackupManagerService: Scheduling immediate backup pass
D/PerformBackupTask: starting key/value Backup of BackupRequest{pkg=<PACKAGE>}

如果backupnow命令在您的设备上不可用,请完成以下步骤的自动备份或键/值备份。

对于自动备份,请完成以下步骤:

1、运行以下命令:

$ adb shell bmgr backup @pm@ && adb shell bmgr run

2、等待直到上一步骤中的命令通过监视adb logcat获得以下输出结果:

I/BackupManagerService: K/V backup pass finished.

3、运行以下命令执行完全备份:

$ adb shell bmgr fullbackup <PACKAGE>

注意:fullbackup命令强制您的应用程序执行完全备份,即使您的应用程序实现了键/值备份。 系统将忽略您的应用程序的备份配置,并将其作为android:fullBackupOnly属性设置为true。

对于密钥/值备份,请按照以下步骤安排并运行备份:

1、如果您的应用程序自上次备份以来尚未调用BackupManager.dataChanged(),则可以通过运行以下命令将应用程序包括在备份操作中进行测试:

$ adb shell bmgr backup <PACKAGE>

2、然后,您可以通过运行以下命令来触发备份:

$ adb shell bmgr run

bmgr备份将您的应用程序添加到备份管理器队列。 bmgr运行启动备份操作,这将强制备份管理器执行其队列中的所有备份请求。

测试密钥/值备份时,必须验证每个首选项更改计划备份。 您可以使用以下方法之一验证备份是否安排:

1、运行adb shell dumpsys备份,并检查您的应用程序是否列在Pending键/值备份下的命令输出中。

2、在安排备份时记录消息。 然后,您可以运行adb logcat,并检查命令的输出,以验证备份是否已安排。

五、测试恢复

要手动启动还原,请运行以下命令:

$ adb shell bmgr restore <TOKEN> <PACKAGE>

警告:执行还原操作之前,此操作会停止应用程序并擦除其数据。

要查找备份令牌,请运行adb shell dumppsys备份。 令牌是遵循标签Ancestral:和Current:的十六进制字符串。 祖先令牌是指在初始设置时(使用设备设置向导)用于恢复设备的备份数据集。 当前令牌是指设备的当前备份数据集(设备当前正在发送其备份数据的数据集)。

然后,检查logcat以查看恢复过程的输出。 例如:

V/BackupManagerService: beginRestoreSession: pkg=<PACKAGE> transport=null
V/RestoreSession: restorePackage pkg=<PACKAGE> token=368abb4465c5c683
...
I/BackupManagerService: Restore complete.

您还可以通过使用adb或通过Google Play商店应用卸载并重新安装应用,来测试应用的自动还原。

六、故障排除

本节帮助您解决一些常见问题。

1、运输配额超标

如果您在logcat中看到以下消息:

I/PFTBT: Transport rejected backup of <PACKAGE>, skipping--- or ---I/PFTBT: Transport quota exceeded for package: <PACKAGE>

您的应用已超出配额。 减少备份数据量,然后重试。 例如,验证您是否只将数据缓存在应用程序的缓存目录中。 备份中不包括缓存目录。

2、完全备份是不可能的

如果您在logcat中看到以下消息:

I/BackupManagerService: Full backup not currently possible -- key/value backup not yet run?

完全备份操作失败,因为设备上尚未发生密钥/值备份操作。 使用命令bmgr运行触发键/值备份,然后重试。

3、超时等待代理

如果您在logcat中看到以下消息:

12-05 18:59:02.033  1910  2251 D BackupManagerService:awaiting agent for ApplicationInfo{5c7cde0 com.your.app.package}
12-05 18:59:12.117  1910  2251 W BackupManagerService:Timeout waiting for agent ApplicationInfo{5c7cde0 com.your.app.package}
12-05 18:59:12.117  1910  2251 W BackupManagerService:Can't find backup agent for com.your.app.package

您的应用程序需要超过10秒才能启动备份。 请注意日志输出中的时间戳差异。 当您的应用程序使用没有ProGuard的多区域配置时,通常会发生此错误,可能是由Android Studio中的即时运行引起的。 要解决该错误,请使用ProGuard并且不要使用即时运行。

4、未初始化的备份帐户

如果您在logcat中看到以下消息:

01-31 14:32:45.698 17280 17292 I Backup: [GmsBackupTransport] Try to backup for an uninitialized backup account.
01-31 14:32:45.699  1043 18255 W PFTBT: Transport failed; aborting backup: -1001
01-31 14:32:45.699  1043 18255 I PFTBT: Full backup completed with status: -1000

备份已中止,因为备份数据集未初始化。 使用命令adb shell bmgr运行运行备份管理器,然后尝试再次执行备份。

数据存储:数据备份:测试备份和还原相关推荐

  1. Android数据存储---数据备份(Data Backup)(三)

    继承BackupAgentHelper类 如果要备份完整的文件(既可以是SharedPreferences文件也可以是内部存储文件),那么就应该使用BackupAgentHelper类来构建备份代理. ...

  2. VSAN报错:该主机的VSphere HA 检测信号数据存储数据为1,少于要求数目:2

    VSPHERE HA存储掉线1个,系统自动报警,所有节点都会报警,知道如何处理了吗?

  3. python存储数据的操作(csv格式文件,Excel表格文件)!!!

    python存储数据 存储数据的方式 两种存储数据方式的区别 csv格式文件 Excel格式文件 csv文件的写入 csv文件的读取 Excel基本概念 Excel文件的写入 Excel文件的读取 存 ...

  4. python爬虫实现股票数据存储_Python 爬虫 | 股票数据的获取

    最近股市有了一股牛市的味道,我也来蹭波热度,这节我们将爬取股票数据,股票数据在网上很容易找到,这里以某方财富网为例 目标: 爬取股票数据并存储进数据库中(这里以MongoDB为例) 目标网站(base ...

  5. 1211笔记关于//modal//更改窗口的根控制器//数据存取//Plist属性列表//-“沙盒机制”//plis属性列表//偏好设置//归档普通对象//联系人数据存储//协议与回调函数...

    笔记的完整版pdf文档下载地址:https://www.evernote.com/shard/s227/sh/aba2aa01-4d96-429d-9bbd-2f285c7c0c79/65772262 ...

  6. IOS的四种数据存储方式及优劣

    IOS有四种经常使用数据存储方式: 第一种方法:用NSUserDefaults存储配置信息 NSUserDefaults被设计用来存储设备和应用的配置信息.它通过一个工厂方法返回默认的.也是最经常使用 ...

  7. 用户画像标签数据存储之Elasticsearch存储

    目录 0. 相关文章链接 1. Elasticsearch简介 2. 应用场景 3. 工程化案例 4. 用户画像标签数据存储总结 注:此博文为根据 赵宏田 老师的 用户画像·方法论与工程化解决方案 一 ...

  8. Android的数据存储:SharedPrefrence存储,手机内部文件存储,手机外部文件存储

    存储方式分类 Android支持的数据存储方式:SharedPrefrence存储手机内部文件存储手机外部文件存储Sqlite数据库存储远程服务器存储 SharedPrefrence存储 介绍 SP存 ...

  9. 爬虫后如何进行数据存储和进行数据分析

    目录 数据存储 数据存入数据库 数据分析 预警 平均 对比 爬取一个链家的北京租房信息,当数据爬取出来之后我们可以将其传入数据库中进行后续操作,首先要进行一个数据库创造和表格的建立. import s ...

  10. Android studio 系统存储数据SharedPreferences

    SharePreferences类是一个轻量级的存储类,特别适合用于保存软件配置参数.使用SharedPreferences保存数据,其背后是用xml文件存放数据. 保存路径:找到DeviceFile ...

最新文章

  1. SQL学习笔记:库和表的创建
  2. Excel 计算时间差
  3. 数字旅游解决方案_迪庆州首个数字旅游小镇5G基站在巴拉格宗开通
  4. C++的迭代器Interator
  5. java调用onnx模型_开源一年多的模型交换格式ONNX,已经一统框架江湖了?
  6. Kubernetes面试题
  7. Error in moviepy setup command: 'extras_require' must be a dictionary whose values are strings or li
  8. hadoop商品推荐_北京尚学堂学员学习经验分享:商品推荐
  9. 2.5维数字地图制作
  10. J2EE 高 级 软 件 工 程 师 面 试 题 集
  11. 阳光动力2号太阳能飞机的基本工作原理
  12. 自动检测技术学习心得体会_关于传感器与检测技术的学习体会
  13. libGDX游戏开发之NPC敌人事件(六)
  14. 网站怎么样对接微信公众号,看以下操作
  15. 使用钉钉自定义机器人发信息
  16. Cartopy 0.20 最新功能 —— Cartopy 装不上别慌,内附解决方案
  17. 银河麒麟Kydroid1.0新品正式发布--助力安可产业生态建设
  18. [推荐] 一个 Node.js 技术选型案例:使用 CARMEN 作为卡牌手游技术栈
  19. 朴素贝叶斯算法及其实战
  20. 错排公式 详细解答

热门文章

  1. [附源码]计算机毕业设计JAVA房屋租赁管理系统
  2. Xcode 9使用时那些坑
  3. 计算机毕业设计Java医用物品管理系统(源码+系统+mysql数据库+lw文档)
  4. sx1268 中文_微雪电子SX1268 Lora 433M频段简介
  5. java反射之dynamic invocation与原生类型
  6. 多用户商城系统解决方案
  7. MIKE 21 教程 2.3 水动力模块教学:求解方程与参数设置(Solution Technique),水深校正设置(Depth Correction)
  8. 一款可同时对接饿了么、美团、饿百零售的小票打印机
  9. oracle停监听服务,ORACLE监听服务启动后又停止了的解决
  10. 汇编语言——学习资料(更新........)