Kopia zapasowa ADB tworzy plik 0-bajtowy; wyświetla monit o podanie aktualnego hasła kopii zapasowej, mimo że nigdy go nie ustawiłem; „Nie udało się ustawić hasła” dla hasła kopii zapasowej pulpitu

49

Problem:

Za każdym razem, gdy uruchamiam tworzenie kopii zapasowej ADB, w dolnej części ekranu głównego pojawia Backup starting...się komunikat, a następnie komunikat mówiący Backup finished kilka sekund później, mimo że używam 17 GB pamięci urządzenia, i powstaje utworzony plik kopii zapasowej o rozmiarze 0 bajtów. Nie otrzymuję żadnych komunikatów o błędach, żadnych informacji zwrotnych wskazujących, że coś jest nie tak, a co dopiero, co jest nie tak. Wygląda na to, że działa, ale zdecydowanie za szybko, a plik kopii zapasowej jest pusty.

Proces:

  1. Potwierdzam, że urządzenie jest rozpoznawane przez ADB za pomocą adb devicespolecenia i otrzymuję następujące dane wyjściowe:

    List of devices attached
    8e1f368a        device
    
  2. Wydaję polecenie tworzenia kopii zapasowej ADB (szczegóły do ​​naśladowania).

  3. W wierszu polecenia pojawia się następujący komunikat:

    Now unlock your device and confirm the backup operation.
    

    ... i następujący monit w telefonie:

    wprowadź opis zdjęcia tutaj

    Nie ma znaczenia, co tu robię (szczegóły do ​​naśladowania).

  4. Stukam Back up my dataprzycisk (prawy dolny róg).

  5. Telefon powraca do ekranu głównego i pokazuje mi Backup starting...wiadomość, a następnie Backup finishedkilka sekund później. Tworzony jest plik 0-bajtowy o nazwie domyślnej backup.ab lub cokolwiek, co określiłem przełącznikiem -f .

Polecenie tworzenia kopii zapasowej ADB (używane w kroku 2):

Próbowałem wielu kombinacji opcji, od tak prostych jak

adb backup -all

do rzeczy takich jak

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

Próbowałem również dodać -nosystemprzełącznik po przeczytaniu tego i tego , co wskazuje, że próba włączenia kopii zapasowej systemu na nie uruchomionym urządzeniu może spowodować powstanie pliku 0-bajtowego i że tego przełącznika należy użyć. Nie robi to różnicy, proces wciąż kończy się w ciągu kilku sekund, a ja wciąż otrzymuję plik 0-bajtowy.

Pytanie o hasło „Pełna kopia zapasowa” (krok 3):

Jestem pewien, że nigdy wcześniej nie ustawiałem hasła zapasowego. Nigdy wcześniej nie miałem okazji ustawić tego hasła ani uzyskać dostępu do tego ustawienia w jakikolwiek sposób. Próbowałem jednak wszystkich następujących czynności:

  • Pozostawienie obu haseł pustych
  • Pozostaw „bieżące hasło zapasowe” puste i wprowadź nowe hasło w drugim polu
  • Wprowadzanie bieżącego kodu PIN blokady ekranu i wszystkich kodów PIN, których kiedykolwiek używałem jako „bieżącego hasła zapasowego”.
  • Wprowadzając każde hasło, mogę sobie wyobrazić, że bym kiedykolwiek używał do czegoś na tym urządzeniu

We wszystkich przypadkach zachowanie jest dokładnie takie samo, jak opisano w kroku 5. Nie otrzymuję żadnych błędów ani żadnego wskazania, że ​​coś jest nie tak lub moje hasła są nieważne, i nie ma żadnej wskazówki, czy rzeczywiście oczekuje bieżącego hasła, czy też pole powinno pozostać puste. (Zrzut ekranu w tej odpowiedzi i kilku innych forach wsparcia, na które spojrzałem, wydaje się sugerować, że pole „aktualne hasło zapasowe” nie byłoby wyświetlane, jeśli nie ma aktualnego hasła, ale to tylko wnioskowanie; nic nie wyjaśnia, czy aktualne hasło jest wymagane).

