实现Android M的AutoBackup功能

时间:2016-02-15 15:37:24

标签: android backup android-backup-service

我正在寻求实施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剥离回来 - 没有任何变化。

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

我忽略了什么吗?有没有我正在做的假设,我没有质疑过?为什么它不起作用?!那里的信息很少,我真的希望其他人正在实施这个并在这里有一些指导!

2 个答案:

答案 0 :(得分:1)

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

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

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

重新启动后,它会弹出一条通知,抱怨没有为备份设置帐户:只需添加您的Google帐户,启用备份,希望您最终能够正常运行。

这并没有为我解决所有问题 - 我仍然遇到了识别gms传输的问题 - 但最初的问题已经解决。

答案 1 :(得分:0)

  

我忽略了什么吗?

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中的页面。)