首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Android新的自动备份功能的几个问题

关于Android新的自动备份功能的几个问题
EN

Stack Overflow用户
提问于 2015-06-26 11:21:04
回答 2查看 3.5K关注 0票数 3

背景

谷歌在Android上引入了一个不错的新功能,它允许你备份和恢复应用程序,甚至可以使用亚行,如这段视频所示。

似乎您所要做的就是使用adb shell bmgr命令备份和还原应用程序,如下所示:

后援:

代码语言:javascript
复制
adb shell bmgr fullbackup PACKAGE_NAME

还原应用程序:

代码语言:javascript
复制
adb shell bmgr restore PACKAGE_NAME

而且效果很好。

问题所在

文档已经进入了新的阶段,所以我无法找到关于这个新工具的一些问题的答案。

我试过的

在输入adb shell bmgr时,我得到了一些关于如何使用它的线索,但是我找不到问题的答案。我想,如果没有Android M的设备,而是一个仿真器,它的工作方式就会有所不同。

输入此命令时所编写的内容如下:

使用: bmgr备份\ bmgr启用bmgr备份包bmgr启用bmgr列表传输bmgr列表设置bmgr传输,其中bmgr还原令牌bmgr还原令牌包.bmgr还原包bmgr运行bmgr擦除传输包bmgr完全备份包。 “备份”命令为指定的包安排备份通行证。请注意,如果包实际上没有更改要存储的数据,则备份传递实际上是不操作的。 “启用”命令启用或禁用整个备份机制。如果参数为“true”,它将被启用,否则它将被禁用。禁用时,将不执行备份或还原操作。 “启用”命令报告备份机制的当前启用/禁用状态。 “列表传输”命令报告设备上当前可用的备份传输的名称。这些名称可以作为“传输”和“擦除”命令的参数传递。当前活动的传输以“*”字符表示。 “列表集”命令通过当前活动的传输报告设备可用的每个恢复集的令牌和名称。 “传输”命令将命名的传输指定为当前活动的传输。此设置在重新启动期间是持久的。 当只给一个恢复令牌时,“restore”命令从当前活动的传输中启动一个完整的系统恢复操作。它将将令牌参数指定的还原集传递给每个向该还原集提供数据的应用程序。 当给定一个令牌和一个或多个包名时,“restore”命令会从令牌参数指定的还原集中启动对给定包的还原操作。它实际上与只提供令牌的“还原”操作相同,但将筛选器应用于要还原的应用程序集。 当只给定包名时,“restore”命令将根据RestoreSession.restorePackage()方法使用的恢复集选择算法对该包进行还原。 “run”命令将立即启动任何预定的备份操作,而不需要通常的等待时间来批处理数据更改。 “擦除”命令导致从给定传输的存储中删除给定包的所有备份数据。给定应用程序执行的下一个备份操作将重写其整个数据集。这里使用的传输名称是由“列表传输”报告的。 “完全备份”命令会为一个或多个包诱导全数据流备份。数据通过当前活动的传输发送。

问题

我有几个问题:

  1. 假设我通过设备本身调用这些命令,它们能工作吗?如果没有,他们会在一个有根的设备上工作吗?或者至少备份和恢复当前的应用程序(应用程序X备份和恢复自身)?
  2. 备份存储在哪里?是否可以将它们存储到自定义路径中?甚至是个人电脑里的那个?
  3. 是否有可能将同一应用程序备份到多个状态?例如,应用程序可以在登录时进行备份,在配置了一些设置时可以进行备份。这样,您就可以将这些备份还原到每个备份。
  4. 他们在上面写了关于“当前活动的传输”的描述。到底是什么?可以定制吗?
  5. 是否有可能在所有应用程序上运行备份/还原?还是我应该把所有应用程序的包都放进去?
  6. 看来“完全备份”马上就做备份了。"run“属性用于什么?或者这只是因为我用了模拟器?
EN

回答 2

Stack Overflow用户

发布于 2015-06-26 15:13:06

如果您还没有看到它们,下面是与自动备份相关的新特性的参考文件。备份功能存在于以前的版本中,并在此指南中进行了描述。我在KitKat上和他们合作过。快速扫描后,M预览中的新功能似乎如下:

  1. 自动每日备份
  2. 配置和控制备份中包含的内容的更多选项。

您的大部分问题都集中在adb shell bmgr工具上。用于开发人员测试。在正常设备使用中,当设备空闲、充电并连接到Wi网络时,备份每24小时自动完成一次。

假设我通过设备本身调用这些命令,它们能工作吗?

在自动完成备份的情况下,真的需要这样做吗?

备份存储在哪里?是否可以将它们存储到自定义路径中?甚至是个人电脑里的那个?

存储到用户的Google帐户。不是的。不是的。

他们在上面写了关于“当前活动的传输”的描述。到底是什么?可以定制吗?

由谷歌提供。别这么想。

是否有可能在所有应用程序上运行备份/还原?还是我应该把所有应用程序的包都放进去?

