Próba ściągnięcia pojedynczego pliku przy użyciu
adb pull /data/data/com.corp.appName/files/myFile.txt myFile.txt
zawodzi z
failed to copy '/data/data/com.corp.appName/files/myFile.txt myFile.txt' to 'myFile.txt': Permission denied
pomimo tego debugowanie USB jest włączone na urządzeniu.
Możemy obejść problem archaiczną drogą
adb shell
run-as com.corp.appName
cat files/myFile.txt > myFile.txt
ale jest to nieporęczne dla więcej niż jednego pliku.
Jak mogę ściągnąć katalog /data/data/com.corp.appName/files do mojego MacBooka?
Robienie tego bezpośrednio lub przez tranzyt w `/ storage / sdcard0 / myDir (skąd mogę kontynuować transfer plików Android) jest w porządku.
Dodatkowy komentarz
Może to po prostu bieganie
adb backup -f myFiles com.corp.appName
wygeneruje pliki, których szukam. W takim przypadku szukam sposobu na rozpakowanie / rozpakowanie powstałej kopii zapasowej!
Odpowiedzi:
adb backup zapisze archiwum specyficzne dla Androida:
To archiwum można przekonwertować do formatu tar za pomocą:
Odniesienie:
http://nelenkov.blogspot.ca/2012/06/unpacking-android-backups.html
Wyszukaj „Aktualizuj” pod tym linkiem.
Alternatywnie, użyj narzędzia do wyodrębniania kopii zapasowych systemu Android, aby wyodrębnić pliki z
.ab
pliku kopii zapasowej systemu Android ( ).źródło
bs=24 skip=1
jest znacznie szybszy niżbs=1 skip=24
(w moim systemie 38,6 MB / s vs 1,7 MB / s) :)dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
(z powyższego źródła)dd
poleceniem na moim MacBooku w pracy. Zamiast tego używamjava -jar ./abe.jar unpack data.ab data.tar
. Możesz pobrać narzędzie abe ze strony sourceforge.net/projects/adbextractor/files/?source=navbarandroid:allowBackup="false"
dd if=myAndroidBackup.ab bs=24 skip=1 | openssl zlib -d | tar -x
Miałem ten sam problem, ale rozwiązałem go, wykonując następujące czynności:
Po tym możesz biec
źródło
Oto, co zadziałało dla mnie:
Drukuję bazę danych bezpośrednio do pliku lokalnego.
źródło
adb shell
------ wewnątrz powłokirun-as com.example.test
------ wewnątrz powłokicat ...db > /mnt/sdcard/file.db
------adb pull /mnt/sdcard/file.db .
------ koniec (przepraszam, łamanie linii nie działa)adb shell
nie zadziałało dla mnie, ale zastosowanie tej odpowiedzi i użycieadb exec-out
jej zadziałało!W systemie MacOSX, łącząc odpowiedzi od Calafa i Ollie Forda, zadziałały następujące rozwiązania.
W wierszu poleceń (upewnij się, że adb jest na twojej ścieżce, mój był w ~ / Library / Android / sdk / platform-tools / adb) i po podłączeniu urządzenia z Androidem i trybie debugowania USB uruchom:
Twoje urządzenie z systemem Android poprosi Cię o pozwolenie na wykonanie kopii zapasowej danych. Wybierz „ZAPISZ MOJE DANE”
Poczekaj chwilę.
Kopia zapasowa pliku pojawi się w katalogu, w którym uruchomiłeś adb.
Teraz biegnij:
Teraz masz plik backup.tar, który możesz rozpakować w następujący sposób:
Zobacz wszystkie pliki zapisane w aplikacji.
źródło
adb backup
idd
kroki konwersji tar, nie zapewniają statusu podczas pracy i mogą zająć kilka minut, jeśli masz dużo danych. Bądź cierpliwy!Nowsze wersje Android Studio zawierają Eksplorator plików urządzeń, który uważam za przydatną metodę GUI do pobierania plików z mojego deweloperskiego Nexusa 7.
Musisz upewnić się, że masz włączone debugowanie USB na urządzeniu
Wejdź w interakcję z zawartością urządzenia w oknie eksploratora plików. Kliknij prawym przyciskiem myszy plik lub katalog, aby utworzyć nowy plik lub katalog, zapisz wybrany plik lub katalog na komputerze, prześlij, usuń lub zsynchronizuj. Kliknij dwukrotnie plik, aby otworzyć go w Android Studio.
Android Studio zapisuje otwierane w ten sposób pliki w katalogu tymczasowym poza Twoim projektem. Jeśli dokonasz modyfikacji w pliku otwartym za pomocą Eksploratora plików urządzenia i chcesz zapisać zmiany z powrotem na urządzeniu, musisz ręcznie przesłać zmodyfikowaną wersję pliku do urządzenia.
Pełna dokumentacja
źródło
Możesz użyć tego skryptu powłoki poniżej. Jest w stanie również pobierać pliki z pamięci podręcznej aplikacji, a nie tak jak to
adb backup
narzędzie:Następnie możesz go użyć w ten sposób:
źródło
rm /sdcard/
zastępujesz, na szczęście tak nie jest-rf
.Jeśli używasz komputera Mac i telefonu Samsung, musisz to zrobić (ponieważ
run-as
nie działa na Samsungu izlib
nie działa na Macu)Zrób kopię zapasową katalogu danych aplikacji
adb backup -f /Users/username/Desktop/data.ab com.example
Zostaniesz poproszony o podanie hasła do zaszyfrowania w telefonie, nie wprowadzaj żadnego. Po prostu dotknij „Utwórz kopię zapasową moich danych”. Zobacz Jak wziąć BackUp?
Po pomyślnym utworzeniu kopii zapasowej zobaczysz
data.ab
plik na pulpicie. Teraz musimy przekonwertować to natar
format.Użyj do tego programu Android Backup Extractor . Pobierz | Kod źródłowy
Pobierz go, a zobaczysz
abe.jar
plik. Dodaj to do zmiennej PATH.Wykonaj to, aby wygenerować plik tar :
java -jar abe.jar unpack /Users/username/Desktop/data.ab /Users/username/Desktop/data.tar
Wyodrębnij plik data.tar , aby uzyskać dostęp do wszystkich plików
źródło
data.tar
prostu wyodrębniłem dodata.tar.cpgz
@henryTa odpowiedź jest oparta na moim doświadczeniu z innymi odpowiedziami i komentarzami w odpowiedziach. Mam nadzieję, że pomogę komuś w podobnej sytuacji.
Robię to na OSX przez terminal.
Wcześniej odpowiedź Viniciusa Avellara działała dla mnie świetnie. Tylko przez większość czasu potrzebowałem bazy danych z urządzenia z aplikacji do debugowania.
Dzisiaj miałem przypadek użycia, w którym potrzebowałem wielu prywatnych plików . Skończyło się na dwóch rozwiązaniach, które działały dobrze w tym przypadku.
Oto mój skrypt do pobierania wielu prywatnych plików, którymi podzielę się z Tobą, czytelnikiem, który również bada to niesamowite pytanie;):
Streszczenie: https://gist.github.com/davethomas11/6c88f92c6221ffe6bc26de7335107dd4
Wróć do metody 1 , odszyfrowanie kopii zapasowej za pomocą Android Backup Extractor
Oto kroki, które podjąłem na komputerze Mac, i napotkane problemy:
Najpierw ustawiłem kopię zapasową w kolejce (i ustawiłem hasło do zaszyfrowania kopii zapasowej, wymagało tego moje urządzenie):
Po drugie pobrałem tylko abe.jar stąd: https://sourceforge.net/projects/adbextractor/files/abe.jar/download
Następnie pobiegłem:
W tym momencie pojawił się komunikat o błędzie. Ponieważ moje archiwum jest zaszyfrowane, java wyświetlił mi błąd, którego potrzebowałem, aby zainstalować niektóre biblioteki strategii bezpieczeństwa.
Wreszcie po prostu pobiegłem ( po ponownym uruchomieniu poprzedniego polecenia )
Teraz ważne jest, aby pamiętać, że jeśli możesz po prostu biegać jako kot, jest to znacznie szybsze. Po pierwsze, dostajesz tylko żądane pliki, a nie całą aplikację. Po drugie, im więcej plików (+ dla mnie szyfrowanie), tym wolniejszy jest transfer. Tak więc wiedza o tym, jak zrobić to w ten sposób, jest ważna, jeśli nie masz uruchomionego jako na OSX, ale skrypt powinien być najpierw gotowy do debugowania aplikacji.
Pamiętaj, że właśnie napisałem go dzisiaj i przetestowałem kilka razy, więc informuj mnie o wszelkich błędach!
źródło
Po ustawieniu odpowiednich uprawnień poprzez dodanie następującego kodu:
adb pull
działa zgodnie z życzeniem.zobacz File.setReadable ()
źródło
Zaczynając od skryptu Dave Thomas, byłem w stanie napisać własne rozwiązanie, aby rozwiązać 2 problemy:
To jest mój skrypt, który kopiuje dane aplikacji do sdcard, a następnie je pobiera
źródło
Podobnie jak w przypadku odpowiedzi Tamasa , tutaj jest jedna linijka dla Mac OS X, aby pobrać wszystkie pliki aplikacji z
your.app.id
urządzenia i zapisać je (w tym przypadku)~/Desktop/your.app.id
:-d
do ściągnięcia z emulatoraźródło
Kopia zapasowa danych gry za pomocą apk . Nougat Oneplus 2.
źródło
adb backup -f myapp.ab -apk com.myapp # backup on one device
adb restore myapp.ab # restore to the same or any other device
Tak, dokładnie. Co dziwne, potrzebujesz również pliku, aby
x
ustawić bit. (przynajmniej na Androidzie 2.3)chmod 755
cały czas działał, aby skopiować plik (ale później powinieneś cofnąć uprawnienia, jeśli planujesz nadal korzystać z urządzenia).źródło
możesz to zrobić:
źródło