Podejrzewam, że hasło, o które prosi, może być „hasłem kopii zapasowej pulpitu” ustawionym w opcjach programisty:

wprowadź opis zdjęcia tutaj

Nigdy wcześniej nie ustawiałem tego hasła. Jeśli spróbuję go ustawić, pojawi się komunikatFailed to set backup password.

Szukając informacji o tym błędzie, spotkałem co najmniej jeden inny przypadek, w którym ktoś, kto miał ten problem, powiedział, że to uniemożliwia mu korzystanie z kopii zapasowej ADB, ale nie sprecyzował, co się stanie, gdy spróbuje użyć ADB utworzyć kopię zapasową.

Większość osób, które otrzymały tę wiadomość, nigdy wcześniej nie ustawiając hasła, twierdzi, że rozwiązaniem było pozostawienie aktualnego hasła pustego, ale próbowałem go w pierwszej kolejności i nie zadziałało. Znalazłem pytanie innej osoby, która napotkała ten problem i była pewna, że ​​wcześniej nie ustawił hasła . Niestety nie wygląda na to, żeby kiedykolwiek znalazł rozwiązanie lub nawet wyjaśnienie.

Niezależnie od tego, czy ADB szuka „hasła kopii zapasowej pulpitu”, czy hasło szyfrowania ADB jest czymś osobnym, zastanawia mnie, dlaczego ADB wymaga wprowadzenia poprzedniego hasła w celu zainicjowania nowej kopii zapasowej. Nie próbuję przywrócić, nadpisać lub w jakikolwiek sposób dostępu do danych zaszyfrowanych wcześniej, więc nawet jeśli hasło szyfrowania kopii zapasowej już wcześniej ustawiony, nie mogę sobie wyobrazić, dlaczego ktoś mógłby pomyśleć, że to dobry pomysł, aby uniemożliwić wykonaj kopię zapasową urządzenia, jeśli nie pamiętasz hasła używanego do szyfrowania kopii zapasowych w przeszłości.

Dodatkowe informacje:

Model: Samsung Galaxy S4 SCH-I545
Wersja jądra: 3.4.0
Wersja systemu operacyjnego: 4.4.2 Wersja
Android SDK Narzędzia: 1.16
Debugowanie USB jest włączone.

Pamiętaj, że moim powodem korzystania z kopii zapasowej ADB jest zrobienie pełnej kopii zapasowej telefonu, aby być bezpiecznym przed zrootowaniem *, aby móc korzystać z narzędzi do tworzenia kopii zapasowych nandroid, takich jak Titanium. Tak więc każda sugestia dotycząca zrootowania mojego telefonu byłaby Catch-22, a nie rozwiązaniem. Nie trzeba dodawać, że przywrócenie ustawień fabrycznych również nie jest rozwiązaniem, ponieważ zniweczyłoby to cały cel wykonywania kopii zapasowej.

Telefon jest skonfigurowany do synchronizacji z serwerami Exchange mojej firmy, a serwer egzekwuje pewne zasady. Myślałem, że urządzenie zostało zaszyfrowane, kiedy po raz pierwszy skonfigurowałem synchronizację z kontem firmowym, ale najwyraźniej nie jest obecnie szyfrowane. W rzeczywistości to właśnie uruchomiło ten łańcuch zdarzeń: dostaję komunikat z informacją, że muszę zaszyfrować urządzenie, aby móc dalej łączyć się z serwerami firmy. Chcę zrobić kopię zapasową nandroid przed szyfrowaniem, która wymaga rootowania i chcę użyć kopii zapasowej ADB przed rootowaniem.


* Tak, jestem świadomy, że Towelroot jest rzekomo bezpieczny, ale wolałbym nie ryzykować i chciałbym rozwiązać lub przynajmniej zrozumieć ten problem, na wypadek, gdyby w przyszłości pojawiły się podobne problemy.

