数据存储:数据备份:测试备份和还原
此页面显示如何手动触发自动备份,键/值备份和还原操作,以确保您的应用程序正确保存和恢复数据。
一、备份如何运行
该部分介绍了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运行运行备份管理器,然后尝试再次执行备份。
数据存储:数据备份:测试备份和还原相关推荐
- Android数据存储---数据备份(Data Backup)(三)
继承BackupAgentHelper类 如果要备份完整的文件(既可以是SharedPreferences文件也可以是内部存储文件),那么就应该使用BackupAgentHelper类来构建备份代理. ...
- VSAN报错:该主机的VSphere HA 检测信号数据存储数据为1,少于要求数目:2
VSPHERE HA存储掉线1个,系统自动报警,所有节点都会报警,知道如何处理了吗?
- python存储数据的操作(csv格式文件,Excel表格文件)!!!
python存储数据 存储数据的方式 两种存储数据方式的区别 csv格式文件 Excel格式文件 csv文件的写入 csv文件的读取 Excel基本概念 Excel文件的写入 Excel文件的读取 存 ...
- python爬虫实现股票数据存储_Python 爬虫 | 股票数据的获取
最近股市有了一股牛市的味道,我也来蹭波热度,这节我们将爬取股票数据,股票数据在网上很容易找到,这里以某方财富网为例 目标: 爬取股票数据并存储进数据库中(这里以MongoDB为例) 目标网站(base ...
- 1211笔记关于//modal//更改窗口的根控制器//数据存取//Plist属性列表//-“沙盒机制”//plis属性列表//偏好设置//归档普通对象//联系人数据存储//协议与回调函数...
笔记的完整版pdf文档下载地址:https://www.evernote.com/shard/s227/sh/aba2aa01-4d96-429d-9bbd-2f285c7c0c79/65772262 ...
- IOS的四种数据存储方式及优劣
IOS有四种经常使用数据存储方式: 第一种方法:用NSUserDefaults存储配置信息 NSUserDefaults被设计用来存储设备和应用的配置信息.它通过一个工厂方法返回默认的.也是最经常使用 ...
- 用户画像标签数据存储之Elasticsearch存储
目录 0. 相关文章链接 1. Elasticsearch简介 2. 应用场景 3. 工程化案例 4. 用户画像标签数据存储总结 注:此博文为根据 赵宏田 老师的 用户画像·方法论与工程化解决方案 一 ...
- Android的数据存储:SharedPrefrence存储,手机内部文件存储,手机外部文件存储
存储方式分类 Android支持的数据存储方式:SharedPrefrence存储手机内部文件存储手机外部文件存储Sqlite数据库存储远程服务器存储 SharedPrefrence存储 介绍 SP存 ...
- 爬虫后如何进行数据存储和进行数据分析
目录 数据存储 数据存入数据库 数据分析 预警 平均 对比 爬取一个链家的北京租房信息,当数据爬取出来之后我们可以将其传入数据库中进行后续操作,首先要进行一个数据库创造和表格的建立. import s ...
- Android studio 系统存储数据SharedPreferences
SharePreferences类是一个轻量级的存储类,特别适合用于保存软件配置参数.使用SharedPreferences保存数据,其背后是用xml文件存放数据. 保存路径:找到DeviceFile ...
最新文章
- SQL学习笔记:库和表的创建
- Excel 计算时间差
- 数字旅游解决方案_迪庆州首个数字旅游小镇5G基站在巴拉格宗开通
- C++的迭代器Interator
- java调用onnx模型_开源一年多的模型交换格式ONNX,已经一统框架江湖了?
- Kubernetes面试题
- Error in moviepy setup command: 'extras_require' must be a dictionary whose values are strings or li
- hadoop商品推荐_北京尚学堂学员学习经验分享:商品推荐
- 2.5维数字地图制作
- J2EE 高 级 软 件 工 程 师 面 试 题 集
- 阳光动力2号太阳能飞机的基本工作原理
- 自动检测技术学习心得体会_关于传感器与检测技术的学习体会
- libGDX游戏开发之NPC敌人事件(六)
- 网站怎么样对接微信公众号,看以下操作
- 使用钉钉自定义机器人发信息
- Cartopy 0.20 最新功能 —— Cartopy 装不上别慌,内附解决方案
- 银河麒麟Kydroid1.0新品正式发布--助力安可产业生态建设
- [推荐] 一个 Node.js 技术选型案例:使用 CARMEN 作为卡牌手游技术栈
- 朴素贝叶斯算法及其实战
- 错排公式 详细解答
热门文章
- [附源码]计算机毕业设计JAVA房屋租赁管理系统
- Xcode 9使用时那些坑
- 计算机毕业设计Java医用物品管理系统(源码+系统+mysql数据库+lw文档)
- sx1268 中文_微雪电子SX1268 Lora 433M频段简介
- java反射之dynamic invocation与原生类型
- 多用户商城系统解决方案
- MIKE 21 教程 2.3 水动力模块教学:求解方程与参数设置(Solution Technique),水深校正设置(Depth Correction)
- 一款可同时对接饿了么、美团、饿百零售的小票打印机
- oracle停监听服务,ORACLE监听服务启动后又停止了的解决
- 汇编语言——学习资料(更新........)