ADB-Sicherung erstellt eine 0-Byte-Datei. Fordert zur Eingabe des aktuellen Sicherungskennworts auf, obwohl ich kein Kennwort festgelegt habe. "Kennwort konnte nicht festgelegt werden" für das Desktop-Sicherungskennwort

49

Das Problem:

Jedes Mal, wenn ich ADB Backup ausführe, wird am unteren Rand des Startbildschirms Backup starting...eine Meldung gefolgt von einer Meldung angezeigt , die Backup finished einige Sekunden später angezeigt wird , obwohl ich 17 GB Gerätespeicher verwende und die resultierende Sicherungsdatei erstellt wird mit einer Größe von 0 Bytes. Ich erhalte keine Fehlermeldungen, keine Rückmeldungen, die darauf hinweisen, dass etwas nicht stimmt, geschweige denn, was nicht stimmt. Es scheint zu funktionieren, aber viel zu schnell, und die Sicherungsdatei ist leer.

Der Prozess:

  1. Ich bestätige, dass das Gerät von ADB mit dem adb devicesBefehl erkannt wird , und erhalte die folgende Ausgabe:

    List of devices attached
    8e1f368a        device
    
  2. Ich gebe den ADB-Sicherungsbefehl aus (Details folgen).

  3. Ich erhalte die folgende Meldung an der Eingabeaufforderung:

    Now unlock your device and confirm the backup operation.
    

    ... und die folgende Eingabeaufforderung am Telefon:

    Bildbeschreibung hier eingeben

    Es macht keinen Unterschied, was ich hier mache (Details folgen).

  4. Ich tippe auf den Back up my dataKnopf (rechte untere Ecke).

  5. Das Telefon kehrt zum Startbildschirm zurück und zeigt mir die Backup starting...Nachricht und Backup finishedeinige Sekunden später die Nachricht. Es wird eine 0-Byte-Datei erstellt, die entweder den Namen backup.ab oder das hat, was ich mit der Option -f angegeben habe .

Der ADB-Sicherungsbefehl (in Schritt 2 verwendet):

Ich habe mehrere Kombinationen von Optionen ausprobiert, von so einfach wie

adb backup -all

zu Dingen wie

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

Ich habe auch versucht, den -nosystemSchalter hinzuzufügen , nachdem ich dies und das gelesen habe , was darauf hinweist, dass der Versuch, eine Systemsicherung auf einem nicht gerooteten Gerät einzuschließen, zu einer 0-Byte-Datei führen kann und dass dieser Schalter verwendet werden muss. Es macht keinen Unterschied, der Vorgang ist immer noch in wenigen Sekunden abgeschlossen und ich erhalte immer noch eine 0-Byte-Datei.

Die Eingabeaufforderung für das Kennwort "Vollständige Sicherung" (Schritt 3):

Ich bin mir ziemlich sicher, dass ich noch nie ein Sicherungskennwort festgelegt habe. Ich hatte noch nie die Gelegenheit, dieses Passwort festzulegen oder auf diese Einstellung zuzugreifen. Ich habe jedoch Folgendes ausprobiert:

  • Lassen Sie beide Passwörter leer
  • Lassen Sie das "aktuelle Sicherungskennwort" leer und geben Sie ein neues Kennwort in das zweite Feld ein
  • Eingabe der aktuellen Bildschirmsperr-PIN und aller PINs, die ich in der Vergangenheit als "aktuelles Sicherungskennwort" verwendet habe.
  • Wenn ich jedes Passwort eingebe, fällt mir ein, dass ich es jemals für irgendetwas auf diesem Gerät verwendet hätte

In allen Fällen ist das Verhalten genau das gleiche wie in Schritt 5 beschrieben. Ich erhalte keine Fehler oder Hinweise darauf, dass etwas nicht stimmt oder dass meine Passwörter ungültig sind, und keinen Hinweis darauf, ob tatsächlich ein aktuelles Passwort erwartet wird oder ob dies der Fall ist Das Feld sollte leer bleiben. (Der Screenshot in dieser Antwort und in mehreren anderen Support-Foren, die ich mir angesehen habe, deutet anscheinend darauf hin, dass das Feld "Aktuelles Backup-Passwort" nicht angezeigt wird, wenn kein aktuelles Passwort vorhanden ist. Dies ist jedoch nur eine Schlussfolgerung. Nichts macht klar, ob ein aktuelles Passwort wird tatsächlich benötigt.)

