2011-12-14 4 views
2

Я всегда удивляюсь, как Android's BackupManager будет действовать, если включено то же самое BackupManager. Приложение установлено на нескольких устройствах (например, смартфонах и планшетах), связанных с той же учетной записью Google. It seems that I am not the only one,, но я не могу найти никаких спецификаций.Android BackupManager и несколько устройств, связанных с одной учетной записью

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

+1

Я искал тот же ответ. Оказывается, существует понятие множеств. Пожалуйста, взгляните на [link] (http://android.stackexchange.com/questions/42245/google-backup-multiple-devices-using-the-same-account-what-happens-on-restore#answer-49425) –

ответ

5

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

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

служба резервного копирования Android, есть понятие называется набор: совокупность всех данных, резервируемых с одного устройства на одном транспорте. Каждый набор идентифицируется уникальной строкой, такой как IMEI на устройстве. Когда приложение (или список установленных приложений) резервное копирование, его данные резервного копирования входят в набор, связанный с устройством, на котором оно выполняется. Все наборы по-прежнему зависят от учетной записи пользователя. Если вы протрите свое устройство и продадите его кому-то другому, он не сможет получить доступ к этому устройству, если он не сможет войти в ваш аккаунт 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 

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

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

+0

Когда я запускаю 'bmgr restore', должен ли я ожидать, что onRestore() будет вызван сразу? –

+0

Не совсем сразу: я думаю, что он просто идет в очередь. Но я не ожидал, что там будет много задержек. Я просто догадываюсь здесь: я не думаю, что в официальной документации есть что сказать по этому вопросу. –

+0

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