Adi Inbar
źródło
Miałem kilka problemów z ADB na jednym z moich tabletów (zrootowany lub nie, w obu przypadkach), które były podobne (odwrotnie: chociaż adb backupdziałały dobrze, adb restorezawsze zawodziły). Okazało się, że był to problem z uprawnieniami (producent pomylił się z pamięcią ROM), więc adb restorenie był w stanie odczytać pliku kopii zapasowej po przesłaniu go do urządzenia. Było trochę trudne do znalezienia i nie jestem pewien, czy coś podobnego tak naprawdę jest tutaj; ale może warto to sprawdzić.
Izzy
2
Dla tych, którzy skończyliby tutaj z tym samym problemem 0 bajtów: Miałem ten problem, ponieważ raz ustawiłem hasło pulpitu w Ustawieniach i zapomniałem go. Ponieważ urządzenie jest zrootowane, podążyłem za tą odpowiedzią (moją) i wszystko poszło dobrze.
Firelord
Możesz także spojrzeć na: code.google.com/p/android/issues/detail?id=47009 - Jeśli zaszyfrowałeś swój telefon, może być konieczne użycie hasła szyfrującego jako „bieżącego hasła” we wszystkich monitach: albo na ekranie „Pełna kopia zapasowa” lub na ekranie „Hasło kopii zapasowej pulpitu”.
Marco Leogrande,
@AdiInbar, czy kiedykolwiek to rozwiązałeś?
codecowboy
Znalezienie tego zajęło mi trochę czasu. Nie wiem, czy nie użyłem właściwych słów kluczowych, ale tego właśnie potrzebowałem!
Thomas

Odpowiedzi:

31

Krótka odpowiedź

Spróbuj użyć wcześniejszej wersji adb. 1.0.32 nie działało dla mnie, ale 1.0.31 działało.

Długa odpowiedź

Właśnie napotkałem ten problem na Nexusie 5 z CyanogenMod 11 (oparty na Androidzie 4.4), używając bieżącej wersji Narzędzi platformy i ADB (Android Debug Bridge wersja 1.0.32 Wersja eac51f2bb6a8-android).

Podczas adb logcatoglądania dzienników urządzeń zauważyłem, że po wywołaniu adb backup -apk -obb -shared -all -nosystempojawiły się podejrzane wpisy dziennika:

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

Gdzie wydaje się, że urządzenie interpretuje opcje wiersza polecenia jako argumenty nie będące opcjami i powoduje błąd, ponieważ nie są one zainstalowanymi nazwami pakietów. To mnie podejrzewało, że protokół adb lub opcje wywołania polecenia / usługi zmieniły się na urządzeniu względem hosta, więc wypróbowałem starszą wersję adb i voilà, zadziałało.

Wykonałem trochę kopania i natrafiłem na zmianę Użyj Escape_arg w „kopii zapasowej adb” , która powoduje teraz, że wszystkie argumenty są cytowane podczas wywoływania /system/bin/bu backup. To wyjaśnia zachowanie i argumenty z pojedynczym cudzysłowem w komunikacie dziennika. Wydaje się jednak, że nie odpowiada to czasowi wystąpienia błędu. Sugerowałoby to również, że problem jest znacznie bardziej rozpowszechniony, niż się wydaje. Waham się więc nazywać to przyczyną, ale może to być dobry punkt wyjścia do dalszych badań.