默认情况下,所有的应用程序都是备份的。参考文档描述了如何限制包含的内容。

看来“完全备份”马上就做备份了。"run“属性用于什么?或者这只是因为我用了模拟器?

除了新的自动备份功能外,应用程序还可以执行增量备份,如上述指南所述。run命令用于测试,允许开发人员强制立即激活增量备份处理。

票数 4
EN

Stack Overflow用户

发布于 2015-07-18 22:13:27

你好,android开发者。我们似乎有很多共同的兴趣爱好(我在GcmNetworkManager上回答了你的问题)。

  1. 假设我通过设备本身调用这些命令,它们能工作吗?如果没有,他们会在一个有根的设备上工作吗?或者至少备份和恢复当前的应用程序(app备份和恢复自身) ?* 不幸的是,我不知道你到底是什么意思。我想你是在问,与仿真器相比,它们是否能在真正的设备上工作,答案是肯定的。在仿真器上,几乎没有什么东西可以工作,但在真正的设备上却不起作用--通常是相反的。
  2. 备份存储在哪里?是否可以将它们存储到自定义路径中?甚至可能是个人电脑?* 备份有两种类型--旧的密钥/值备份是由应用程序本身通过实现BackupAgent来驱动的,而截至Android有“完整的应用程序数据备份”,这是框架为您提供BackupAgent实现的地方。 在这两种情况下,备份数据都存储在Google的服务器上。除了编写您自己的备份传输(这是只有原始设备制造商可以做的事情,或者是构建自己的自定义ROMS的人可以做的事情),就无法将它们存储在定制路径中。
  3. 是否有可能将同一应用程序备份到多个状态?例如,应用程序可以在登录时进行备份,在配置了一些设置时可以进行备份。这样,您就可以恢复到每个备份。 不是的。每个设备每个应用程序都有一个“备份集”。如果你做一个工厂重置,那么它被认为是一个新的设备,并将有一个不同的备份集。
  4. 他们在上面写了关于“当前活动的传输”的描述。到底是什么?可以定制吗?* BackupTransport是一个特权应用程序(即/system),负责确定备份数据的存储位置。BackupManager是操作系统的一部分,在运行备份时进行管理,并从应用程序获取数据并将其传递给传输,然后由传输决定如何处理它。操作系统不能对这个b/c负责--它不知道数据应该到哪里去,所以它将委托给供应商提供的传输。传输是一个非常特权的应用程序,必须随系统映像一起提供。目前只有两个传输-本地“调试”传输和谷歌提供的传输。
  5. 是否有可能在所有应用程序上运行备份/还原?或者我应该把所有应用程序的包都放进去?* 我想你的意思是做亚行的shell bmgr。不,没有办法这样做。但是,在BackupManager中有一些隐藏的API,您可以调用这些API来启动完全恢复(例如,安装向导会这样做)。因为API是隐藏的,所以您必须下载源代码并对其进行编译(或者使用反射)。此外,您还需要权限android.permission.BACKUP,它被注释为@SystemApi。我自己从来没有这样做过,所以我知道这在理论上是可能的,但很可能是一个巨大的头痛,因为它是完全没有文件的(它是为原始设备制造商和其他供应商提供自己的设备)。
  6. 看来“完全备份”马上就做备份了。"run“属性用于什么?或者这只是因为我使用了模拟器?* 在android之前,只有键/值备份。 shell bmgr备份 都用于键/值备份流。只有当应用程序在实现自己的BackupAgent (上面链接)时遇到麻烦时,才能使用密钥/值备份。例如,许多系统组件都是这样做的(例如,这就是跨设备恢复WiFi a的方式)。一些系统应用程序也会这样做(Gmail,Google启动器,.)事实上,如果你跑 亚洲开发银行空壳备份 您将看到使用键/值备份的所有包的列表。您必须调用'bmgr备份p1 p2等‘,然后'bmgr运行’的原因是b/c 'bmgr备份‘命令将在’未来‘阶段备份包。当您调用'bmgr‘运行这个手动启动备份通行证。正如上面的文章所述,它是用于调试的。 如果你跑 亚洲开发银行空壳备份 在M设备上,您还应该看到使用完整的应用程序数据备份流备份的应用程序列表,以及使用k/v备份的应用程序列表,这些应用程序在将来的备份中是“分阶段的”(根据运行时间的不同,可能是空的)。 现在, 亚行外壳bmgr完全备份 用于完整备份流。然而,有一个陷阱。这两个元数据(键/值备份和完全备份)完全独立,但BackupManager使用键/值机制跟踪完整备份包的元数据(此元数据包括app版本、签名、时间戳等)。这就是为什么你需要跑 亚行shell bmgr运行 要确保完整的应用程序数据元数据在成功使用完整备份流之前正确备份,请执行以下操作。 不要认为仿真器与实际设备有任何不同。从理论上讲,它应该准确地“模仿”真正的设备。仿真器和物理设备之间应该没有区别,因此(AFAIK)没有在仿真程序上工作的“特殊”命令,这些命令不能在真正的设备上工作。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31071926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档