Резервное копирование Google: несколько устройств используют одну и ту же учетную запись — что происходит при восстановлении?

Нет ничего нового в том, что можно использовать несколько устройств Android с одной учетной записью Google . Включение нового устройства в первый раз спрашивает, хочет ли он хранить свои данные в Google, который затем всегда будет синхронизировать «некоторые вещи» с серверами Google, в основном

  • некоторые данные приложения (если приложения поддерживают это явно)
  • Wi-Fi пароли
  • закладки браузера
  • список приложений, установленных из Google Play
  • слова, добавленные в словарь, используемый экранной клавиатурой
  • большинство ваших пользовательских настроек

Подробности можно найти в Личном кабинете Google . Соответствующие вопросы здесь, охватывающие эти проблемы, включают:

Developers API в Google Backup дает некоторое дополнительное представление о том, как должны работать средства резервного копирования (и несколько вопросов здесь показывают, как это работает на самом деле, то есть иногда работает, иногда лишь частично, а иногда и вовсе). Помимо надежности и того факта, что не все хотят, чтобы его личные данные находились в облаке (и даже упомянутая ссылка API 2 предупреждает: Android не дает гарантий безопасности ваших данных при использовании резервного копирования. Вы всегда должны быть осторожны при использовании резервного копирования для хранения конфиденциальных данных). данные, такие как имена пользователей и пароли. ), мой главный вопрос:

Резервное копирование данных с нескольких устройств с использованием одной и той же учетной записи:

  • что произойдет с устройством с заводским сбросом, которое использовалось таким образом раньше? Будет ли он признан и восстановлены ли только те вещи, которые использовались на нем раньше?
    (идентификация устройства может, например, происходить, например, через IMEI (но не через Android_ID, так как он может быть удален с заводским сбросом ) - и это может быть причиной поведения, описанного в ответе Налума )
  • что будет восстановлено на (новом/сброшенном до заводских) устройстве, которое вы впервые инициализируете с помощью этой учетной записи Google?
    (если устройства будут идентифицированы с помощью резервных копий в используемой учетной записи Google, это может вызвать специальное действие для «нового устройства», например, «восстановить все, устройство изменено!» — или «восстановить все с больше не подключенного устройства X, как вероятно, он был заменен!» — но придерживайтесь «восстановить только то, что было на этом устройстве» в случае сброса настроек)

Дело в том, что если у вас есть несколько устройств, они часто используются для определенных задач, поэтому вам не нужно все на всех устройствах. Поскольку я не видел способа выбрать, какие данные резервировать (например, исключить те «конфиденциальные данные», о которых нас предупреждали: пароли WiFi относятся к этой категории), я предполагаю, что при восстановлении тоже нет выбора? Итак, как это обрабатывается?

Еще два источника, которые могут быть интересны для чтения: резервное копирование и восстановление Google для Android зависит от устройства? (который описывает «бардак» по крайней мере версий Android до 4.x), а служба автоматического резервного копирования и восстановления Android великолепна… когда она работает . Оба частично отражают мой вопрос, но никто не отвечает на него. Так много о поиске проблемы в Google.
Единственное, что я могу сказать, это то, что это очень ненадежно. Я бы хотел, чтобы была кнопка ручного резервного копирования/восстановления, которую я мог бы использовать. На днях я перезагрузил свой планшет, и он не восстановил все мои приложения и настройки, но в прошлые разы это было сделано. Мне не нравится, что я не могу на это положиться.
Поскольку даже награда не может раскрыть подробности, я думаю, шансы найти «полный ответ» довольно малы. Так что мы знаем примерно то же, что и раньше: может сработать "так или иначе", надо попробовать разобраться, повезет или нет. Спасибо, Google, за ненадежный инструмент без какой-либо пользовательской документации :( Итак, награда достается Налуму: хотя ответ предшествовал награде, это лучшее, что у нас есть :)
@Flow Да. И ответ выглядит удивительно фамильярно :)

Ответы (5)

Давай поговорим о наборах, детка

Служба резервного копирования Android имеет концепцию, называемую набором : набор всех данных, зарезервированных с одного устройства (на одном транспорте , но это деталь). Каждый набор идентифицируется уникальной строкой, такой как IMEI на устройстве. При резервном копировании приложения (или списка установленных приложений) данные его резервной копии попадают в набор, связанный с устройством, с которого выполняется резервное копирование. Все наборы по-прежнему привязаны к учетной записи Google пользователя. Если вы очистите свое устройство и продадите его кому-то другому, он не сможет получить доступ к набору этого устройства, если не войдет в вашу учетную запись Google.

