【问题标题】:Does android backup api work on real devices?android 备份 api 可以在真实设备上运行吗?
【发布时间】:2016-02-12 07:17:42
【问题描述】:

我已阅读 Google 说明以使用备份 api 备份数据。我编写了简单的测试program 来检查它是如何工作的(MainActivity + BackupAgent 用于共享偏好)。

在具有不同 API 的 AVD 模拟器上一切正常,但在真实设备上我无法在重新安装应用程序后取回数据。

我用不同的方式对其进行了测试:

  • 来自backup data 的 Google 推荐
  • adb shell bmgr 命令/等待 24 小时以上自动备份事件
  • 传输 com.google.android.gms/.backup.BackupTransportService 和 android/com.android.internal.backup.LocalTransport
  • 附加“bmgr restore”命令/附加调用 requestRestore()
  • 使用 FileBackupHelper / SharedPreferencesBackupHelper
  • 不同设备 Nexus4、Nexus7、Samsung Galaxy、Acer a501(每台设备都开启了所有“备份和重置”设置)
  • 从 Android Studio 安装应用程序 / 从 sdcard 安装签名 apk / 我什至在 Google Play 上发布了我的应用程序并尝试从那里安装应用程序
  • 使用 adb 卸载应用程序/从设备应用程序/擦除我的设备

在 logcat 中我可以看到我的包在系统备份列表中,并且调用了 BackupHelper.onCreate()。

    03-14 18:29:14.716  16355-16355/com.jh.testmybackup D/BACKUP﹕ ThebackupAgent.onCreate()
    03-14 18:29:14.716  16355-16367/com.jh.testmybackup V/BackupServiceBinder﹕ doBackup() invoked
    03-14 18:29:14.716  16355-16367/com.jh.testmybackup D/BackupHelperDispatcher﹕ handling existing helper 'com.jh.testmybackup' android.app.backup.SharedPreferencesBackupHelper@41e1ad90
    03-14 18:29:14.716      311-407/? D/PerformBackupTask﹕ starting agent for backup of BackupRequest{pkg=com.jh.testmybackup}
    03-14 18:29:14.716      311-407/? D/BackupManagerService﹕ awaiting agent for ApplicationInfo{42c80f98 com.jh.testmybackup}
    03-14 18:29:14.716    311-27709/? D/BackupManagerService﹕ agentConnected pkg=com.jh.testmybackup agent=android.os.BinderProxy@426b4240
    03-14 18:29:14.716      311-407/? I/BackupManagerService﹕ got agent android.app.IBackupAgent$Stub$Proxy@42979528
    03-14 18:29:14.716      311-407/? D/PerformBackupTask﹕ invokeAgentForBackup on com.jh.testmybackup
    03-14 18:29:15.176      311-407/? I/PerformBackupTask﹕ Backup pass finished.

但没有任何帮助。 重新安装应用程序后,我无法取回我的数据

毕竟,我试图找到有关此问题的一些信息,但没有找到任何解决方案。我发现了一些示例应用程序(stackoverflow.com/questions/12402749/examples-of-application-used-android-backup-services 没有链接声誉)并尝试将它们安装在我的设备上,但之后它们也没有恢复任何内容重新安装。

我觉得自己很愚蠢。只有我有这样的问题吗?

【问题讨论】:

  • 您是否尝试在使用相同密钥签名的应用上进行备份?我认为(但不知道)为一个密钥存储的文件是用所述密钥加盐的,因此您不能交叉来自两个不同的密钥签名 apk 的数据。我不知道这是否是你在做的,但友好的提醒,就是这样。
  • @MeetTitan 我尝试对同一个 .apk 文件进行完整的测试周期(安装 - 设置首选项 - 调用 dataChanged - 运行 bmgr 命令 - 卸载 - 再次安装 - 尝试读取首选项)
  • 你得到这个答案了吗?我已经实现了备份 API,我注意到它适用于模拟器和摩托罗拉设备,但不适用于三星设备......

标签: android android-backup-service


【解决方案1】:

检查您的 Manifest 文件以查看应用程序下是否有 android:allowBackup="true" 以及 android:backupAgent 是否具有指向您的项目 FileBackupAgent 的正确路径。此外,您的元数据应该有您的注册密钥,例如 android:value="your-registerd-key"

确保您的设备已连接到 Wi-Fi 网络。另外,请确保在您的设备设置中,备份和重置需要选中“备份我的数据”,并且“备份帐户”具有有效的 gmail 帐户,并选中“自动恢复”。

此外,在命令窗口中,您的传输设置应为:*com.google.android.backup/.BackupTransportService

您可以通过键入:bmgr list transports 来查看此内容如果传输设置为本地,则输入:bmgr transport com.google.android.backup/.BackupTransportService

用于在https://www.google.com/settings/dashboard 中“启动”备份的其他 bmgr 命令是:

bmgr enabled 
bmgr wipe "your package in your manifest file"
bmgr backup "your package in your manifest file"
bmgr run

刷新您的https://www.google.com/settings/dashboard 以查看最新的备份时间戳

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2019-12-13
    • 2018-01-04
    • 2023-01-03
    相关资源
    最近更新 更多