Ich vermute, dass das Kennwort, nach dem gefragt wird, das in den Entwickleroptionen festgelegte "Desktop-Sicherungskennwort" ist:

Bildbeschreibung hier eingeben

Ich habe dieses Passwort noch nie festgelegt. Wenn ich versuche, einen einzurichten, wird eine Meldung angezeigtFailed to set backup password.

Bei der Suche nach Informationen zu diesem Fehler bin ich auf mindestens einen anderen Fall gestoßen, in dem jemand, der dieses Problem hatte, sagte, dass dies ihn daran hinderte, ADB-Backup zu verwenden, aber er wusste nicht genau, was passiert, wenn er versucht, ADB zu verwenden Sicherung.

Die meisten Leute, die diese Nachricht erhalten haben und noch nie zuvor ein Passwort festgelegt haben, gaben an, dass das aktuelle Passwort leer bleiben sollte, aber ich habe das zuerst versucht und es hat nicht funktioniert. Ich habe eine Frage von einer anderen Person gefunden, die auf dieses Problem gestoßen ist und sicher war, dass sie das Passwort noch nicht festgelegt hat . Leider sieht es nicht so aus, als hätte er jemals eine Lösung oder gar eine Erklärung bekommen.

Unabhängig davon, ob ADB nach dem "Desktop-Sicherungskennwort" sucht oder ob das ADB-Verschlüsselungskennwort etwas anderes ist, ist es mir ein Rätsel, warum ADB Sie zur Initiierung einer neuen Sicherung zur Eingabe eines vorherigen Kennworts auffordern würde. Ich versuche nicht , wiederherzustellen, zu überschreiben oder in irgendeiner Weise Zugang zuvor Daten verschlüsselt, so dass selbst wenn ein Verschlüsselungskennwort für eine Sicherung hatte zuvor eingestellt worden ist , kann ich mir nicht vorstellen , warum jemand denke , es wäre eine gute Idee, Sie zu verhindern , dass Sichern Sie Ihr Gerät, wenn Sie sich nicht erinnern, welches Kennwort Sie in der Vergangenheit zum Verschlüsseln von Sicherungen verwendet haben.

Zusätzliche Information:

Modell: Samsung Galaxy S4 SCH-I545
Kernel-Version: 3.4.0
Betriebssystem-Version: 4.4.2
Android SDK Tools-Version: 1.16
USB-Debugging ist aktiviert.

Beachten Sie, dass ich für die Verwendung von ADB-Backups aus Sicherheitsgründen ein vollständiges Backup meines Telefons erstellen muss, bevor ich es roote *, damit ich Nandroid-Backup-Tools wie Titanium-Backup verwenden kann. Jeder Vorschlag, der das Rooten meines Telefons beinhaltet, wäre ein Catch-22, keine Lösung. Ein Zurücksetzen auf die Werkseinstellungen ist natürlich auch keine Lösung, da dies den gesamten Zweck der Durchführung der Sicherung zunichte machen würde.

Das Telefon ist für die Synchronisierung mit den Exchange-Servern meines Unternehmens eingerichtet, und der Server setzt einige Richtlinien durch. Ich hatte gedacht, dass das Gerät verschlüsselt war, als ich die Synchronisierung mit dem Unternehmenskonto eingerichtet habe, aber anscheinend ist es derzeit nicht verschlüsselt. Genau das hat diese Ereigniskette in Gang gesetzt: Ich erhalte die Meldung, dass ich das Gerät verschlüsseln muss, um weiterhin eine Verbindung zu den Unternehmensservern herstellen zu können. Ich möchte vor dem Verschlüsseln ein Nandroid-Backup erstellen, für das Rooting erforderlich ist, und ich möchte vor dem Rooting ADB-Backup verwenden.


* Ja, ich bin mir bewusst, dass Towelroot als sicher eingestuft wird, aber ich gehe lieber kein Risiko ein und möchte dieses Problem lösen oder zumindest verstehen, falls in Zukunft Probleme auftreten.

