问题标签 [backup-agent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
837 浏览

android - 如何通过云端备份 Android 上的 App 数据?

背景

我希望为我正在开发的应用程序存储和恢复一些设置和其他值。

问题

事实证明,Android 已经有了一个不错的功能,叫做“ BackupAgent ”。

但是,似乎并非所有设备都支持它:

数据备份不保证在所有 Android 设备上都可用

这不是 API 问题(尽管仅从 2.2 开始支持),而是制造商/运营商问题:

备份传输是 Android 备份框架的客户端组件,可由设备制造商和服务提供商定制。备份传输可能因设备而异,并且任何给定设备上可用的备份传输对您的应用程序是透明的。备份管理器 API 将您的应用程序与给定设备上可用的实际备份传输隔离 - 您的应用程序通过一组固定的 API 与备份管理器通信,而不管底层传输如何。

问题

是否有另一种免费的替代方法可以将 Android 上的数据存储和恢复到云中?

0 投票
1 回答
81 浏览

java - BackupAgentHelper 导致数据丢失

我目前已实施 BackupAgentHelper 来备份 SharedPreferences。但是,有时当我发布更新时,我会收到来自用户的消息,说更新导致其 SharedPreferences 中的数据被完全擦除。经过调查,可能导致它的唯一原因是 BackupAgentHelper,尽管实现相当标准,所以我不完全确定为什么会这样。

由于它在更新后立即发生(这也不是 1 个特定更新,每次更新后似乎都会发生在极少数用户身上),我只能假设它与 SharedPreferences 何时恢复有关。如果用户安装了应用程序,生成了大量数据,然后很快就收到了更新,我猜可能在 BackupAgent 有机会进行备份之前就已经下载了更新。

任何建议都是最有帮助的——我不希望任何用户丢失他们的所有数据。

0 投票
1 回答
711 浏览

android - BackupAgentHelper 因大量文件而崩溃

我有一个应用程序,其中包含需要备份的用户生成的大量文件。所有内容都存储在 db、preferences 或 4 个文件夹中的 1 个中。我编写了一个简单的辅助函数来FileBackupHelpers为每个文件夹中的文件生成所有文件。但是,似乎在我onCreate()运行框架代码之后FileBackupHelper,要解析的路径数量令人窒息,并使我的应用程序崩溃。

这是我的备份代理的代码:

这是日志输出:

提前感谢您提供的任何帮助!如果您需要任何其他信息,请告诉我。

0 投票
1 回答
875 浏览

android - 重新安装应用程序时未调用 BackupAgent.onRestore 但为 bmgr restore 命令调用

我正在测试我的自定义 BackupAgent。以下是我在 Simulator & Eclipse ADT 中的测试

使用命令测试 1 备份和恢复 ---- 工作得很好

  1. adb shell bmgr 已启用
  2. adb shell bmgr 备份 app_package
  3. adb shell bmgr run ---------------------- 运行备份(BackupAgent.onBackup 调用)
  4. 在应用程序上,我删除了一些数据
  5. adb shell bmgr restore app_package ------- 从备份中恢复数据
  6. 一切都恢复了,包括我在第 4 步删除的一些数据 ------ 工作得很好

测试 2 备份/卸载应用程序/重新安装应用程序----不工作

  1. adb shell bmgr 已启用
  2. adb shell bmgr 备份 app_package
  3. adb shell bmgr run ----------运行备份(BackupAgent.onBackup 调用)
  4. adb uninstall app_package --------------- 备份后卸载应用
  5. Debug As / Android Application again ---- Application re-installed BUT NO data is restore (data backup at step 3)

更新

  • 我发现测试 2 在 Nexus 5 Simulator (API 19 - 4.4.2) 上工作
  • 但是测试 2 不适用于 Nexus 4 模拟器 (API 16-4.1.2)

有人有什么想法吗?谢谢!

0 投票
1 回答
1438 浏览

android - 我的 BackupAgentHelper 实施有什么问题?

我正在尝试向我的应用程序添加备份支持,并按照数据备份指南中的说明设置了 BackupAgentHelper 的子类。我已经将我的代码与其他几个教程和 SO 帖子进行了比较,在这里没有发现任何问题:

new BackupManager(this.app).dataChanged()每当我保存数据时,我都会跑步。

在登录到 Google Play 帐户并在设备设置中启用备份和恢复选项的设备上,我运行./adb -d shell bmgr run并在 logcat 中得到以下结果:

关于处理我设置的助手的部分,以及“备份通过完成”似乎表明备份正在工作。然后,我卸载该应用程序并重新安装它./adb -d install并获得以下结果:

关于“恢复版本兼容”和“恢复完成”的部分看起来很有希望,但没有恢复数据。我看到错误“SKIP_PADDING FAILED”,但我不知道这是否与我正在做的事情有关,或者如果是的话如何解决。

我还使用本地传输在模拟器上进行了尝试。运行备份管理器会得到以下结果:

重新安装会得到以下结果:

在这种情况下,备份过程会显示备份数据的大小,这更有希望,但随后还原过程会因 EOFException 而崩溃,我不知道如何解决。同样,什么都没有恢复。

最终我只需要它在真实设备上工作,但我会发布模拟器的结果,以防它提供任何线索。

谁能帮我解释这些日志以找出问题所在?

我也很欣赏一个简短的评论,说明您是否已经让这个系统工作,因为几个 SO 线程没有得到答复,或者得出的结论是系统无法工作。

更新

在进一步研究这些日志后,从设备或模拟器备份时似乎没有相关错误,但在恢复每个日志时在关键点抛出了不同的错误——设备上的 SKIP_PADDING FAILED 和设备上的 EOFException模拟器。在这两个未回答的问题中提到了 SKIP_PADDING FAILED:

备份数据:第 X 行的 SKIP_PADDING 失败

安卓数据备份服务

我尝试阅读 SKIP_PADDING FAILED 的源代码,但无法理解它在做什么。接下来,我将此代码添加到我的 onRestore 方法中,以查看 BackupDataInput 对象是否包含我的数据:

确实如此!所以现在我可以看到我的数据正在备份,但是BackupAgent.performRestore(由 BackupAgentHelper.onRestore 调用)中的某些内容正在中断。我想我可以通过自己在 onRestore 方法中保存数据文件来解决这个问题。有没有人有更好的解决方案?

0 投票
0 回答
35 浏览

java - 为什么备份管理器没有完成我的备份?

报告的输出是:

问题是什么?

0 投票
0 回答
168 浏览

android - 离线应用程序的 SharedPreferencesBackupHelper

我正在尝试为我的仅离线工作的应用程序保留 sharedPreference 的备份。我计划使用Android 的SharedPreferencesBackupHelperBackupAgentHelper API,但似乎这些 api 使应用程序只能在云上备份共享首选项,而不是在本地备份到设备。

我想知道这些api是否也在本地备份。如果不是,那么有没有其他方法可以在设备上本地保存我的 sharedPreference 文件的备份,以便当用户卸载应用程序时,sharedPreference 文件保持不变。

0 投票
1 回答
1561 浏览

android - android:allowBackup=false 但仍需要 BackupAgent

我忙着为 Android 4.4.2 版设计一个应用程序(Android Studio 1.3.1),并希望该应用程序在启动后立即启动。我的问题是它没有,在调试时我发现它抱怨缺少 BackupAgent。我已在清单中将 android:allowBackup 设置为 false,但这似乎无助于消除有关缺少 BackupAgent 的异常。

我是否误解了 android:allowBackup 的目的?

我不需要任何备份。

0 投票
2 回答
1314 浏览

android - 安卓数据备份

我正在尝试使用 data backup api在我的应用程序中实现数据备份。

辅助类中的onBackup方法永远不会被调用。BackupAgent该文件说,onBackup()将在未来的某个时间调用。有没有具体的时间onBackup会被调用?每天只调用一次吗?

我尝试使用以下命令强制在模拟器和 Nexus 7 设备上进行数据备份:

在模拟器上调用了该onBackup()实现,但在设备上从未调用过它。bmgr工具可以在设备上运行吗?请帮我理解。

0 投票
0 回答
65 浏览

android-sqlite - Android 备份 API:如何执行数据库备份/恢复线程安全?

我想执行 SQLite 数据库备份/恢复。我认为最简单的方法是使用 BackUp API。但是,文档说:

但是,读取和写入内部存储上的文件不是线程安全的。为确保您的备份代理不会在您的活动的同时读取或写入您的文件,您必须在每次执行读取或写入时使用同步语句。例如,在您读取和写入文件的任何 Activity 中,您需要一个对象用作同步语句的内在锁:

如何执行数据库备份/恢复线程安全?