Android BackupManager и несколько устройств, связанных с одной учетной записью - PullRequest
4 голосов
/ 14 декабря 2011

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

Какой у вас опыт в этом сценарии?Есть ли официальные ресурсы, которые описывают этот случай?

1 Ответ

7 голосов
/ 31 октября 2013

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

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

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

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

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

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

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

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

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

Не пытайтесь использовать его в оболочке на устройстве, кроме как root: вам нужен системный уровень 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 - это кодовое название для Nexus 10; TF101 относится к оригинальному Asus Transformer. Вы можете восстановить данные пакета из набора по вашему выбору, указав его токен:

bmgr restore 3ff7800e963f25c5 com.shadowburst.showr

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

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

bmgr wipe com.shadowburst.showr

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

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

...