BackupAgentHelper: onRestore не вызывается

Я установил пример 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. И я потратил много часов на это. Кто-нибудь может пролить свет?

1 ответ

После проверки логов я заметил сообщение:

I / Backup: [KeyValueRateLimiter] резервное копирование K/V для [пакета] прервано ограничителем скорости. следующий =1519165401410, текущий =1519088429345

Это означает, что резервные копии не создаются до 20.02.2008, 17:23:21. Для резервных копий с помощью Google Transport существует ограничение скорости, поэтому я собираюсь попробовать Local Transport без ограничения скорости.

Обновление: переключение на локальный транспорт, кажется, работает. Он смог восстановить значения после удаления / переустановки приложения на моем устройстве.

Вот что я сделал, чтобы заставить его работать:

  • Скопируйте исходные файлы из проекта BackupRestore в новый проект.
  • Создайте резервный ключ для файла манифеста на этом веб-сайте: https://developer.android.com/google/backup/signup.html
  • Запустите adb shell bmgr list транспорты, чтобы увидеть транспорты.
  • Запустите adb shell bmgr transport android/com.android.internal.backup.LocalTransport, чтобы изменить транспорт на Локальный (транспорт Google наложит ограничение скорости)
  • Запустите adb shell bmgr backup [package] - для резервного копирования приложения
  • Запустите adb shell dumpsys backup, чтобы увидеть ожидающие файлы резервных копий.
  • adb shell bmgr run

  • adb uninstall [имя пакета]

  • adb install -t [apk file] (для отладки я использовал -t)

  • Убедитесь, что значения были восстановлены во время установки.

  • Вы также можете нажать кнопку Восстановить последние данные, и событие OnRestore сработает, последняя резервная копия будет восстановлена.

Я боролся с этим. Я надеюсь, что это помогает кому-то.

Другие вопросы по тегам