Почему мой Android не восстанавливает данные приложения из резервной копии на Google Диске?

Я тестирую новую версию нашего приложения, которое теперь поддерживает автоматическое резервное копирование Android (нацеливая API более 23).

Мне удалось заставить систему сделать резервную копию данных приложения, оставив ее на ночь (две ночи), но когда я удалил приложение и снова установил его, оно не восстановило данные из резервной копии.

Тем не менее, я все еще вижу резервную копию приложения в разделе Settings > System > Backup > App data > [appname]и что она была в последний раз резервирована вчера.

Сначала я переустановил приложение из apk, загруженного на устройство. Не вызовет ли это восстановление, как при установке из Google Play или через adb?

Я попытался снова удалить и установить через adb, но данные все равно не восстанавливаются.

Есть ли способ заставить его восстановить данные из резервной копии?

Просто посмотрел в logcat и заметил это сразу после завершения установки:02-21 14:20:44.034: V/BackupManagerService(914): restoreAtInstall pkg=<package> token=c restoreSet=1 02-21 14:20:44.037: D/BackupManagerService(914): MSG_RUN_RESTORE observer=null 02-21 14:20:44.037: D/BackupManagerService(914): Starting restore. 02-21 14:20:44.690: E/BackupManagerService(914): Required package metadata but got 02-21 14:20:44.700: I/BackupManagerService(914): Restore complete.

Ответы (2)

adb shell bmgr restore <TOKEN> <PACKAGE>

Источник

Дополнительные материалы OP, включенные из комментариев

Похоже, что причина, по которой он не восстановился автоматически в моем случае, заключалась в том, что на одну и ту же учетную запись Google было выполнено резервное копирование множества разных устройств, и он не знал, какой «набор» использовать. Я получил список «наборов» с adb shell bmgr listнаборами команд и затем мог использовать вашу команду с желаемым набором, например: adb shell bmgr restore <SET> <PACKAGE>.

Я собираюсь опубликовать альтернативный ответ на свой вопрос, несмотря на то, что принял предыдущий ответ. Причина в том, что с тех пор я узнал на своем личном устройстве, что резервное копирование и восстановление Android работает не так, как я ожидал, поэтому, хотя это не так в случае выше, это может иметь место для других люди, нашедшие этот вопрос.

Судя по всему, при восстановлении на другом устройстве или даже на том же устройстве с другой ОС ничего, кроме системных данных, не восстановится. Это случилось со мной, когда я стер свой Moto X (2-го поколения), чтобы установить на него LineageOS.

Это означает, что настройки уведомлений, пароли WiFi и фоновые изображения сохранятся, а данные приложений (сохраненные игры, настройки приложений и т. д.) — нет .

Я не уверен, есть ли в более новых версиях Android улучшенные функции резервного копирования и восстановления, но сейчас я собираюсь использовать специализированное приложение для резервного копирования (на данный момент Helium), чтобы обеспечить надежное резервное копирование моих данных, а также использовать это при переносе на новое устройство.

Если у кого-то есть положительный опыт использования собственного резервного копирования и восстановления Android, фактически восстанавливающего данные приложения на новом устройстве, поделитесь подробностями о версиях Android и устройстве :)

Обновление по гелию

Вот несколько слов о моем опыте работы с Helium.

Сначала я был немного разочарован из-за некоторых ограничений приложения. В бесплатной версии нельзя настроить резервное копирование по расписанию, поэтому мне приходилось каждый раз запускать его вручную. Это, однако, стало чрезвычайно утомительным, так как вы не можете сохранить «выборку» приложений для резервного копирования, и поэтому вам приходилось каждый раз прокручивать все свои приложения. Поэтому я купил премиум-версию, чтобы настроить резервное копирование по расписанию.

Но какое-то время это тоже не работало, потому что приложение теряло «авторизацию» или что-то в этом роде, поэтому мне приходилось подключать его через USB с включенной отладкой по USB и запускать настольное приложение Helium каждый раз, когда я хотел сделать резервную копию. . И вы не можете просто запустить резервное копирование, только изменить запланированное время на "через минуту" и ждать...

Потом это перестало быть проблемой, и авторизация больше не теряется, даже при перезапуске. Но другая проблема заключается в том, что резервное копирование не может быть запущено, если экран заблокирован. Я хотел бы, чтобы резервное копирование выполнялось автоматически ночью, когда мой телефон заряжается и подключен к Wi-Fi, но я просыпаюсь только с сообщением о том, что резервное копирование не может быть запущено из-за блокировки экрана. Это легче исправить, просто нажав на сообщение, чтобы запустить резервное копирование, но это означает, что мне придется оставить телефон до завершения.

В целом это работает, и я рад, что у меня есть резервные копии (резервное копирование на Google Диск), но это могло бы работать намного лучше.

Я до сих пор не пробовал восстанавливать, так что может потребоваться еще одно обновление, когда я увижу, насколько хорошо это работает :-)

Обновление 2 по гелию

Он снова начал терять авторизацию, что означает, что автоматическое резервное копирование не происходит, и мне приходится повторно авторизоваться и переназначать «сейчас», чтобы вызвать их. Было бы здорово услышать от других пользователей Helium, если у них есть некоторый опыт в этом.

Обновление 3 по гелию

Это не так сильно теряет авторизацию, что, вероятно, связано с тем, что мой телефон не так часто перезагружается (у меня новая батарея). Кроме того, в Helium были внесены некоторые обновления, так что теперь вы можете сохранять выбранные приложения, что очень удобно, если вы хотите обновить приложения, резервные копии которых вы создаете в повторяющемся резервном копировании (почти так же удобно, как если бы вы могли редактировать настройки повторяющегося резервного копирования). .