Walczę od dwóch dni. Mam nadzieję na pomoc.
Napisałem plik wsadowy dla systemu Windows, który zastępuje reklamy Amazon lockscreen obrazami użytkowników na zrootowanym kindle fire hd 7 ", 2013 (kfsowi). Właśnie się dowiedziałem, że spartaczyłem polecenia adb, ponieważ korzystałem z „niezabezpieczonego adb”, więc uzyskiwałem dostęp do su bez wpisywania go w poleceniach adb.
Czego potrzebuję: Aby uruchomić plik wsadowy, potrzebuję jednowierszowe polecenia powłoki adb su do ściągania z / push do / data na tym urządzeniu (lub mogę użyć -> adb -d shell su -c "mount -o remount rw, / data < - w jednym wierszu, po którym następuje pull lub push)
Naprawiłem polecenie ls w ten sposób:
- działało z niezabezpieczonym adb: adb ls "/ data / secureStorageLocation ”
- potrzebowałem: adb shell su -c" ls ./data/securedStorageLocation"”
Teraz potrzebuję tego samego do ciągnięcia i pchania. Problem:
- Przy niezabezpieczonym adb działa to dobrze: adb pull "/ data / secureStorageLocation" "C: / destination"
- Bez niezabezpieczonego adb otrzymuję: zdalny obiekt '/ data / secureStorageLocation /' nie istnieje
Powyższe dzieje się nawet, jeśli po raz pierwszy uruchomię: adb -d shell su -c "mount -o remount rw, / data
Czy ktoś może mi powiedzieć, jak wykonać ciągnięcie i wypychanie za pomocą powłoki adb i su. Próbowałem WIELE permutacji i nie mogę tego rozgryźć. Dziękuję za poświęcony czas.
EDYCJA: polecenie root adb nie uzyskuje roota na tym urządzeniu
Cóż, musisz wykonać kilka poleceń, ponieważ nie sądzę, aby zadziałało w jednym.
Musisz:
-
powłoka adb
-
su
-
cd / data / path / of / file
-
cp / data / path / of / file / copyme / data / local / tmp
-
chown shell.shell / data / local / tmp / copyme
-
exit
-
exit
-
adb pull / data / local / tmp / copyme / destination / copyme
To działa dla mnie za każdym razem.
Dziękuję za tę dyskusję. Doprowadziło mnie to do rozwiązania, które działało wystarczająco dobrze dla mnie podczas tworzenia kopii zapasowej telefonu, który nie zamontował swojego wewnętrznego ext4, zanim zrobię coś drastycznego, próbując to naprawić (najwyraźniej wymaga to uprawnień roota).
Zwróć uwagę, że adb shell
generalnie konfiguruje terminal tekstowy (więc może konwertować pojedyncze znaki końca wiersza na CRLF, manipulując danymi binarnymi, takimi jak obrazy partycji lub archiwa TAR). Chociaż możesz obejść ten problem w wersjach adb dla systemów Unix / Linux (np. Dodać stty raw
do polecenia shelled) lub użyć nowszego adb z opcją exec-out
, w systemie Windows nadal zapisuje CRLF na swoim wyjściu. Sprytną sztuczką jest przekazywanie danych przez kodowanie i dekodowanie base64 (pliki binarne są dostępne masowo dla systemu Windows). Zwróć również uwagę, że błędy lub pełne komunikaty drukowane na stderr
w powłoce kończą się na stdout
programu adb shell
w systemie hosta - więc chcesz odrzuć je po nieuniknionych wstępnych eksperymentach.
Oto idzie:
adb shell "su -c 'cat / dev / block / mmcblk0p25 | base64' 2> / dev / null" | base64 -d > p25
Może być łatwo napisany przez system Windows w celu pokrycia wszystkich partycji (listę można przejrzeć przez ls -la / dev / block /
i / lub przez cat / proc / diskstats
lub cat / proc / partitions
), np .:
for / L% P in (1 , 1,25) do .. \ platform-tools \ adb shell "su -c 'cat / dev / block / mmcblk0p% P | base64' 2> / dev / null" | base64 -d > s3-mmcblk0p% P.img
(Uwaga, aby użyć %% P
w plikach wsadowych CMD lub % P
w powłoce interaktywnej).
Nie zapominaj, że istnieją również partycje mmcblk0boot [01]
i że ogólnie mmcblk0
zawiera wszystkie te partycje w opakowaniu GPT, tak jak każdy inny dysk twardy lub podszywający się pod jeden z nich :)
Aby oszacować rozmiary poszczególnych partycji, możesz spojrzeć na wynik:
fdisk -u -l / dev / block / mmcblk0 *
Niestety nie udało mi się szybko i łatwo wykonać tar cf - mmcblkp0 *
i pobrać zawartość partycji, abym mógł ją przesłać np 7z x -si
i wyślij dane również jako wiele plików w przenośnym jednowierszowym.
Do tar
niektórych plików możesz:
adb shell "su -c 'cd / mnt / data && tar czf - ./ | base64' 2> / dev / null" | base64 -d > s3-mmcblk0p25-userdata.tar.gz
AKTUALIZACJA: Znalazłem więcej sztuczek do przesyłania danych binarnych.
Mam nadzieję, że to pomoże komuś innemu, Jim Klimov
Używam skryptu wsadowego ( extract-db-from-emulator.bat
) poniżej, aby wyciągnąć lokalną bazę danych do hosta:
@@ echo offSET adb_path = "% USERPROFILE% \ AppData \ Local \ Android \ sdk \ platform-tools \" SET application_id = "com.example.myapp" SET root_access_filepath = "/ data / user / 0 /% application_id% / databases / local.db "SET pullable_filepath =" / mnt / sdcard / DCIM / local.db "SET host_directory ="% USERPROFILE% \ Desktop "SET root_command =" su 0 cp "% adb_path% adb.exe shell"% root_command%% root_access_filepath%% pullable_filep % "% adb_path% adb.exe pull% pullable_filepath%% host_directory%
Niekoniecznie będzie to jednowierszowe, ale możesz spróbować wykonać następujące czynności:
- (z powłoką adb, su) Skopiuj pliki do tymczasowo dostępnej lokalizacji na urządzeniu (na przykład
/ sdcard
lub zewnętrzna karta SD) - (z adb pull) Skopiuj te pliki z tymczasowej lokalizacji na swój komputer
- Usuń tymczasowe copy
Możliwa wada: między pierwszym a ostatnim krokiem złośliwa aplikacja, jeśli zdarzy ci się jej "używać", może odczytywać i / lub modyfikować pliki w tymczasowym publicznie dostępnym katalogu. W praktyce jest to mało prawdopodobne.
Widzę błąd z
adb shell "su -c '<your command>'"
su: invalid uid / gid ' -c '
Rozwiązanie jest w Linuksie
adb shell su 0' <your command> '