问题标签 [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.
android - 如何通过云端备份 Android 上的 App 数据?
背景
我希望为我正在开发的应用程序存储和恢复一些设置和其他值。
问题
事实证明,Android 已经有了一个不错的功能,叫做“ BackupAgent ”。
但是,似乎并非所有设备都支持它:
数据备份不保证在所有 Android 设备上都可用
这不是 API 问题(尽管仅从 2.2 开始支持),而是制造商/运营商问题:
备份传输是 Android 备份框架的客户端组件,可由设备制造商和服务提供商定制。备份传输可能因设备而异,并且任何给定设备上可用的备份传输对您的应用程序是透明的。备份管理器 API 将您的应用程序与给定设备上可用的实际备份传输隔离 - 您的应用程序通过一组固定的 API 与备份管理器通信,而不管底层传输如何。
问题
是否有另一种免费的替代方法可以将 Android 上的数据存储和恢复到云中?
java - BackupAgentHelper 导致数据丢失
我目前已实施 BackupAgentHelper 来备份 SharedPreferences。但是,有时当我发布更新时,我会收到来自用户的消息,说更新导致其 SharedPreferences 中的数据被完全擦除。经过调查,可能导致它的唯一原因是 BackupAgentHelper,尽管实现相当标准,所以我不完全确定为什么会这样。
由于它在更新后立即发生(这也不是 1 个特定更新,每次更新后似乎都会发生在极少数用户身上),我只能假设它与 SharedPreferences 何时恢复有关。如果用户安装了应用程序,生成了大量数据,然后很快就收到了更新,我猜可能在 BackupAgent 有机会进行备份之前就已经下载了更新。
任何建议都是最有帮助的——我不希望任何用户丢失他们的所有数据。
android - BackupAgentHelper 因大量文件而崩溃
我有一个应用程序,其中包含需要备份的用户生成的大量文件。所有内容都存储在 db、preferences 或 4 个文件夹中的 1 个中。我编写了一个简单的辅助函数来FileBackupHelpers
为每个文件夹中的文件生成所有文件。但是,似乎在我onCreate()
运行框架代码之后FileBackupHelper
,要解析的路径数量令人窒息,并使我的应用程序崩溃。
这是我的备份代理的代码:
这是日志输出:
提前感谢您提供的任何帮助!如果您需要任何其他信息,请告诉我。
android - 重新安装应用程序时未调用 BackupAgent.onRestore 但为 bmgr restore 命令调用
我正在测试我的自定义 BackupAgent。以下是我在 Simulator & Eclipse ADT 中的测试
使用命令测试 1 备份和恢复 ---- 工作得很好
- adb shell bmgr 已启用
- adb shell bmgr 备份 app_package
- adb shell bmgr run ---------------------- 运行备份(BackupAgent.onBackup 调用)
- 在应用程序上,我删除了一些数据
- adb shell bmgr restore app_package ------- 从备份中恢复数据
- 一切都恢复了,包括我在第 4 步删除的一些数据 ------ 工作得很好
测试 2 备份/卸载应用程序/重新安装应用程序----不工作
- adb shell bmgr 已启用
- adb shell bmgr 备份 app_package
- adb shell bmgr run ----------运行备份(BackupAgent.onBackup 调用)
- adb uninstall app_package --------------- 备份后卸载应用
- 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)
有人有什么想法吗?谢谢!
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:
我尝试阅读 SKIP_PADDING FAILED 的源代码,但无法理解它在做什么。接下来,我将此代码添加到我的 onRestore 方法中,以查看 BackupDataInput 对象是否包含我的数据:
确实如此!所以现在我可以看到我的数据正在备份,但是BackupAgent.performRestore(由 BackupAgentHelper.onRestore 调用)中的某些内容正在中断。我想我可以通过自己在 onRestore 方法中保存数据文件来解决这个问题。有没有人有更好的解决方案?
java - 为什么备份管理器没有完成我的备份?
报告的输出是:
问题是什么?
android - 离线应用程序的 SharedPreferencesBackupHelper
我正在尝试为我的仅离线工作的应用程序保留 sharedPreference 的备份。我计划使用Android 的SharedPreferencesBackupHelper和BackupAgentHelper API,但似乎这些 api 使应用程序只能在云上备份共享首选项,而不是在本地备份到设备。
我想知道这些api是否也在本地备份。如果不是,那么有没有其他方法可以在设备上本地保存我的 sharedPreference 文件的备份,以便当用户卸载应用程序时,sharedPreference 文件保持不变。
android - android:allowBackup=false 但仍需要 BackupAgent
我忙着为 Android 4.4.2 版设计一个应用程序(Android Studio 1.3.1),并希望该应用程序在启动后立即启动。我的问题是它没有,在调试时我发现它抱怨缺少 BackupAgent。我已在清单中将 android:allowBackup 设置为 false,但这似乎无助于消除有关缺少 BackupAgent 的异常。
我是否误解了 android:allowBackup 的目的?
我不需要任何备份。
android - 安卓数据备份
我正在尝试使用 data backup api在我的应用程序中实现数据备份。
辅助类中的onBackup
方法永远不会被调用。BackupAgent
该文件说,onBackup()
将在未来的某个时间调用。有没有具体的时间onBackup
会被调用?每天只调用一次吗?
我尝试使用以下命令强制在模拟器和 Nexus 7 设备上进行数据备份:
在模拟器上调用了该onBackup()
实现,但在设备上从未调用过它。bmgr工具可以在设备上运行吗?请帮我理解。
android-sqlite - Android 备份 API:如何执行数据库备份/恢复线程安全?
我想执行 SQLite 数据库备份/恢复。我认为最简单的方法是使用 BackUp API。但是,文档说:
但是,读取和写入内部存储上的文件不是线程安全的。为确保您的备份代理不会在您的活动的同时读取或写入您的文件,您必须在每次执行读取或写入时使用同步语句。例如,在您读取和写入文件的任何 Activity 中,您需要一个对象用作同步语句的内在锁:
如何执行数据库备份/恢复线程安全?