Поведение по умолчанию

Когда приложение установлено или на устройстве восстанавливается список приложений, система резервного копирования сначала ищет в наборе этого устройства резервные данные для этого пакета. Если он ничего не находит (либо потому, что это совершенно новое устройство без резервных копий данных, либо потому, что этот пакет никогда не устанавливался на этом устройстве), он расширит поиск до других наборов. (Если есть выбор, будет использоваться последний набор, который использовался для полного восстановления устройства.)

Таким образом, когда вы настраиваете новое устройство, оно восстанавливает список приложений из резервной копии старого устройства и каждое приложение из резервной копии старого устройства. Если у вас было приложение, установленное на одном устройстве, и вы устанавливаете его на другое устройство, приложение будет восстановлено с данными со старого устройства. В любом случае данные теперь резервируются в наборе нового устройства, что означает, что данные резервного копирования с двух устройств теперь разделены.

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

Источник

Этот механизм не имеет документации для пользователя, поскольку он должен автоматически выполнять правильные действия, но код доступен .

bmgr: основное использование

Как обнаружил Иззи, bmgrинструмент дает вам некоторый контроль над этим процессом. Он предназначен для помощи программистам в тестировании и отладке интеграции резервного копирования в их приложениях. Вы можете использовать этот инструмент adb shellдля запуска резервного копирования и восстановления выбранных пакетов, очистки резервных копий данных пакетов и даже восстановления всего устройства.

Не пытайтесь использовать его в оболочке на устройстве, кроме как : вам нужен системный уровень android.permission.BACKUP, чтобы делать с ним что-нибудь интересное.

Вы можете заставить приложение немедленно обновить свои резервные данные:

bmgr backup com.shadowburst.showr
bmgr run

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

bmgr restore com.shadowburst.showr

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

Больше контроля

Теперь о вещах, которые система резервного копирования не будет делать во включенном состоянии. Чтобы узнать, какие наборы резервных копий доступны:

bmgr list sets

и вы получите такой вывод:

  3ff7800e963f25c5 : manta
  3f0e5c90a412cca7 : manta
  3dd65924a70e14c8 : TF101
  3baa67e9ce029355 : m0

64-битное шестнадцатеричное число слева — это токен . Это понадобится вам через минуту. То, что справа, — это (относительно) понятное имя для устройства, которому принадлежит набор. Например, manta — это кодовое название ; TF-101 относится к оригинальному . Как только вы определились, какой набор вам нужен, вы можете восстановить приложение из этого набора, используя его токен:

bmgr restore 3ff7800e963f25c5 com.shadowburst.showr

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

Наконец, вы можете стереть данные приложения из текущего набора:

bmgr wipe com.shadowburst.showr

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

Вы не можете заставить устройство начать запись в другой набор и не можете стереть весь набор.

Очень подробный ответ, спасибо, Дэн! «Ручное управление» (откуда восстанавливать) — дополнительный плюс, который я искал. Хотелось бы, чтобы для всего этого был выбор пользователя, например, всплывающее окно при восстановлении: «Вы хотите восстановить?» -> «Из какого набора?» -> «Выбрать детали (полное восстановление, xxx.. .)". Хотя может быть приятно, когда приложение знает, что нужно «автоматически делать правильные вещи», мне нравится контролировать ситуацию, а иногда это даже необходимо. Кроме того, восстановление может потребоваться в случаях, отличных от сброса настроек и новых устройств, поэтому у пользователя должен быть способ запустить его...

Следующее, безусловно, не является ответом на вопрос, но может пролить свет на некоторые детали:

Некоторые фрагменты, извлеченные из Backup API