Adi Inbar
quelle
Ich hatte mehrere Probleme mit ADB auf einem meiner Tablets (verwurzelt oder nicht, in beiden Fällen), die ähnlich waren (genau umgekehrt: während es gut adb backupfunktionierte, adb restoreimmer fehlgeschlagen). Es stellte sich heraus, dass es sich um ein Berechtigungsproblem handelte (der Hersteller hat das ROM beschädigt), sodass adb restoredie Sicherungsdatei nach der Übertragung auf das Gerät nicht gelesen werden konnte. War etwas schwierig zu finden, und ich bin mir nicht sicher, ob hier wirklich etwas Ähnliches der Fall ist. aber es könnte sich lohnen zu überprüfen.
Izzy
2
Für diejenigen, die hier mit dem gleichen 0-Byte-Problem enden würden: Ich hatte dieses Problem, weil ich einmal ein Desktop-Passwort unter Einstellungen eingerichtet und es vergessen habe. Da das Gerät gerootet ist, folgte ich dieser Antwort (meiner) und alles lief gut.
Firelord
Möglicherweise lesen Sie auch: code.google.com/p/android/issues/detail?id=47009 - Wenn Sie Ihr Telefon verschlüsselt haben, müssen Sie möglicherweise Ihr Verschlüsselungskennwort als "aktuelles Kennwort" in allen Eingabeaufforderungen verwenden: entweder im Bildschirm "Vollständige Sicherung" oder im Bildschirm "Desktop-Sicherungskennwort".
Marco Leogrande
@AdiInbar hast du das schon mal gelöst?
Codecowboy
Es hat tatsächlich eine Weile gedauert, bis ich das gefunden habe. Ich weiß nicht, ob ich nicht die richtigen Keywords verwendet habe, aber genau das habe ich gebraucht!
Thomas

Antworten:

31

Kurze Antwort

Versuchen Sie es mit einer früheren Version von adb. 1.0.32 hat bei mir nicht funktioniert, 1.0.31 jedoch.

Lange Antwort

Ich bin gerade auf einem Nexus 5 gestoßen, auf dem CyanogenMod 11 (basierend auf Android 4.4) mit der aktuellen Version der Platform Tools und ADB (Android Debug Bridge Version 1.0.32 Revision eac51f2bb6a8-android) ausgeführt wird.

Beim adb logcatBetrachten der Geräteprotokolle stellte ich fest, dass nach dem Aufrufen adb backup -apk -obb -shared -all -nosystemeinige verdächtige Protokolleinträge vorhanden waren:

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

Wo es scheint, dass das Gerät die Befehlszeilenoptionen als Nichtoptionsargumente interpretiert und einen Fehler erzeugt, weil sie keine installierten Paketnamen sind. Dies ließ mich vermuten, dass sich das ADB-Protokoll oder die Befehls- / Dienstaufrufoptionen auf dem Gerät im Verhältnis zum Host geändert hatten, sodass ich eine ältere Version von ADB und Voila ausprobierte. Es funktionierte.

Ich habe ein bisschen gegraben und bin auf die Änderung von Use escape_arg in "adb backup" gestoßen , bei der nun alle Argumente beim Aufrufen in einfache Anführungszeichen gesetzt werden /system/bin/bu backup. Dies erklärt das Verhalten und die in Anführungszeichen gesetzten Argumente in der Protokollnachricht. Es scheint jedoch nicht mit dem Zeitpunkt übereinzustimmen, zu dem der Fehler aufgetreten ist. Es würde auch darauf hindeuten, dass das Problem viel weiter verbreitet ist, als es zu sein scheint. Daher zögere ich, dies als Ursache zu bezeichnen, aber es könnte ein guter Ausgangspunkt für weitere Untersuchungen sein.

