有关Android M的新自动备份功能的问题

时间:2015-06-26 11:21:04

标签: android shell backup adb android-6.0-marshmallow

背景

Google在Android M上推出了一项不错的新功能,允许您备份和恢复应用,甚至使用ADB,如this video所示。

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

备份:

adb shell bmgr fullbackup PACKAGE_NAME

恢复应用:

adb shell bmgr restore PACKAGE_NAME

效果很好。

问题

文档已处于新阶段,因此无法找到有关此新工具的一些问题的答案。

我尝试了什么

在输入adb shell bmgr时,我会得到一些关于如何使用它的线索,但我无法找到问题的答案。没有Android M的设备,而是一个模拟器,我猜它会有不同的工作方式。

这是输入此命令时所写的内容:

  

用法:bmgr [备份|恢复|列表|传输|运行]          bmgr备份包          bmgr启用BOOL          bmgr已启用          bmgr列表传输          bmgr列表集          bmgr运输          bmgr恢复TOKEN          bmgr恢复TOKEN PACKAGE ...          bmgr恢复PACKAGE          bmgr跑          bmgr擦拭运输包装          bmgr fullbackup PACKAGE ...

     

'备份'命令为命名包安排备份传递。   请注意,如果包,备份传递实际上将是无操作   实际上并没有更改要存储的数据。

     

'启用' command启用或禁用整个备份机制。   如果论证是真的'它将被启用,否则它将被启用   禁用。禁用时,备份或还原操作都不会   进行。

     

启用'命令报告当前的启用/禁用状态   备份机制。

     

'列表传输'命令报告备份的名称   设备上当前可用的传输。这些名字可以   作为参数传递给'运输'并且'擦拭'命令。该   目前有效的运输用' *'表示。字符。

     

'列表设置'命令报告每个还原集的标记和名称   通过当前活动的传输可用于设备。

     

'运输'命令将指定的传输指定为   目前活跃的一个。此设置在重新启动后保持不变。

     

'恢复'命令只给出一个恢复令牌启动一个   来自当前活动传输的完整系统还原操作。它   将TOKEN参数指定的恢复集传递给每个   已为该恢复集提供数据的应用程序。

     

'恢复'给定令牌和一个或多个包名称时的命令   从那里启动那些给定包的恢复操作   由TOKEN参数指定的恢复集。它实际上是   与“恢复”相同仅提供令牌的操作,但应用了   过滤到要恢复的应用程序集。

     

'恢复'只给出一个包名称的命令启动a   根据还原集还原该一个包   RestoreSession.restorePackage()使用的选择算法   方法

     