Хотя API в основном предназначен для разработчиков, есть несколько фактов, которые мы могли бы извлечь для нашего случая. В следующем списке курсивом отмечены цитаты из документации по API.

  • Android автоматически выполняет операцию восстановления, когда ваше приложение установлено и существует резервная копия данных, связанных с пользователем.
    → это может означать две вещи:
    • если приложение поддерживает API резервного копирования Google и у пользователя включено резервное копирование Google, доступные данные резервного копирования будут автоматически восстановлены при установке. Хорошо, когда вы впервые устанавливаете приложение, используемое на одном устройстве, на второе устройство.
    • резервные копии связаны только с учетной записью Google, а не с устройством ( и существуют резервные данные, связанные с пользователем ), или другой факт был просто проигнорирован как не относящийся к этому особому случаю («приложение установлено»)
  • Резервный транспорт — это клиентский компонент платформы резервного копирования Android, который настраивается производителем устройства и поставщиком услуг. Резервный транспорт может отличаться от устройства к устройству [...]
    → это может объяснить ненадежность, когда речь идет о разных устройствах (или разных версиях Android).
    (выделено мной)
  • Резервное копирование данных не гарантируется на всех устройствах под управлением Android.
    (без комментариев)
  • Google предоставляет резервный транспорт со службой резервного копирования Android для большинства устройств на базе Android под управлением Android 2.2 или более поздней версии.
    → здесь у нас есть минимальная версия Android, необходимая для Google Backup, которая вообще доступна: Froyo, также известная как Android 2.2.
  • Чтобы получить ключ службы резервного копирования, зарегистрируйтесь в службе резервного копирования Android. [...]
    → у каждого приложения должен быть свой ключ. Там нет описания «почему», но есть хорошее предположение: изолировать резервные копии, чтобы ни одно приложение не могло читать резервные копии другого приложения (неправильный ключ; что касается резервных копий другого пользователя: неправильная учетная запись)
  • При разработке приложения вы можете инициировать немедленную операцию резервного копирования из диспетчера резервного копирования с помощью инструмента bmgr.
    → похоже, есть способ вручную запустить резервное копирование? Давайте углубимся в это позже. ↓
  • Когда пришло время восстановить данные вашего приложения, диспетчер резервного копирования вызывает onRestore()метод вашего агента резервного копирования.
    → это еще раз подчеркивает первый пункт этого списка: сначала должно быть установлено приложение, затем используются собственные реализации для восстановления его данных. На второй взгляд: если восстановление приложения завершится неудачно, восстановление данных для сбойных приложений не произойдет, пока вы не установите их вручную через Google Play. Затем, как показал первый пункт, данные должны автоматически восстановиться через Google Backup при объясненных условиях (должна быть сделана резервная копия с его помощью, та же учетная запись и т. д.)
  • Резервное копирование других файлов
    → извините, что я не цитирую (техническое) содержание этой главы, но вкратце: в соответствии с ней можно создавать резервные копии только файлов из внутренней памяти.

Некоторые фрагменты извлечены из bmgr API

  • Он предоставляет команды для запуска операций резервного копирования и восстановления [...]
    → похоже, вот способ запуска действий вручную, если «автоматизм» не работает
  • Доступ к этим командам осуществляется через оболочку adb.
    → это не требует пояснений :)
  • adb shell bmgr backup <package>
    → ОК, значит, это действие привязано к приложениям. Угадайте, если вы знаете имя пакета поставщика данных, это также должно работать (например com.android.providers.settings, для системных настроек или com.android.providers.telephonyдля SMS / MMS и т. д.?)
  • вы можете заставить все ожидающие операции резервного копирования выполняться немедленно, используя bmgr runкоманду
    → первая команда просто «планирует» резервное копирование. Запустив все пакеты, это можно использовать для их немедленного выполнения.
  • adb shell bmgr restore <package>
    → это выглядит красиво, чтобы быть правдой, верно? Именно потому, что: Менеджер резервного копирования немедленно создаст экземпляр агента резервного копирования приложения и вызовет его для восстановления. Только данные, так как приложение уже должно быть там (так называются его подпрограммы).

Короче говоря: bmgrможет использоваться для запуска резервного копирования для приложений, поддерживающих Google Backup, которые вы установили, и может запускать восстановление данных для того же самого. Его нельзя использовать для запуска полного восстановления — по крайней мере, это не задокументировано здесь.

