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

49

Проблема:

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

Процесс:

  1. Я подтверждаю, что устройство распознает устройство с помощью 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 версии Инструменты: 1,16
отладки USB включен.

Обратите внимание, что моя причина для использования резервного копирования ADB - сделать полную резервную копию моего телефона, чтобы быть в безопасности, прежде чем рутировать его *, чтобы я мог использовать инструменты резервного копирования nandroid, такие как резервное копирование Titanium. Таким образом, любое предложение, касающееся рутирования моего телефона, будет Catch-22, а не решением. Излишне говорить, что сброс к заводским настройкам также не является решением, так как он лишил бы цели выполнять резервное копирование.

Телефон будет настроен на синхронизацию с серверами моей компании Exchange, и есть некоторые политики насильственных сервера. Я думал, что устройство было зашифровано, когда я впервые настроил синхронизацию с учетной записью компании, но, очевидно, в настоящее время оно не зашифровано. Фактически, именно это и привело в движение эту цепочку событий: я получаю сообщение о том, что мне нужно зашифровать устройство, чтобы продолжить подключение к серверам компании. Я хочу сделать резервную копию Nandroid перед шифрованием, которое требует рутирования, и я хочу использовать резервное копирование ADB перед рутированием.


* Да, я знаю, что Towelroot считается безопасным, но я бы предпочел не рисковать, и я хотел бы решить или, по крайней мере, понять эту проблему в случае возникновения проблем в будущем.

Ади Инбар
источник
У меня было несколько проблем с ADB на одном из моих планшетов (укорененных или нет, в обоих случаях), которые были похожи (как раз наоборот: хотя adb backupработали нормально, adb restoreвсегда терпели неудачу). Оказалось, что это была проблема с правами доступа (производитель перепутался с ПЗУ), поэтому adb restoreне смог прочитать файл резервной копии после его передачи на устройство. Было немного сложно найти, и я не уверен, действительно ли здесь что-то похожее; но это может стоить проверить.
Иззи
2
Для тех, кто оказался бы здесь с той же проблемой 0 байтов: у меня была эта проблема, потому что я однажды установил пароль рабочего стола в Настройках и забыл его. Поскольку устройство рутировано, я следовал этому ответу (моему) и все прошло хорошо.
Повелитель огня
Вы также можете посмотреть по адресу: code.google.com/p/android/issues/detail?id=47009. Если вы зашифровали свой телефон, вам может понадобиться использовать пароль шифрования в качестве «текущего пароля» во всех запросах: либо на экране «Полная резервная копия» или «Пароль для резервного копирования рабочего стола».
Марко Леогранде
@AdiInbar вы когда-нибудь решали это?
codecowboy
На самом деле мне понадобилось время, чтобы найти это. Я не знаю, правильно ли я использовал ключевые слова, но это именно то, что мне было нужно!
Томас

Ответы:

31

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

Попробуйте использовать более раннюю версию ADB. 1.0.32 не работал для меня, но 1.0.31 работал.

Длинный ответ

