1

我从此链接安装了示例 BackupRestore。

https://android.googlesource.com/platform/development/+/0b3758ea4e53f9bfd0b112eaa4a7dd7b7f4040f5/samples/BackupRestore?autodive=0%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F

我无法恢复数据。

OnBackup 和 OnCreate 被调用,但 OnRestore 没有。

我能够备份: OnCreate 和 OnBackup 受到打击,但 OnRestore 没有。

@Override
public void onRestore(BackupDataInput data, int appVersionCode,
                      ParcelFileDescriptor newState) throws IOException {
    // Hold the lock while the FileBackupHelper restores the file from
    // the data provided here.
    synchronized (BackupRestoreActivity.sDataLock) {
        super.onRestore(data, appVersionCode, newState);
    }
}



   public void onRestoreButtonClick(View v) {
        Log.v(TAG, "Requesting restore of our most recent data");
        mBackupManager.requestRestore(
                new RestoreObserver() {
                    public void restoreFinished(int error) {
                        /** Done with the restore!  Now draw the new state of our data */
                        Log.v(TAG, "Restore finished, error = " + error);
                        populateUI();
                    }
                }
        );
    }

我试过使用 adb 工具(除了 requestRestore),它也不起作用。

adb shell bmgr restore [package]
adb uninstall [apkfile]
adb  install [apkfile]

当我运行恢复时,我得到:

restoreStarting: 1 packages
restoreFinished: 0
done

但是 OnRestore 没有被命中,数据也没有恢复。

我正在使用 Android Studio 3.0。我为此花了很多时间。任何人都可以解释一下吗?

4

1 回答 1

5

检查日志后,我注意到一条消息:

I/Backup: [KeyValueRateLimiter] [包] 的 K/V 备份被速率限制器中止。下一个=1519165401410,当前=1519088429345

这意味着直到 2018 年 2 月 20 日下午 5:23:21 才会进行备份。使用 Google Transport 进行备份有速率限制,因此我将尝试没有速率限制的本地传输。

更新:切换到本地传输似乎有效。在我的设备上卸载/重新安装应用程序后,它能够恢复这些值。

这是我为使其工作所做的工作:

  • 将 BackupRestore 项目中的源文件复制到新项目中。
  • 从此网站生成清单文件的备份密钥:https ://developer.android.com/google/backup/signup.html
  • 运行adb shell bmgr list transports以查看传输。
  • 运行adb shell bmgr transport android/com.android.internal.backup.LocalTransport将传输更改为本地(谷歌传输将施加速率限制)
  • 运行 adb shell bmgr backup [package] -- 备份应用程序
  • 运行adb shell dumpsys backup以查看待处理的备份文件
  • adb shell bmgr 运行

  • adb 卸载 [包名]

  • adb install -t [apk file](用于调试,我使用了 -t)

  • 检查在安装期间是否恢复了这些值。

  • 您也可以单击恢复最后一个数据按钮,OnRestore 事件将触发,最后一个备份将被恢复。

我为此苦苦挣扎。我希望这可以帮助别人。

于 2018-02-20T01:09:23.163 回答