Я знаю, что это старо, и кто-то может напасть на меня за комментарий к такому старому вопросу, но это единственный наиболее релевантный результат, который я смог найти, как бы усердно я ни гуглил. Я только что купил новый телефон, и когда запускается настройка устройства, он НЕ показывает мой старый Nexus 5x как устройство для восстановления, и я ЗНАЮ, что резервное копирование и восстановление были включены на 5x. 5x полностью умер, поэтому я ничем не могу с ним помочь. И при выполнении наборов списков bmgr он показывает то же самое неправильное устройство, которое было показано во время установки ... буду очень признателен за любые советы.
@ Soundfx4 Могу я предложить вам задать отдельный специальный вопрос? Добро пожаловать на ссылку здесь для справки. Я все равно не смогу помочь вам с этой конкретной проблемой, так как я не использую Google Backup.
Это гораздо лучшая идея, спасибо. В Интернете никогда не бывает достаточно полезной информации! Я напечатаю один, когда у меня будет немного времени. тя за ответ!

Еще немного информации о резервном копировании Google. Когда я прошил кастомную прошивку, приложения не восстановились, как я ожидал. В «Настройки» -> « Резервное копирование и сброс » показывалось «Резервное копирование в частный кеш только для отладки» и bmgr list setsне давало никаких результатов.
Я решил свою проблему, выполнив следующие шаги adb shell:
$ bmgr transport com.google.android.backup/.BackupTransportService
$ bmgr list sets 3a0a00a516a1daf1 : LT22i
Однако этого было недостаточно. Не начал установку приложений. Это показало причину:
$ bmgr list sets 3179e4ab08d74930 : LT22i 3a0a00a516a1daf1 : LT22i
он создал новый набор, хотя IMEI, очевидно, был тем же самым. Во всяком случае, это было исправлением:
$ bmgr restore 3a0a00a516a1daf1(идентификатор, который он показал в первый раз)
$ bmgr run(чтобы быть уверенным)
. Затем он начал загружать приложения.

По моему опыту, у каждого устройства есть собственная резервная копия. Я понял это из-за возни со своим Nexus 7 и Galaxy S II. Кроме этого я не знаю.

Программы:

В моем Nexus 7 есть приложения Caustic , DC Comics и 20 Minute Meals , которые после сброса настроек моего Galaxy S II не устанавливаются на Galaxy S II.

В моем Galaxy S II есть эти приложения DriveDroid и Human Japanese , которые после сброса настроек моего Nexus 7 не устанавливаются на Nexus 7.

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

Данные:

Что касается Wi-Fi и других данных, я не уверен, так как каждый раз, когда я устанавливал Wi-Fi на каждом устройстве во время первоначальной настройки Android. Что касается других учетных записей Google, которые у вас могут быть, похоже, они не копируются на каждое устройство, и то же самое относится к учетным записям Skype и GitHub на каждом устройстве.

Из резервной копии переустанавливаются только приложения, которые были установлены на этом устройстве. Например, приложение DriveDroid установлено на моем телефоне и не загружается в Nexus 7 после сброса настроек. У меня есть Caustic на Nexus 7, который не загружается на Galaxy S II среди других приложений.
Спасибо - я объединил это с ответом. Поскольку есть довольно противоречивые сообщения: не могли бы вы обновить свой ответ с помощью версий Android используемых устройств? Заранее спасибо! Чтобы не загромождать наше преобразование, я также пойду и удалю некоторые из своих комментариев (не стесняйтесь делать то же самое для тех, кто уже интегрирован в сам ответ).
Итак, теперь возникает вопрос: если ничего не восстанавливается, что делать, если одно из устройств «сломается» (или вы хотите заменить два одним новым устройством) и вы хотите «объединить»? Думаю, я не единственный, кому действительно не хватает хорошего руководства...

Я сделал резервную копию, используя как встроенную резервную копию Google, так и резервную копию Helium, прежде чем стереть и установить пользовательское ПЗУ Carbon на Nexus 4 (со склада KitKat). Ожидал, что Google восстановит приложения, настройки и т. д., как это было раньше, когда я восстановил этот телефон, но без радости.

Пробовал и Helium, тоже без радости, даже при ручном восстановлении «Загрузка с ПК» - сказал «восстановлено», но данных Wi-Fi и приложений по-прежнему нет.

Запуск bmgr restore <xxx>полного восстановления и bmgr run, как подробно описано выше, запустил полное восстановление Google и сработал - спасение для меня!

Google мог бы приложить больше усилий, особенно если они хотят конкурировать с идеей Apple «просто работает»… Тем не менее, мне нравится взламываемость Android, несмотря на его подводные камни!