我正在寻求实施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剥离回来 - 没有任何变化。
据我可以从文档中看出,这应该足以让它工作,但是当我卸载并重新安装应用程序时,我看到没有任何东西被保留。
我忽略了什么吗?有没有我正在做的假设,我没有质疑过?为什么它不起作用?!那里的信息很少,我真的希望其他人正在实施这个并在这里有一些指导!
答案 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中的页面。)