Android BackupManager未调用备份传输

Android BackupManager未调用备份传输,android,backup,sharedpreferences,android-backup-service,Android,Backup,Sharedpreferences,Android Backup Service,好的,所以我正在尝试在我的应用程序中实现数据备份,并且一直在关注。我已经使用SharedReferencesBackupHelper实现了我的BackupAgentPer。我没有收到任何错误,我确信在所有首选项更改之后调用dataChanged(),但是当我测试备份(`adb shell bmgr run)时,我在LogCat中得到了以下信息: 07-07 12:29:00.258: V/BackupManagerService(291): Scheduling immediate backup

好的,所以我正在尝试在我的应用程序中实现数据备份,并且一直在关注。我已经使用
SharedReferencesBackupHelper
实现了我的
BackupAgentPer
。我没有收到任何错误,我确信在所有首选项更改之后调用
dataChanged()
,但是当我测试备份(`adb shell bmgr run)时,我在LogCat中得到了以下信息:

07-07 12:29:00.258: V/BackupManagerService(291): Scheduling immediate backup pass
07-07 12:29:00.258: V/BackupManagerService(291): Running a backup pass
07-07 12:29:00.258: V/BackupManagerService(291): clearing pending backups
07-07 12:29:00.258: V/PerformBackupTask(291): Beginning backup of 1 targets
07-07 12:29:00.289: V/BackupServiceBinder(291): doBackup() invoked
07-07 12:29:00.289: D/PerformBackupTask(291): invokeAgentForBackup on @pm@
07-07 12:29:00.297: I/PerformBackupTask(291): no backup data written; not calling transport
为了便于参考,我在清单中添加了:

<application
        android:allowBackup="true"
        android:backupAgent="com.kcoppock.sudoku.SudokuBackupAgent"
最后,在我的主要活动中,我呼吁进行如下数据备份:

edit.putString(id + "_values", valueCache.toString());
edit.putString(id + "_hints", hintCache.toString());
edit.commit();
BackupManager backup = new BackupManager(this);
backup.dataChanged();
我尝试过调试,但似乎从未调用
SudokuBackupAgent
中的
onCreate()
。或者,至少调试器从未访问过它。似乎找不到任何更新的数据,我已仔细检查以确保有数据要备份。这里有我遗漏的东西吗

编辑:我应该补充一点,我正在一台设备(Galaxy Nexus)上进行测试,我甚至尝试使用导出的版本APK进行测试。

1)将Log.I()放入onCreate,查看是否调用了它

2) Logcat表示您的函数没有写入任何内容。检查您是否在应用程序的私人文件夹中共享了_prefs/SCORES文件(假设在根设备上使用了适当的文件管理器)。这是您试图备份的文件。 可能您的首选项文件不是此文件,在这种情况下,请修复字符串分数以反映实际的首选项文件


3) 我尝试在我的应用程序中调试BackupAgentHelper.onCreate,调用adb shell bmgt后可以调试它。。。因此,可以在调试器中执行此操作。

我今天在Android SDK 4.1中遇到了相同的问题。但是,使用2.3.3版本有助于:

07-15 13:59:56.459: V/LocalTransport(61): performBackup() pkg=com........
07-15 13:59:56.469: V/LocalTransport(61): Got change set key=filehelper:../databases/database.db size=8208 key64=ZmlsZWhlbHBlcjouLi8kYXRhYmFzZXMvZXhwZW5zZXIuZGI=
07-15 13:59:56.469: V/LocalTransport(61):   data size 8208
07-15 13:59:56.469: V/LocalTransport(61): finishBackup()

如果您不更改首选项数据,它将只备份一次,但不会随后进行备份

无论何时执行备份,它都将备份自上次备份操作以来更改的所有命名共享首选项

正如其他海报所说,确保在onCreate中有一个日志语句

您可以通过以下方式强制备份:

// bmgr wipe TRANSPORT PACKAGE
bmgr wipe com.google.android.backup/.BackupTransportService com.kcoppock.sudoku

bmgr run
默认设置为
com.google.android.backup/.BackupTransportService
,但最好使用
bmgr list transports
进行检查


使用本地传输,而不是默认的谷歌传输,你会更开心。检查此文件上的开发文档。

您确定要使用write adb命令吗?在指南中,您链接了其他命令。@cool1994从未有过任何运气,我停止了尝试。我也将停止备份工作。我花了5天没有停下来。我读了每一篇关于备份的文章和很多博客。让我不断尝试的是,在某一点上,他支持我的工作。但我也可能不得不放弃。此外,我可以说Android对开发者来说很糟糕。iOS是创建优秀应用程序的地方。不,这个问题没有解决方案。我放弃了,你也应该放弃。从2015年1月17日起,您无法使用backup manager备份文件。系统不一致,你一直这样做都失败了。有人能找到答案吗?谢谢,我回家后会尝试一下这些建议。分数文件看起来应该是正确的,因为我经常使用GetSharedReferences()访问它。这让我感到困惑。因此,根据#1,我已登录onCreate(),并已访问它#2,我已检查并评分。xml位于共享的\u prefs/文件夹中,包含值。您的意思是您将目标SDK更改为2.3.3?或者您恢复了SDK工具的旧版本?另外,我刚刚意识到您的是备份到本地传输,而不是Android云备份传输。我将执行AVD更改为2.3.3。目标仍然是API-16。我不确定Galaxy Nexus将如何处理备份传输。我猜你在电话里设置了“备份和重置”功能。但它是本地的还是云的,这不重要。毕竟,这是特定于设备的(正如Google在DataBackup文档中指出的),重要的是不管执行方法如何,都要完成备份/恢复,这意味着要配置备份代理,并将dataChanged()调用放在适当的位置(这对我来说是比较困难的部分)它可能是一个“果冻豆”bug——我的意思是说它不是一个真正的bug,因为我正在运行一个完全非官方的构建——因为这就是我正在运行的。我稍后会做一个备份,并刷新库存ICS,看看问题是否仍然存在。谢谢我们也一样,JB中似乎有一个bug。但在ICS和以前的版本中工作良好。
07-15 13:59:56.459: V/LocalTransport(61): performBackup() pkg=com........
07-15 13:59:56.469: V/LocalTransport(61): Got change set key=filehelper:../databases/database.db size=8208 key64=ZmlsZWhlbHBlcjouLi8kYXRhYmFzZXMvZXhwZW5zZXIuZGI=
07-15 13:59:56.469: V/LocalTransport(61):   data size 8208
07-15 13:59:56.469: V/LocalTransport(61): finishBackup()
// bmgr wipe TRANSPORT PACKAGE
bmgr wipe com.google.android.backup/.BackupTransportService com.kcoppock.sudoku

bmgr run