Каждый раз, когда я запускаю резервное копирование ADB, я получаю сообщение в нижней части главного экрана с надписью Backup starting...
, за которым Backup finished
через несколько секунд следует сообщение о том, что несмотря на то, что я использую 17 ГБ памяти устройства, и создается результирующий файл резервной копии. с размером 0 байт. Я не получаю никаких сообщений об ошибках, никакой обратной связи, указывающей на то, что что - то не так, не говоря уже о том, что именно не так. Кажется, это работает, но слишком быстро, а файл резервной копии пуст.
Я подтверждаю, что устройство распознано ADB с помощью adb devices
команды, и получаю следующий вывод:
List of devices attached
8e1f368a device
Я выдаю команду резервного копирования ADB (подробности ниже).
Я получаю следующее сообщение в командной строке:
Now unlock your device and confirm the backup operation.
...и следующая подсказка по телефону:
Не имеет значения, что я здесь делаю (подробности далее).
Я нажимаю Back up my dataкнопку (нижний правый угол).
Телефон возвращается к главному экрану и показывает мне Backup starting...
сообщение, а затем Backup finished
сообщение через несколько секунд. Создается 0-байтовый файл с именем по умолчанию backup.ab или с тем, что я указал с ключом -f .
Я пробовал несколько комбинаций вариантов, начиная от таких простых, как
adb backup -all
к таким вещам, как
adb backup -all -apk -s 8e1f368a -f 'C:\Data Files\PDA\Backups\ADB\GalaxyS4_20140919.ab'
Я также попытался добавить -nosystem
переключатель после прочтения этого и этого , которые указывают на то, что попытка включить резервную копию системы на нерутированном устройстве может привести к созданию 0-байтового файла и что этот переключатель необходимо использовать. Это не имеет значения, процесс по-прежнему завершается за считанные секунды, и я все равно получаю 0-байтовый файл.
Я совершенно уверен, что никогда раньше не устанавливал резервный пароль. У меня никогда раньше не было возможности установить этот пароль или каким-либо образом получить доступ к этому параметру. Тем не менее, я пробовал все следующее:
Во всех случаях поведение точно такое же, как описано в шаге 5. Я не получаю никаких ошибок или каких-либо указаний на то, что что-то не так или что мои пароли недействительны, и никаких намеков на то, действительно ли он ожидает текущий пароль или это поле следует оставить пустым. (Снимок экрана в этом ответе и на нескольких других форумах поддержки, которые я просматривал, похоже, подразумевает, что поле «текущий резервный пароль» не будет отображаться, если нет текущего пароля, но это просто вывод; ничто не дает понять, фактически требуется текущий пароль.)
Я подозреваю, что пароль, который он запрашивает, может быть «паролем резервного копирования рабочего стола», установленным в параметрах разработчика:
Я никогда не устанавливал этот пароль раньше. Если я попытаюсь установить один, я получаю сообщение о том, чтоFailed to set backup password.
При поиске информации об этой ошибке я столкнулся по крайней мере еще с одним случаем, когда кто-то, у кого была эта проблема, сказал, что это мешает ему использовать резервную копию ADB, но он не уточнил, что происходит, когда он пытается использовать ADB. резервный.
Большинство людей, которые получили это сообщение, никогда ранее не устанавливавшие пароль, говорят, что решение состояло в том, чтобы оставить текущий пароль пустым, но я попробовал это в первую очередь, и это не сработало. Я нашел вопрос другого человека, который столкнулся с этой проблемой и был уверен, что он не устанавливал пароль раньше . К сожалению, не похоже, что он когда-либо получил решение или даже объяснение.
Независимо от того, ищет ли ADB «пароль резервного копирования рабочего стола» или пароль шифрования ADB является чем-то отдельным, меня поражает, почему ADB требует от вас ввода предыдущего пароля, чтобы инициировать новое резервное копирование. Я не пытаюсь восстановить, перезаписать или каким-либо образом получить доступ к ранее зашифрованным данным, поэтому, даже если ранее был установлен пароль шифрования для резервной копии , я не могу себе представить, почему кто-то может подумать, что это хорошая идея, чтобы запретить вам резервное копирование вашего устройства, если вы не помните, какой пароль вы использовали для шифрования резервных копий в прошлом.
Модель: Samsung Galaxy S4 SCH-I545
Версия ядра: 3.4.0 Версия
ОС: 4.4.2 Версия
Android SDK Tools: 1.16
Включена отладка по USB.
Обратите внимание, что моя причина использования резервного копирования ADB заключается в том, чтобы сделать полную резервную копию моего телефона, чтобы быть в безопасности, прежде чем рутировать его *, чтобы я мог использовать инструменты резервного копирования nandroid, такие как резервное копирование Titanium. Таким образом, любое предложение, связанное с рутированием моего телефона, будет Catch-22, а не решением. Излишне говорить, что сброс к заводским настройкам также не является решением, так как это сведет на нет всю цель выполнения резервного копирования.
Телефон настроен на синхронизацию с серверами Exchange моей компании, и на сервере применяются некоторые политики. Я думал, что устройство было зашифровано, когда я впервые настроил синхронизацию с учетной записью компании, но, по-видимому, в настоящее время оно не зашифровано. Собственно, это и привело в движение эту цепочку событий: я получаю сообщение о том, что мне нужно зашифровать устройство, чтобы продолжать подключаться к серверам компании. Я хочу сделать резервную копию nandroid перед шифрованием, которое требует рутирования, и я хочу использовать резервную копию ADB перед рутированием.
* Да, я знаю, что Towelroot считается безопасным, но я бы предпочел не рисковать и хотел бы решить или хотя бы понять эту проблему на случай, если в будущем возникнут связанные проблемы.
Попробуйте использовать более раннюю версию adb. 1.0.32 у меня не работала, а 1.0.31 работала.
Я только что столкнулся с этой проблемой на Nexus 5 под управлением CyanogenMod 11 (на базе Android 4.4) с использованием текущей версии инструментов платформы и ADB (Android Debug Bridge версии 1.0.32, редакция eac51f2bb6a8-android).
Используя adb logcat
просмотр журналов устройства, я заметил, что после вызова adb backup -apk -obb -shared -all -nosystem
были некоторые подозрительные записи в журнале:
V/BackupManagerService( 811): Requesting full backup: apks=false obb=false shared=false all=false pkgs=[Ljava.lang.String;@4181ffc8
W/BackupManagerService( 811): Unknown package '-apk' '-obb' '-shared' '-all' '-nosystem', skipping
Где кажется, что устройство интерпретирует параметры командной строки как аргументы, не являющиеся параметрами, и выдает ошибку, поскольку они не являются именами установленных пакетов. Это заставило меня заподозрить, что протокол adb или параметры вызова команды/службы изменились на устройстве относительно хоста, поэтому я попробовал более старую версию adb и вуаля, это сработало.
Я немного покопался и наткнулся на изменение Использовать escape_arg в «adb backup» , которое теперь приводит к тому, что все аргументы заключаются в одинарные кавычки при вызове /system/bin/bu backup
. Это объясняет поведение и аргументы в одинарных кавычках в сообщении журнала. Однако, похоже, оно не соответствует времени, когда вы столкнулись с ошибкой. Это также предполагает, что проблема гораздо более распространена, чем кажется. Поэтому я не решаюсь назвать это причиной, но это может стать хорошей отправной точкой для дальнейшего расследования.
adb backup '-noapk -noshared -all -nosystem'
вместо adb backup -noapk -noshared -all -nosystem
(внутри оболочки bash). Без кавычек я получаю такие сообщения logcat: «неизвестный флаг резервного копирования -all:-nosystem:-noapk», «пакеты резервных копий не предоставлены и ни -shared, ни -all заданы» и, наконец, «Готово».-all
без -shared
(что также сработало). Я видел эти сообщения в файле журнала : BackupManagerService: Calling doFullBackup() on com.android.sharedstoragebackup
//SharedStorageAgent: Backing up 1 shared volumes
FullBackup: Unrecognized domain shared/0
Основываясь на ответе кевеноида, это может зависеть от того, какая версия adb работает на телефоне.
Вы можете узнать, какая версия телефона работает изначально, выполнив следующие действия:
Сначала узнайте, какая версия у вас установлена на рабочем столе.
adb version
Затем откройте оболочку на своем телефоне
adb shell
Как только оболочка открыта, вы можете запустить
adb version
Затем выйдите из оболочки, запустив
exit
Я обнаружил, что на моем телефоне установлена версия 1.0.31, а не 1.0.32 (это Samsung Note 2).
Я пытался использовать кавычки или escape-символы, как показал Хантер, но ни один из них не работал из командной строки Windows. Однако понижение версии решило проблему несовместимости между двумя версиями.
Мне удалось найти более старую версию, следуя инструкциям здесь: https://stackoverflow.com/a/23022718/1741542 .
Я использовал ссылку для скачивания:
http://dl-ssl.google.com/android/repository/platform-tools_r20-windows.zip
Другие платформы:
Другие ответы о цитируемых аргументах команды точны. Я обнаружил, что если вы избегаете пробелов между аргументами, это работает.
Как это:adb backup -apk\ -shared\ -all\ -system
Ни один из обходных путей не сработал для меня здесь, и я не хочу понижать версию своих инструментов SDK. Вот что я придумал: пропустить adb backup
компьютер и сразу перейти к устройству через adb shell
.
$adb version
Android Debug Bridge version 1.0.35
Revision fc2a139a55f5-android
$ adb shell
shell@jflte:/ $ bu 1 backup -apk app.package.name > /sdcard/backup.ab
shell@jflte:/ $ exit
$adb pull /sdcard/backup.ab
[100%] /sdcard/backup.ab
Это вызывает /system/bin/bu
и выгружает файл резервной копии на STDOUT (файловый дескриптор № 1). Параметры те же adb backup <params>
-> bu 1 backup <params>
. Вывод перенаправляется в файл на устройстве, а затем может быть извлечен как любой файл.
Единственным недостатком является то, что вы не можете сделать полную резервную копию, если ваше устройство заполнено более чем наполовину. Это можно обойти, если у вас есть внешний слот для SdCard. bu
туда можно писать даже на Android 4.4.2, потому что это системное приложение. /mnt/extSdCard/backup.ab
работал так же для меня, как /sdcard
.
bu 1 backup -apk app.package.name > /sdcard/backup.ab
в моем случае создает пустой файл размером 47 байт.вздох Мне очень жаль, если это так, и вы, кажется, осторожны, судя по вашим скриншотам и командным строкам, но я обнаружил, к своему огорчению, те же симптомы и подумал, что опубликую на всякий случай, если будущие первооткрыватели сделают это здесь. Оказывается, adb очень разборчив в выборе одинарных и двойных тире в своих параметрах. Для меня двойные тире точно воспроизвели этот случай: та же подсказка на телефоне, тот же 0-байтовый файл. Одиночные тире , несмотря на наличие длинных имен аргументов, работали как шарм.
Если это имеет значение, мой телефон — Samsung Galazy Note 2 AT&T SGH-i317 под управлением Android 5.1/Cyanogenmod 12.1.
Вам нужно выполнить команду adb backup на adb версии 1.0.31.
Для окон я сделал:
Журнал:
$ adb backup -apk -obb -shared -all -system -f bckp.ab
сервер adb устарел. убийство...
Теперь разблокируйте устройство и подтвердите операцию резервного копирования.
... затем верните все в нормальное состояние.
Хорошо, вот как я исправил свой.
Я попробовал решение Хантера Перрина:
adb backup -apk\ -shared\ -all\ -system
Но он просто вернулся сразу без ошибок, без резервного экрана на телефоне.
Путем проб и ошибок это сработало для меня:
adb backup -all\
Думаю, у меня есть решение для тех, кто использует 1.0.32:
введите пароль при появлении запроса на экране Android
Несмотря на то, что он говорит, что будет использовать пароль по умолчанию, если вы его не введете, я считаю, что это не так, и adb 1.0.32, возможно, не позволяет создавать незашифрованные резервные копии.
Ввод пароля сработал для меня, затем я использовал «Android Backup Extractor» (Warning Sourceforge) и «Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy» , чтобы извлечь его в файл tar.
Столкнулся с обратной проблемой: 1.0.31 с более новым телефоном (Android 7) тоже не работает. 1.0.31 использует : в качестве разделителя при передаче аргументов на телефон. Как adb logcat -s BackupManagerService
видно, более новый adb на телефоне также не может работать со старым стилем: 02-19 01:59:44.330 1100 9830 W BackupManagerService: Unknown package com.gameloft.android.ANMP.GloftPOHM:-apk, skipping
к счастью, более новый adb также принимает пробелы в качестве разделителя, поэтому заключение аргументов в двойные кавычки работает, например:adb.exe backup "com.gameloft.android.ANMP.GloftPOHM -apk" -f game-backup.ab
Для меня это было то, что имя пакета было изменено, поэтому adb backup
он не нашел его и создал пустой файл резервной копии, не сообщая об ошибке . adb logcat
показал ошибку. Как только я обновил имя пакета, все adb backup
получилось.
Это использовалось ADB версии 1.0.41 с включенным паролем резервного копирования рабочего стола.
Иззи
adb backup
работало нормально,adb restore
но всегда терпело неудачу). Оказалось, что это была проблема с разрешением (производитель напортачил с ПЗУ), поэтомуadb restore
не удалось прочитать файл резервной копии после его передачи на устройство. Было немного сложно найти, и я не уверен, что здесь действительно что-то подобное; но может стоит проверить.Повелитель огня
Марко Леогранде