【问题标题】:Implementing Android M's AutoBackup Feature实现 Android M 的 AutoBackup 功能
【发布时间】:2016-05-26 14:17:23
【问题描述】:

我希望实现 Android M 中引入的新自动备份功能,详细信息请参见此处的文档:http://developer.android.com/training/backup/autosyncapi.html#testing

我正在轻松恢复播放器数据库和安装之间的共享首选项,此功能旨在为 Android M 启用。我目前没有实现 android 备份服务。

文档声称它基本上默认启用,不需要编写备份管理类等,至少对于 Android M 设备 - 但是,我无法让它工作。

abd shell bmgr enabled 返回Backup Manager currently enabled

adb shell bmgr run 什么也没说,但是当我运行 adb shell bmgr restore com.xyz.abc 时,我被告知:

Unable to restore package com.xyz.abc done

文档说adb shell setprop log.tag.BackupXmlParserLogging VERBOSE 将启用日志记录,但我在终端或 logcat 中几乎看不到任何效果,而且我想不出它会登录到其他地方!

根据文档,我的清单在应用程序标记中有 android:fullBackupContent="@xml/backupscheme",并且 backupscheme.xml 包含

<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    <include domain="database" path="database.db"/>
    <include domain="sharedpref" path="com.xyz.abc_preferences.xml"/>
    <exclude domain="external"/>
</full-backup-content>

数据库和共享首选项路径来自检查反编译的应用程序,我尝试将这个 xml 剥离为空 - 没有任何变化。

据我从文档中得知,这应该足以让它工作,但是当我卸载并重新安装应用程序时,我没有看到任何东西被保留。

我是否忽略了什么?有没有我没有质疑过的假设?为什么它不能正常工作?!那里的信息太少了,我真的希望其他人正在实施这一点并在这里提供一些指导!

【问题讨论】:

    标签: android backup android-backup-service


    【解决方案1】:

    首先,我忽略了 logcat 过滤器!只需禁用过滤器,我就可以看到错误消息。

    第一个问题是Rejecting full data backup. user has not seen up to date legal text - 这显然是因为旧的、现有的谷歌帐户没有选择加入备份服务。这有点可怕,因为没有简单的方法可以选择;我不知道究竟用户将如何访问这个。

    要解决此问题,请从设备中删除所有 Google 帐户,然后将其关闭并重新打开(如果您不重新启动,它将不允许任何添加的帐户充当备份帐户!)。

    一旦重新启动,它应该会弹出一条通知,抱怨没有为备份设置帐户:只需重新添加您的 google 帐户,启用备份,希望您最终可以使用它。

    这并没有为我解决所有问题 - 我仍然无法让它识别 gms 传输 - 但最初的问题已经解决。

    【讨论】:

      【解决方案2】:

      我是否忽略了什么?

      a manual backup for testing 的配方是:

      adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
      adb shell bmgr run
      adb shell bmgr fullbackup ...
      

      其中... 是要备份的应用程序的应用程序ID。我没看到你跑到哪里去了adb shell bmgr fullbackup

      请注意,设备必须在“设置”中启用备份。

      您的 LogCat 应包含如下行:

      14936-14936/? D/AndroidRuntime: Calling main entry com.android.commands.bmgr.Bmgr
      800-2345/? D/BackupManagerService: fullTransportBackup()
      800-14960/? I/PFTBT: Initiating full-data transport backup of ...
      800-14961/? D/BackupManagerService: Binding to full backup agent : ...
      800-14961/? D/BackupManagerService: awaiting agent for ApplicationInfo{...}
      800-810/? D/BackupManagerService: agentConnected pkg=com.commonsware...
      800-14961/? I/BackupManagerService: got agent android.app.IBackupAgent$Stub$Proxy@e17804c
      800-14961/? I/BackupRestoreController: Getting widget state for user: 0
      800-14962/? I/file_backup_helper:    Name: apps/com.commonsware.android...
      800-14962/? D/BackupManagerService: Calling doFullBackup() on com.commonsware...
      9380-9391/com.commonsware.android.backup I/file_backup_helper:    Name: ...
      800-14960/? I/PFTBT: Transport suggested backoff=0
      800-14960/? I/PFTBT: Full backup completed.
      9380-9380/? I/Process: Sending signal. PID: 9380 SIG: 9
      800-2345/? D/BackupManagerService: Done with full transport backup.
      

      (抱歉,这些行被截断以确保它们适合my book 中的页面)。

      【讨论】:

      • 感谢您的回复。我曾经打过电话,然后在尝试其他所有方法时感到沮丧而忘记了它。不幸的是,调用您在那里编写的命令并没有什么区别,然后是adb shell bmgr restore ... - 只是得到相同的“无法恢复包......”消息而没有详细说明。 setprop 命令似乎对我没有任何作用——你看到了什么日志?
      • @Jez:查看更新的答案。你也可以去掉&lt;exclude&gt;,因为你所拥有的应该是多余的,如果系统不喜欢XML,它似乎会悄悄地失败。鉴于您有 1+ 个&lt;include&gt; 元素,唯一需要备份的是您通过&lt;include&gt; 指定的内容,没有其他内容,这就是这里不需要&lt;exclude&gt; 的原因。
      • 感谢 logcat 的内容 - 我的错误是将其过滤到应用程序日志记录中,这让我走上了正确的道路!问题显然是“用户没有看到最新的法律文本” - 实际查看所述文本听起来很痛苦,但至少我知道出了什么问题。感谢您的帮助!
      • @Jez:是的,我认为通过恢复出厂设置为我解决了问题,但希望有一种侵入性较小的方法。
      • 是的 - 从其他地方我偶然发现了删除谷歌帐户的说明,重新启动设备,然后重新添加帐户,确保允许在您想要的帐户上进行备份采用。比恢复出厂设置更温和,但我不知道如果每个 android m 用户都必须这样做才能启用它,这个功能将如何被采用!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2023-04-10
      • 1970-01-01
      相关资源
      最近更新 更多