Я только что столкнулся с этой проблемой на Nexus 5 под управлением CyanogenMod 11 (на базе Android 4.4) с использованием текущей версии Platform Tools и ADB (Android Debug Bridge версия 1.0.32 Revision 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 и voilà, она работала.

Я немного покопался и наткнулся на изменение Использовать escape_arg в «резервной копии adb» , которое теперь приводит к тому, что все аргументы заключаются в одинарные кавычки при вызове /system/bin/bu backup. Это объясняет поведение и аргументы в одинарных кавычках в сообщении журнала. Однако оно не соответствует времени, когда вы столкнулись с ошибкой. Это также предполагает, что проблема будет гораздо более распространенной, чем кажется. Поэтому я не решаюсь назвать это причиной, но это может стать хорошей отправной точкой для дальнейшего расследования.

Kevinoid
источник
2
Использование более ранней версии (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) безуспешно.
Олаф Дитче
4
У меня была похожая проблема с 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 не передаются» и, наконец, «Finished».
maxschlepzig
Я наконец получил полную резервную копию с Android 4.0 тоже. Глупый меня, это была просто перезагрузка планшета, которая заставила меня работать.
Олаф Дитче
5
Спасибо! Кстати, вы можете скачать ADB 1.0.31 для всех платформ здесь: ftp.mozilla.org/pub/labs/r2d2b2g
eWolf
16

Основываясь на ответе kevenoid, это может зависеть от того, какая версия ADB работает на телефоне.

Вы можете узнать, какая версия телефона работает изначально, выполнив следующие действия:

Сначала выясните, какую версию вы используете на своем рабочем столе

adb version

Затем откройте оболочку на вашем телефоне

adb shell

Когда оболочка открыта, вы можете запустить

adb version

Затем выйдите из оболочки, запустив

exit

Я обнаружил, что мой телефон работает под управлением версии 1.0.31, а не 1.0.32 (это samsung note 2)

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

Мне удалось найти более старую версию, следуя инструкциям здесь: https://stackoverflow.com/a/23022718/1741542

Ссылка для скачивания, которую я использовал, была:
http://dl-ssl.google.com/android/repository/platform-tools_r20-windows.zip

Другие платформы:

KroniK907
источник
Есть ли способ обновить версию adb на телефоне?
Бин Ван
10

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

Нравится: adb backup -apk\ -shared\ -all\ -system

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

Ни один из обходных путей для меня здесь не сработал, и я не хочу понижать свои инструменты 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.

TWiStErRob
источник
4

вздох, мне очень жаль, если это так, и вы, кажется, осторожны, судя по вашим скриншотам и командным строкам, но я обнаружил, к своему огорчению, те же симптомы и подумал, что опубликую на всякий случай, если будущие первооткрыватели сделают это здесь. Оказывается, adb очень требователен к одинарным или двойным тире в своих настройках. Для меня двойные тире точно воспроизвели этот случай: та же подсказка на телефоне, тот же 0-байтовый файл. Одиночные тире, даже если есть длинные имена аргументов, работающие как шарм.

В случае, если это имеет значение, мой телефон является Samsung Galazy Note 2 AT & T SGH-i317 под управлением Android 5.1 / Cyanogenmod 12.1.

Matt
источник
2
Я немного путаюсь, стоит ли это публиковать как ответ или комментарий. ОП показывает, что он использует одинарную, а не двойную черту, поэтому ваш ответ, вероятно, не прошел мимо. Я признаю, что этот ответ является информативным (дополнительная ценность), но, похоже, не отвечает на вопрос OP.
Андрей Т.
Это решило мою проблему.
Джон Фриман
Пожалуйста, разместите ваши фактические командные строки.
RoboJ1M
2

Вам нужно выполнить команду резервного копирования adb в версии adb 1.0.31.

Для окон я сделал:

Журнал:

$ adb backup -apk -obb -shared -all -system -f bckp.ab

Сервер ADB устарел. убийство ...

  • демон успешно запущен *

Теперь разблокируйте устройство и подтвердите операцию резервного копирования.

... затем верните все в нормальное состояние.

еее
источник
1

ОК, так я исправил свой.

Я попробовал решение Хантера Перрина:

adb backup -apk\ -shared\ -all\ -system

Но он сразу же вернулся без ошибок, без экрана резервного копирования на телефоне.

Методом проб и ошибок это сработало для меня:

adb backup -all\
RoboJ1M
источник
1

Я думаю, у меня есть решение для тех, кто использует 1.0.32:

введите пароль при появлении запроса на экране Android

Несмотря на то, что в нем говорится, что он будет использовать пароль по умолчанию, если вы его не введете, я полагаю, что это не так, и adb 1.0.32, возможно, не позволяет создавать незашифрованные резервные копии.

Ввод пароля работал для меня, а затем я использовал «Извлечение резервной копии Android» (Warning Sourceforge) и «Политику юрисдикции неограниченного расширения Java Cryptography Extension (JCE)» для извлечения его в файл tar.

Catskul
источник
1

Я столкнулся с обратной проблемой: 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

косить
источник