Резервное копирование ADB создает 0-байтовый файл; запрашивает текущий пароль для резервного копирования, хотя я никогда его не устанавливал; «Не удалось установить пароль» для пароля резервного копирования рабочего стола

Эта проблема:

Каждый раз, когда я запускаю резервное копирование ADB, я получаю сообщение в нижней части главного экрана с надписью Backup starting..., за которым Backup finished через несколько секунд следует сообщение о том, что несмотря на то, что я использую 17 ГБ памяти устройства, и создается результирующий файл резервной копии. с размером 0 байт. Я не получаю никаких сообщений об ошибках, никакой обратной связи, указывающей на то, что что - то не так, не говоря уже о том, что именно не так. Кажется, это работает, но слишком быстро, а файл резервной копии пуст.

Процесс:

  1. Я подтверждаю, что устройство распознано ADB с помощью adb devicesкоманды, и получаю следующий вывод:

    List of devices attached
    8e1f368a        device
    
  2. Я выдаю команду резервного копирования ADB (подробности ниже).

  3. Я получаю следующее сообщение в командной строке:

    Now unlock your device and confirm the backup operation.
    

    ...и следующая подсказка по телефону:

    введите описание изображения здесь

    Не имеет значения, что я здесь делаю (подробности далее).

  4. Я нажимаю Back up my dataкнопку (нижний правый угол).

  5. Телефон возвращается к главному экрану и показывает мне Backup starting...сообщение, а затем Backup finishedсообщение через несколько секунд. Создается 0-байтовый файл с именем по умолчанию backup.ab или с тем, что я указал с ключом -f .

Команда резервного копирования ADB (используется на шаге 2):

Я пробовал несколько комбинаций вариантов, начиная от таких простых, как

adb backup -all

к таким вещам, как

adb backup -all -apk -s 8e1f368a -f 'C:\Data Files\PDA\Backups\ADB\GalaxyS4_20140919.ab'

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

Запрос пароля «Полная резервная копия» (шаг 3):

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

  • Оставьте оба пароля пустыми
  • Оставьте поле «текущий резервный пароль» пустым и введите новый пароль во втором поле.
  • Ввод текущего PIN-кода блокировки экрана и всех PIN-кодов, которые я когда-либо использовал в прошлом, в качестве «текущего резервного пароля».
  • Вводя каждый пароль, который я могу придумать, я бы когда-либо использовал его для чего-либо на этом устройстве.

Во всех случаях поведение точно такое же, как описано в шаге 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 на одном из моих планшетов (с рутом или без, в обоих случаях), которые были похожи (наоборот: adb backupработало нормально, adb restoreно всегда терпело неудачу). Оказалось, что это была проблема с разрешением (производитель напортачил с ПЗУ), поэтому adb restoreне удалось прочитать файл резервной копии после его передачи на устройство. Было немного сложно найти, и я не уверен, что здесь действительно что-то подобное; но может стоит проверить.
Для тех, кто окажется здесь с той же проблемой с 0 байтами: у меня была эта проблема, потому что я однажды установил пароль рабочего стола в разделе «Настройки» и забыл его. Поскольку устройство рутировано, я последовал этому ответу (моему), и все прошло хорошо.
Вы также можете посмотреть: code.google.com/p/android/issues/detail?id=47009 . Если вы зашифровали свой телефон, вам может потребоваться использовать пароль шифрования в качестве «текущего пароля» во всех подсказках: либо на экране «Полное резервное копирование» или на экране «Пароль резервного копирования рабочего стола».

Ответы (10)

Короткий ответ

Попробуйте использовать более раннюю версию 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. Это объясняет поведение и аргументы в одинарных кавычках в сообщении журнала. Однако, похоже, оно не соответствует времени, когда вы столкнулись с ошибкой. Это также предполагает, что проблема гораздо более распространена, чем кажется. Поэтому я не решаюсь назвать это причиной, но это может стать хорошей отправной точкой для дальнейшего расследования.