'''命令导致任何计划的备份操作   立即启动,没有通常的等待批准期   一起数据变化。

     

'擦拭'命令导致给定包的所有备份数据   从给定的传输存储中删除。下一次备份   给定应用程序执行的操作将重写其整个操作   数据集。此处使用的传输名称是由' list报告的名称   输送'

     

' fullbackup'命令为一个或多个引发完整数据流备份   更多套餐。数据通过当前活动的传输发送。

问题

我有几个问题:

  1. 假设我通过设备本身调用这些命令,它们会起作用吗?如果没有,他们会在root设备上工作吗?或者至少备份和恢复当前的应用程序(应用程序X备份和恢复自身)?

  2. 备份存储在哪里?是否可以将它们存储到自定义路径中?也许甚至是PC之一?

  3. 是否可以将同一个应用备份到多个状态?例如,应用程序可以在其登录时具有备份,并在其配置了某些设置时进行备份。这样,您就可以恢复到每个备份。

  4. 他们在上面的描述中写了关于"目前活跃的运输" 。究竟是什么 ?可以自定义吗?

  5. 是否可以在所有应用上运行备份/恢复?或者我应该把所有应用程序的包裹?

  6. 似乎" fullbackup"立即备份。什么"运行"属性用于?或者可能是因为我使用了模拟器?

2 个答案:

答案 0 :(得分:2)

如果您还没有看到它们,则以下是与自动备份相关的新功能的reference documents。备份功能存在于先前版本中,并在此guide中进行了描述。我和他们一起在KitKat上工作过。快速扫描后,M预览中的新功能似乎是:

  1. 自动每日备份
  2. 配置和控制备份中包含的内容的更多选项。
  3. 您的大部分问题都集中在adb shell bmgr工具上。它用于开发人员测试。在正常的设备使用中,当设备空闲,充电并连接到Wi-Fi网络时,备份每24小时自动完成。

      

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

    备份是自动完成的,是否真的有需要?

      

    备份存储在哪里?是否可以存储它们   一个定制的路径?甚至可能是PC之一?

    存储在用户的Google云端硬盘帐户中。没有。

      

    他们在上面的描述中写了关于"当前活跃的运输"   。究竟是什么 ?它可以定制吗?

    由Google提供。不要这么认为。

      

    是否可以在所有应用上运行备份/恢复?或者我应该放   所有应用程序的包裹?

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

      

    似乎" fullbackup"立即备份。什么是   "运行"属性用于?或许那都是因为我使用了   模拟器?

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

答案 1 :(得分:1)

你好Android开发者。看起来我们有很多共同的兴趣(我在GcmNetworkManager上回答了你的问题)。

  1. 假设我通过设备本身调用这些命令,它们会起作用吗?如果没有,他们会在root设备上工作吗?或者至少备份和恢复当前的应用程序(应用程序X备份和恢复自身)?*

    不幸的是,我不确定你的意思。我想你问的是,与模拟器相比,它们是否可以在真实设备上工作,答案是肯定的。某些东西在仿真器上运行的可能性很小,但在真实设备上却无法正常工作 - 通常是相反的。

  2. 备份存储在哪里?是否可以将它们存储到自定义路径中?甚至可能是PC之一?*

    有两种类型的备份 - 较旧的密钥/值备份,由应用程序本身通过实施BackupAgent来驱动,而从Android M开始,有完整的应用程序数据备份"这是框架为您提供BackupAgent实现的地方。

    在这两种情况下,备份数据都存储在Google的服务器上。没有办法将它们存储在自定义路径中,除了编写自己的备份传输(这是OEM只能做的事情,或者是构建自己的自定义ROMS的人)。

  3. 是否可以将同一个应用备份到多个状态?例如,应用程序可以在其登录时具有备份,并在其配置了某些设置时进行备份。这样,您可以还原到每个备份。*

    没有。有一个备份集'每个设备的每个应用。如果您进行了恢复出厂设置,那么它将被视为新设备并具有不同的备份集。

  4. 他们在上面的描述中写了关于"目前活跃的运输" 。究竟是什么 ?可以定制吗?*

    BackupTransport是特权(即/系统)应用程序,负责确定备份数据的存储位置。 BackupManager是操作系统的一部分,可以在运行备份时进行管理,并从应用程序获取数据并将其传递给传输,然后传输将确定如何处理。操作系统无法对此b / c负责,因为它不知道数据应该去哪里,因此它会委托供应商提供的传输。 Transport是一个非常特权的应用程序,必须随系统映像一起提供。目前只有2种传输方式 - 本地'调试'运输和谷歌提供的运输。

  5. 是否可以在所有应用上运行备份/恢复?或者我应该把所有应用程序的包裹?*

    我认为你的意思是做adb shell bmgr。不,没有办法做到这一点。但是,BackupManager中有隐藏的API,您可以调用它们以启动完全还原(例如,安装向导会执行此操作)。由于API是隐藏的,因此您必须下载源代码并对其进行编译(或使用反射)。您还需要注释@SystemApi的权限android.permission.BACKUP。我自己从未这样做过,所以我知道这在理论上是可行的,但可能是一个非常令人头疼的问题,因为它完全没有记录(它适用于OEM和其他供应自己设备的供应商)。

  6. 似乎" fullbackup"立即备份。什么"运行"属性用于?或者可能是因为我使用了模拟器?*

    在android-M之前,只有键/值备份。

    adb shell bmgr backup <PACKAGE..>
    adb shell bmgr run
    

    两者都用于键/值备份流程。如果应用程序遇到了实现自己的BackupAgent(上面链接)的麻烦,它只能使用键/值备份。例如,许多系统组件执行此操作(例如,这是您的WiFi AP在设备之间恢复的方式)。一些系统应用也会这样做(Gmail,谷歌启动器......),实际上如果你运行

    adb shell dumpsys backup
    

    您将看到使用键/值备份的所有包的列表。你必须打电话给&#39; bmgr备份p1 p2等&#39;然后&#39; bmgr run&#39;是b / c&#39; bmgr备份&#39;命令将暂存将来要备份的软件包。&#39;当你打电话给&#39; bmgr run&#39;这会手动启动备用通行证。正如上面的帖子所说,它用于调试。

    如果你跑

    adb shell dumpsys backup
    

    在M设备上,您还应该看到使用完整的应用数据备份流程备份的应用列表,以及使用k / v备份的应用列表&#39; staged&#39 ;将来备份(这可能是空的,具体取决于您何时运行它。)

    现在,

    adb shell bmgr fullbackup <PACKAGE..>
    

    用于完整备份流程。然而,有一个问题。这两个(键/值备份和完全备份)完全独立,之外,BackupManager使用键/值机制跟踪完整备份包的元数据(此元数据包括app版本等内容) ,签名,时间戳等)。这就是你需要运行

    的原因
    adb shell bmgr run
    

    确保在成功使用完整备份流之前正确备份完整的应用数据元数据。

    不要将模拟器视为与实际设备有任何不同。理论上,它应该完全模仿&#39;真正的设备。模拟器和物理设备之间应该没有区别,因此(AFAIK)没有特殊的&#39;在无法在真实设备上工作的模拟器上运行的命令。