Kevinoid
źródło
2
Używanie wcześniejszej wersji (1.0.31) rozwiązało mój problem. To pytanie stackoverflow.com/q/9555337/1741542, a zwłaszcza ta odpowiedź stackoverflow.com/a/23022718/1741542 pomogło mi znaleźć wcześniejszą wersję, np. Platform-tools_r20-linux.zip.
Olaf Dietsche,
Wygląda jednak na to, że nie działa ze wszystkimi modelami. Chociaż bez problemu wykonałem pełną kopię zapasową Samsunga S3 mini (Android 4.2), nie mogłem tego zrobić na tablecie z Androidem 4.0. Próbowałem wszystkich od adb-r10 do adb-r23 (z wyjątkiem adb-r15) bezskutecznie.
Olaf Dietsche
4
Miałem podobny problem z adb 1.0.32 i Nexusem 5 (Android 6). Rozwiązałem to poprzez jawne zacytowanie argumentów kopii zapasowej, tj. Wykonanie adb backup '-noapk -noshared -all -nosystem'zamiast adb backup -noapk -noshared -all -nosystem(w powłoce bash). Bez cudzysłowów otrzymuję komunikaty logcat takie jak: „nieznana flaga kopii zapasowej -all: -nosystem: -noapk”, „brak dostarczonych pakietów kopii zapasowych i ani -shared, ani -all podano”, a na koniec „Finished”.
maxschlepzig
W końcu dostałem też pełną kopię zapasową z Androidem 4.0. Głupio, to był tylko restart tabletu, który mnie uruchomił.
Olaf Dietsche
5
Dzięki! Nawiasem mówiąc, możesz pobrać adb 1.0.31 na wszystkie platformy tutaj: ftp.mozilla.org/pub/labs/r2d2b2g
eWolf
16

Opierając się na odpowiedzi Kevenoid, może zależeć od tego, która wersja adb działa na telefonie.

Możesz dowiedzieć się, jaką wersję telefon działa natywnie, wykonując następujące czynności:

Najpierw dowiedz się, którą wersję uruchamiasz na pulpicie

adb version

Następnie otwórz obudowę telefonu

adb shell

Gdy powłoka jest otwarta, możesz uruchomić

adb version

Następnie wyjdź z powłoki, uruchamiając

exit

Odkryłem, że mój telefon ma wersję 1.0.31, a nie 1.0.32 (jest to notatka samsung 2)

Próbowałem użyć cudzysłowów lub znaków specjalnych, takich jak Hunter, ale żaden z nich nie działał z wiersza poleceń systemu Windows. Jednak obniżenie wersji rozwiązało problem niezgodności między dwiema wersjami.

Udało mi się znaleźć starszą wersję, postępując zgodnie z instrukcjami tutaj: https://stackoverflow.com/a/23022718/1741542

Użyłem linku do pobrania:
http://dl-ssl.google.com/android/repository/platform-tools_r20-windows.zip

Inne platformy:

KroniK907
źródło
Czy jest jakiś sposób na uaktualnienie wersji adb na telefonie?
Bin Wang,
10

Inne odpowiedzi dotyczące cytowanych argumentów poleceń są dokładne. Przekonałem się, że jeśli unikniesz spacji między argumentami, to zadziała.

Lubię to: adb backup -apk\ -shared\ -all\ -system

Hunter Perrin
źródło
To może nie być rozwiązanie problemu OP, ale jest to lepsze rozwiązanie problemu @ Kevinoid niż użycie starszego ADB, który nie działał dla mnie.
Hunter Perrin,
Jest to duplikat odpowiedzi Kevinoida bez uzasadnienia. Jednak zadziałało to dobrze i wolę używać \ do ”
Neil Mayhew
1
To rozwiązanie działało dla mnie, nie trzeba obniżać adb
freethinker
Mogę potwierdzić podejrzenie @HunterPerrin, że jest to inny problem, ponieważ próbowałem tego pierwszego i to nie rozwiązało mojego problemu, ale w drugim poszedłem do 1.0.31 adb zaczęło się poprawnie kopiować
Sirens
7

Żadne z obejść tutaj nie działało i nie chcę obniżać wersji moich narzędzi SDK. Oto, co wymyśliłem: przeskocz adb backupna komputerze i przejdź bezpośrednio do urządzenia przez 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

