Резервное копирование и восстановление настроек и приложений Android через ADB

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

Я пытался:

adb backup -all
adb: unable to connect for backup

Не работает, а все остальные команды работают.

Можно ли использовать этот bmgr ?

я использую adb 1.0.29 на win7-64 и получаю сообщение об ошибке adb: unable to open file ./backup.abпри выполнении adb backup -all. находит adb devicesваш андроид?
да, я вижу идентификатор устройства.
У меня была аналогичная проблема при отправке нескольких имен пакетов в командной строке. Проблема заключалась в том, что количество пакетов для резервного копирования слишком велико. Мне нужно было разделить его на несколько вызовов команд

Ответы (7)

Убедитесь, что отладка включена и устройство подключено. Кроме того, не забудьте нажать кнопку «Создать резервную копию моих данных» на самом устройстве (устройство требует подтверждения). Если вы не видите такого экрана на своем устройстве, вполне возможно, что вы используете телефон до ICS (< 4.0), в котором, к сожалению, не будет этой функции.

Кроме того, bmgrэто не решение для этого. Это инструмент для тестирования приложений, которые обрабатывают свои собственные резервные копии с использованием API резервного копирования , вручную запуская методы «резервного копирования» и «восстановления» в агенте резервного копирования в приложении, а не в обстреле устройства и копирование данных на/с машины разработки.

Да, для меня проблема была в старой версии Android на моем телефоне, до 4.0. Спасибо!
Это действительно включает настройки/данные?

Вот моя команда для резервного копирования

./adb shell ls -l -a | grep '^[^l]' | sed -e 's/^d.* \([^ ]*\)\r$/mkdir sav\/\1; .\/adb pull \/\1 sav\/\1/' -e 's/-.* \([^ ]*\)\r$/.\/adb pull \/\1 sav\/\1/' | /bin/bash
  1. список всех файлов
  2. игнорировать ссылки
  3. за
    • файлы: вывод команды adb pull
    • каталоги: создайте каталог (на случай, если мы вытащим что-то пустым) и выведите команду adb pull
  4. выполнить все в bash

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

Это действительно похоже на резервное копирование всех файлов (за исключением битов «отказано в доступе») даже на старых Android (в данном случае Gingerbread 2.3.3). Я использую этот вариант (добавлен -pпараметр, mkdirчтобы избежать некоторых сообщений об ошибках и удален ./перед ./adb):time adb shell ls -l -a | grep '^[^l]' | sed -e 's/^d.* \([^ ]*\)\r$/mkdir -p sav\/\1; adb pull \/\1 sav\/\1/' -e 's/-.* \([^ ]*\)\r$/adb pull \/\1 sav\/\1/' | /bin/bash
Гораздо более простой способ сделать рекурсивное резервное копирование всех файлов без использования каких-либо причудливых регулярных выражений — это «adb pull /».

Если я вас правильно понял, эта ссылка может быть тем, что вы ищете. Обобщить:

1) Запустите adb devices, чтобы убедиться, что ваше устройство подключено.

2) Запустите adb pull /data/app ./, чтобы получить все APK приложения и поместить их в текущую папку.
а) Или запустить adb pull /system/sd/app ./, чтобы получить приложения на SD-карте.

3) Настройки расположены в разных местах, так что узнайте где, а затем используйте ту же adb pullкоманду, чтобы их захватить.

А дальше по ссылке подробно описано, как восстановить на основе Mac или Windows.

Кроме того, похоже, bmgrчто упомянутая вами команда также будет работать с несколькими простыми командами ( adb shell bmgr backup <package>для резервного копирования и adb shell bmgr restore <package>восстановления). Что еще вы ищете?

Как отмечает Александр Лукас в своем ответе ниже, эта bmgrкоманда является инструментом для разработчиков, позволяющим тестировать резервное копирование/восстановление приложений. На самом деле он не копирует никаких данных с устройства, поэтому вряд ли будет полезен.
Не работает на adb 1.0.30 с устройством Gingerbread:pull: building file list... 0 files pulled. 0 files skipped.
Вы adb pullне будете работать на нерутированных устройствах для личных данных приложения. И bmgrпредназначен только для управления резервным копированием в облаке Google.

проблема, вероятно, связана с тем, что подключено более одного устройства/эмулятора.

проверьте adb devices, показывает ли он более одного устройства, возможно, он не сможет подключиться specialy to emulators.

запустите adb usb, он перезапустит другие устройства, затем отсоедините/повторно подключите USB-кабель, теперь запустите

adb devices

он должен показывать только одно устройство.

теперь сделай

adb backup -all

и тебе должно быть хорошо идти :)

что мне нужно будет сделать, если я использую команду локально через эмулятор терминала для Android?

Обязательно запустите обновление SDK и, в частности, установите флажок для Google USB Drivers и обновите SDK.

После включения отладки по USB на вашем устройстве и подключения к компьютеру вы должны получить запрос на установку драйверов. Даже если он успешно откроет диспетчер устройств и найдет свой телефон, щелкните правой кнопкой мыши и обновите драйверы, укажите его в папке драйверов Google USB SDK > Extras > Google USBи дайте ему обновить драйверы.

Затем вы сможете получить полные резервные копии с вашего устройства.

Это решило проблему для меня, когда она у меня была. Проблема была не в драйверах, но сама версия ADB была слишком устаревшей.

У меня есть GS4, который мне нужно было сделать резервную копию, и, к сожалению, я столкнулся с этой ошибкой. после небольшого царапания головы (и ругани) я нашел исправление, которое, я надеюсь, сработает для вас. Я смог найти это, просто запустив abdи пролистав справочную документацию. Я обнаружил, что -dэто параметр, который «направляет команду на единственное подключенное USB-устройство». Итак, после подключения и пыхтения я заставил его работать на меня. Команда, которую я использовал, была:

adb -d backup -apk -shared -all -f C:\Users\NAME\backup.ab

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

У меня была такая же проблема, и я тоже пре-ICS. Чтобы обойти это, я использовал ls /и awk (с grep для пропуска ссылок) для создания пакетного файла, который извлекает каждый фактический каталог в каталог на моем ПК.