Kevinoid
quelle
2
Die Verwendung einer früheren Version (1.0.31) löste mein Problem. Diese Frage stackoverflow.com/q/9555337/1741542 und insbesondere diese Antwort stackoverflow.com/a/23022718/1741542 haben mir geholfen, eine frühere Version zu finden, z. B. platform-tools_r20-linux.zip.
Olaf Dietsche
Scheint aber nicht bei allen Modellen zu funktionieren. Während ich problemlos ein vollständiges Backup eines Samsung S3 mini (Android 4.2) erstellt habe, konnte ich dies mit einem Tablet unter Android 4.0 nicht tun. Ich habe alles von adb-r10 bis adb-r23 (außer adb-r15) ohne Erfolg versucht.
Olaf Dietsche
4
Ich hatte ein ähnliches Problem mit ADB 1.0.32 und einem Nexus 5 (Android 6). Ich habe dies durch explizites Zitieren der Sicherungsargumente gelöst, dh Ausführen adb backup '-noapk -noshared -all -nosystem'statt adb backup -noapk -noshared -all -nosystem(innerhalb einer Bash-Shell). Ohne die Anführungszeichen erhalte ich folgende logcat-Meldungen: 'unknown backup flag -all: -nosystem: -noapk', 'keine Sicherungspakete geliefert und weder -shared noch -all übergeben' und schließlich 'Finished'.
maxschlepzig
Endlich habe ich auch eine Vollsicherung mit Android 4.0. Dumm von mir, es war nur ein Neustart des Tablets, der mich zum Laufen brachte.
Olaf Dietsche
5
Vielen Dank! Übrigens können Sie adb 1.0.31 für alle Plattformen hier herunterladen: ftp.mozilla.org/pub/labs/r2d2b2g
eWolf
16

Aufbauend auf der Antwort von kevenoid kann es davon abhängen, welche Version von adb auf dem Telefon ausgeführt wird.

Um herauszufinden, welche Version des Telefons nativ ausgeführt wird, gehen Sie wie folgt vor:

Finden Sie zuerst heraus, welche Version Sie auf Ihrem Desktop ausführen

adb version

Öffnen Sie dann die Shell auf Ihrem Telefon

adb shell

Sobald die Shell geöffnet ist, können Sie ausführen

adb version

Beenden Sie dann die Shell, indem Sie ausführen

exit

Ich habe festgestellt, dass auf meinem Telefon Version 1.0.31 und nicht 1.0.32 ausgeführt wird (es ist ein Samsung Note 2).

Ich habe versucht, Anführungszeichen oder Fluchtzeichen wie Hunter zu verwenden, aber keines davon funktionierte über die Windows-Befehlszeile. Durch ein Downgrade wurde jedoch das Inkompatibilitätsproblem zwischen den beiden Versionen behoben.

Ich konnte die ältere Version anhand der Anweisungen hier finden: https://stackoverflow.com/a/23022718/1741542

Der von mir verwendete Download-Link war:
http://dl-ssl.google.com/android/repository/platform-tools_r20-windows.zip

Andere Plattformen:

KroniK907
quelle
Gibt es eine Möglichkeit, die ADB-Version auf dem Telefon zu aktualisieren?
Bin Wang
10

Die anderen Antworten zu den angegebenen Befehlsargumenten sind korrekt. Ich habe festgestellt, dass es funktioniert, wenn Sie den Leerzeichen zwischen den Argumenten entkommen.

So was: adb backup -apk\ -shared\ -all\ -system

Hunter Perrin
quelle
Dies ist möglicherweise keine Lösung für das OP-Problem, aber eine bessere Lösung für das @ Kevinoid-Problem als die Verwendung einer älteren ADB, die bei mir nicht funktioniert hat.
Hunter Perrin
Dies ist ein Duplikat von Kevinoids Antwort ohne Begründung. Es hat jedoch gut funktioniert und ich bevorzuge die Verwendung von \ to '
Neil Mayhew
1
Diese Lösung funktionierte für mich, keine Notwendigkeit zu degradieren adb
Freigeist
Ich kann den Verdacht von @HunterPerrin bestätigen, dass dies ein anderes Problem ist, da ich das erste Mal versucht habe und es mein Problem nicht gelöst hat, aber das zweite Mal ging ich zu 1.0.31 und es begann richtig zu kopieren
Sirenen
7

Keine der Problemumgehungen hat hier für mich funktioniert, und ich möchte meine SDK-Tools nicht downgraden. Folgendes habe ich mir ausgedacht: Überspringe adb backupden Computer und gehe über direkt zum Gerät 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

Dadurch wird /system/bin/budie Sicherungsdatei aufgerufen und auf STDOUT (Dateideskriptor Nr. 1) abgelegt. Parameter sind gleich adb backup <params>-> bu 1 backup <params>. Die Ausgabe wird in eine Datei auf dem Gerät umgeleitet und kann dann wie jede andere Datei abgerufen werden.