Использование более ранней версии (1.0.31) решило мою проблему. Этот вопрос stackoverflow.com/q/9555337/1741542 и особенно этот ответ stackoverflow.com/a/23022718/1741542 помогли мне найти более раннюю версию, например, platform-tools_r20-linux.zip.
Хотя, похоже, это работает не со всеми моделями. В то время как я сделал полную резервную копию Samsung S3 mini (Android 4.2) без каких-либо проблем, я не смог сделать это с планшетом, который на Android 4.0. Я пробовал все от adb-r10 до adb-r23 (кроме adb-r15) безуспешно.
У меня была аналогичная проблема с adb 1.0.32 и Nexus 5 (Android 6). Я решил это, явно указав аргументы резервного копирования, т.е. выполнив adb backup '-noapk -noshared -all -nosystem'вместо adb backup -noapk -noshared -all -nosystem(внутри оболочки bash). Без кавычек я получаю такие сообщения logcat: «неизвестный флаг резервного копирования -all:-nosystem:-noapk», «пакеты резервных копий не предоставлены и ни -shared, ни -all заданы» и, наконец, «Готово».
Наконец-то я получил полную резервную копию и с Android 4.0. Глупый я, это была просто перезагрузка планшета, которая меня завела.
Да, модель/ОС определенно имеет какое-то значение, Galaxy S5 на Lollipop отлично работал с 1.0.32, но Nexus 7 на Kit Kat для работы требовал 1.0.31.
Удивительный! Отлично работал с 1.0.32 на устройстве Lollipop Android One.
На самом деле, я беру это назад. Резервная копия не содержит никаких общих данных, только данные приложения, как если бы я использовал их -allбез -shared(что также сработало). Я видел эти сообщения в файле журнала : BackupManagerService: Calling doFullBackup() on com.android.sharedstoragebackup//SharedStorageAgent: Backing up 1 shared volumesFullBackup: Unrecognized domain shared/0
Подтверждаю, что 1.0.31 решил и мою проблему. Я использовал ответ здесь, чтобы найти более старую версию: stackoverflow.com/questions/24619607/…
Спасибо! Кстати, скачать adb 1.0.31 для всех платформ можно здесь: ftp.mozilla.org/pub/labs/r2d2b2g
То есть, если я правильно понимаю, у меня должна быть возможность восстановить резервную копию любой версии adb, а не только той ранней версии, с которой я сделал резервную копию?

Основываясь на ответе кевеноида, это может зависеть от того, какая версия 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 на телефоне?

Другие ответы о цитируемых аргументах команды точны. Я обнаружил, что если вы избегаете пробелов между аргументами, это работает.

Как это:adb backup -apk\ -shared\ -all\ -system

Возможно, это не решение проблемы OP, но это лучшее решение проблемы @Kevinoid, чем использование более старой версии ADB, которая мне не подошла.
Это дубликат ответа Кевиноида без обоснования. Однако у меня это сработало хорошо, и я предпочитаю использовать \ вместо '
Это решение сработало для меня, нет необходимости понижать adb
Я могу подтвердить подозрение @HunterPerrin, что это другая проблема, потому что я попробовал это первым, и это не решило мою проблему, но во-вторых, когда я перешел на 1.0.31 adb, он начал правильно копировать

Ни один из обходных путей не сработал для меня здесь, и я не хочу понижать версию своих инструментов 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 байт.
@user2284570 да, у меня недавно был подобный опыт (пустой файл ab) на Android 9. Я думаю, что когда-то он был просто сломан (0 байт), но теперь у них есть еще более ограниченный доступ, и он также будет удален, см. ссылку.medium.com/4edL3pBnolb

вздох Мне очень жаль, если это так, и вы, кажется, осторожны, судя по вашим скриншотам и командным строкам, но я обнаружил, к своему огорчению, те же симптомы и подумал, что опубликую на всякий случай, если будущие первооткрыватели сделают это здесь. Оказывается, 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 с включенным паролем резервного копирования рабочего стола.