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:
Potwierdzam, że urządzenie jest rozpoznawane przez ADB za pomocą
adb devices
polecenia i otrzymuję następujące dane wyjściowe:List of devices attached 8e1f368a device
Wydaję polecenie tworzenia kopii zapasowej ADB (szczegóły do naśladowania).
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:
Nie ma znaczenia, co tu robię (szczegóły do naśladowania).
Stukam Back up my dataprzycisk (prawy dolny róg).
Telefon powraca do ekranu głównego i pokazuje mi
Backup starting...
wiadomość, a następnieBackup finished
kilka 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ć -nosystem
przełą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:
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.
źródło
adb backup
działały dobrze,adb restore
zawsze zawodziły). Okazało się, że był to problem z uprawnieniami (producent pomylił się z pamięcią ROM), więcadb restore
nie 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ć.Odpowiedzi:
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 logcat
oglądania dzienników urządzeń zauważyłem, że po wywołaniuadb backup -apk -obb -shared -all -nosystem
pojawiły się podejrzane wpisy dziennika: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ń.źródło
adb backup '-noapk -noshared -all -nosystem'
zamiastadb 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”.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
Następnie otwórz obudowę telefonu
Gdy powłoka jest otwarta, możesz uruchomić
Następnie wyjdź z powłoki, uruchamiając
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:
http://dl-ssl.google.com/android/repository/platform-tools_r20-macosx.zip
http://dl-ssl.google.com/android/repository/platform-tools_r20-linux.zip
źródło
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
źródło
Ż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 backup
na komputerze i przejdź bezpośrednio do urządzenia przezadb shell
.To wywołuje
/system/bin/bu
i zrzuca plik kopii zapasowej do STDOUT (deskryptor pliku # 1). Parametry są takie sameadb 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.
bu
można tam pisać nawet na Androidzie 4.4.2, ponieważ jest to aplikacja systemowa./mnt/extSdCard/backup.ab
pracował dla mnie tak samo jak/sdcard
.źródło
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.
źródło
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...
Teraz odblokuj urządzenie i potwierdź operację tworzenia kopii zapasowej.
... następnie przywróć wszystko do normy.
źródło
OK, tak naprawiłem mój.
Wypróbowałem rozwiązanie Hunter Perrin:
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:
źródło
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.
źródło
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 BackupManagerService
pokazuje, nowszy adb w telefonie też nie obsługuje starego stylu: na02-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
źródło