Der einzige Nachteil ist, dass Sie keine vollständige Sicherung durchführen können, wenn Ihr Gerät mehr als halb voll ist. Dies kann umgangen werden, wenn Sie einen externen SdCard-Steckplatz haben. bukann dort auch auf Android 4.4.2 schreiben, da es sich um eine System-App handelt. /mnt/extSdCard/backup.abhat bei mir genauso gearbeitet wie /sdcard.

TWiStErRob
quelle
4

Seufz, es tut mir wirklich leid, wenn dies der Fall ist, und Sie scheinen nach Ihren Screenshots und Befehlszeilen vorsichtig zu urteilen, aber ich habe zu meinem Leidwesen die gleichen Symptome festgestellt und dachte, ich poste, nur für den Fall, dass zukünftige Entdecker es hier schaffen. Es stellt sich heraus, dass adb in Bezug auf einfache und doppelte Striche in seinen Optionen sehr wählerisch ist. Für mich haben doppelte Striche genau diesen Fall wiedergegeben: gleiche Eingabeaufforderung auf dem Telefon, gleiche 0-Byte-Datei. Einzelne Striche , obwohl es lange Argumentnamen gibt, wirkten wie ein Zauber.

Falls es darauf ankommt, ist mein Handy ein Samsung Galazy Note 2 AT & T SGH-i317 mit Android 5.1 / Cyanogenmod 12.1.

Matt
quelle
2
Ich bin ein bisschen verwirrt, ob dies stattdessen als Antwort oder Kommentar gepostet werden soll. OP zeigt, dass er Single-Dash und nicht Double-Dash verwendet, sodass Ihre Antwort wahrscheinlich die Marke verfehlt hat. Ich gebe zu, dass diese Antwort informativ ist (Zusatznutzen), aber sie scheint das Problem von OP nicht zu beantworten.
Andrew T.
Das hat mein Problem gelöst.
John Freeman
Bitte geben Sie Ihre aktuellen Befehlszeilen ein.
RoboJ1M
2

Sie müssen den Befehl adb backup für adb Version 1.0.31 ausführen.

Für Windows habe ich:

Log:

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

Der ADB-Server ist veraltet. Tötung...

  • Daemon erfolgreich gestartet

Entsperren Sie nun Ihr Gerät und bestätigen Sie den Sicherungsvorgang.

... dann stellen Sie alles wieder auf normal.

eee
quelle
1

OK, so habe ich meins repariert.

Ich habe Hunter Perrins Lösung ausprobiert:

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

Es wurde jedoch sofort ohne Fehler und ohne Sicherungsbildschirm auf dem Telefon zurückgegeben.

Durch Versuch und Irrtum funktionierte dies für mich:

adb backup -all\
RoboJ1M
quelle
1

Ich denke, ich habe eine Lösung für diejenigen, die 1.0.32 verwenden:

Geben Sie ein Passwort ein, wenn Sie auf dem Android-Bildschirm dazu aufgefordert werden

Trotz der Tatsache, dass es besagt, dass das Standardkennwort verwendet wird, wenn Sie keines eingeben, glaube ich, dass dies nicht der Fall ist, und ADB 1.0.32 ermöglicht möglicherweise nicht die Erstellung unverschlüsselter Sicherungen.

Die Eingabe eines Passworts hat bei mir funktioniert, und dann habe ich "Android Backup Extractor" (Warnung Sourceforge) und "Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy" verwendet , um es in eine TAR-Datei zu extrahieren.

Catskul
quelle
1

Ich bin auf das umgekehrte Problem gestoßen: 1.0.31 mit einem neueren Telefon (Android 7) schlägt ebenfalls fehl. 1.0.31 verwendet: als Trennzeichen, wenn Argumente an das Telefon übergeben werden. Wie adb logcat -s BackupManagerServicegezeigt, kann die neuere adb auf dem Telefon auch nicht mit dem alten Stil umgehen: 02-19 01:59:44.330 1100 9830 W BackupManagerService: Unknown package com.gameloft.android.ANMP.GloftPOHM:-apk, skipping Glücklicherweise akzeptiert die neuere adb auch Leerzeichen als Trennzeichen, so dass das Einschließen der Argumente in doppelte Anführungszeichen funktioniert, zB: adb.exe backup "com.gameloft.android.ANMP.GloftPOHM -apk" -f game-backup.ab

mähen
quelle