To wywołuje /system/bin/bui zrzuca plik kopii zapasowej do STDOUT (deskryptor pliku # 1). Parametry są takie same adb backup <params>-> bu 1 backup <params>. Dane wyjściowe są przekierowywane do pliku na urządzeniu, a następnie można je wyciągnąć jak dowolny plik.

Jedyną wadą jest to, że nie można wykonać pełnej kopii zapasowej, jeśli urządzenie jest zapełnione w ponad połowie. Można to obejść, jeśli masz zewnętrzne gniazdo SdCard. bumożna tam pisać nawet na Androidzie 4.4.2, ponieważ jest to aplikacja systemowa. /mnt/extSdCard/backup.abpracował dla mnie tak samo jak /sdcard.

TWiStErRob
źródło
4

westchnienie Naprawdę przepraszam, jeśli tak jest, i wydaje się, że ostrożnie oceniasz swoje zrzuty ekranu i wiersze poleceń, ale ku mojemu rozczarowaniu odkryłem te same objawy i pomyślałem, że opublikuję na wypadek, gdyby przyszli odkrywcy się tutaj dostali. Okazuje się, że adb jest bardzo wybredny w kwestii pojedynczych lub podwójnych myślników. Dla mnie podwójne myślniki dokładnie odtworzyły ten przypadek: ten sam monit w telefonie, ten sam plik 0-bajtowy. Pojedyncze myślniki, mimo że długie nazwy argumentów działały jak urok.

W razie potrzeby mój telefon to Samsung Galazy Note 2 AT&T SGH-i317 z systemem Android 5.1 / Cyanogenmod 12.1.

Matt
źródło
2
Nie rozumiem, czy zamiast tego należy zamieścić to jako odpowiedź czy komentarz. OP pokazuje, że używa pojedynczego myślnika, a nie podwójnego myślnika, więc Twoja odpowiedź prawdopodobnie nie trafiła w sedno. Przyznaję, że ta odpowiedź ma charakter informacyjny (wartość dodana), ale wydaje się, że nie odpowiada na problem OP.
Andrew T.
To rozwiązało mój problem.
John Freeman,
Proszę zamieścić swoje aktualne wiersze poleceń.
RoboJ1M,
2

Musisz wykonać polecenie adb backup w wersji adb 1.0.31.

W przypadku systemu Windows:

Log:

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

serwer adb jest nieaktualny. zabicie...

  • demon uruchomił się pomyślnie *

Teraz odblokuj urządzenie i potwierdź operację tworzenia kopii zapasowej.

... następnie przywróć wszystko do normy.

eee
źródło
1

OK, tak naprawiłem mój.

Wypróbowałem rozwiązanie Hunter Perrin:

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

Ale po prostu wrócił natychmiast, bez błędu, bez ekranu zapasowego w telefonie.

Dzięki próbom i błędom zadziałało to dla mnie:

adb backup -all\
RoboJ1M
źródło
1

Myślę, że mam rozwiązanie dla osób korzystających z wersji 1.0.32:

wprowadź hasło, gdy pojawi się monit na ekranie Androida

Pomimo faktu, że mówi, że użyje domyślnego hasła, jeśli nie wpiszesz żadnego, wierzę, że tak nie jest i adb 1.0.32 może nie pozwala na tworzenie niezaszyfrowanych kopii zapasowych.

Podanie hasła działało dla mnie, a potem użyłem „Android Backup Extractor” (Warning Sourceforge) i „Java Cryptography Extension (JCE) Unlimited Strength Jur jurysdykcja”, aby wyodrębnić je do pliku tar.

Catskul
źródło
1

Wpadłem na odwrotny problem: 1.0.31 z nowszym telefonem (Android 7) również zawodzi. 1.0.31 używa: jako separatora podczas przekazywania argumentów do telefonu. Jak adb logcat -s BackupManagerServicepokazuje, nowszy adb w telefonie też nie obsługuje starego stylu: na 02-19 01:59:44.330 1100 9830 W BackupManagerService: Unknown package com.gameloft.android.ANMP.GloftPOHM:-apk, skipping szczęście nowszy adb akceptuje spacje również jako separatory, więc ujęcie argumentów w podwójnych cudzysłowach działa, np .: adb.exe backup "com.gameloft.android.ANMP.GloftPOHM -apk" -f game-backup.ab

kosić
źródło