Sto lottando da due giorni. Spero in aiuto qui.
Ho scritto un file batch di Windows che sostituisce gli annunci di blocco schermo di Amazon con le immagini degli utenti su kindle fire hd 7 ", 2013 (kfsowi) rooted . Ho appena imparato che ho sbagliato i comandi adb perché stavo eseguendo "adb insecure" quindi stavo ottenendo l'accesso su senza scriverlo nei comandi adb.
Di cosa ho bisogno: per eseguire in file batch, ho bisogno comandi di una riga adb shell su per eseguire il pull da / push a / data su questo dispositivo. (Oppure potrei usare -> adb -d shell su -c "mount -o remount rw, / data < - su una riga seguita da pull o push)
Ho corretto un comando ls come questo:
- questo ha funzionato con adb insecure: adb ls "/ data / securedStorageLocation "
- quello di cui avevo bisogno era: adb shell su -c" ls ./data/securedStorageLocation"”
Ora ho bisogno dello stesso per tirare e spingere. Il problema:
- Con adb insecure, funziona bene: adb pull "/ data / securedStorageLocation" "C: / destination"
- Senza adb insecure ottengo: remote l'oggetto "/ data / securedStorageLocation /" non esiste
Ciò accade anche se eseguo per la prima volta: adb -d shell su -c "mount -o remount rw, / data
Qualcuno può dirmi come eseguire il pull and push con la shell adb e su. Ho provato MOLTE permutazioni e non riesco a capirlo. Grazie per il tuo tempo.
EDIT: comando adb root non ottiene il root su questo dispositivo
Bene, devi eseguire alcuni comandi, poiché non credo che funzionerà in uno.
Devi fare:
-
shell 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
Per me funziona sempre.
Grazie per questa discussione. Mi ha portato a una soluzione che ha funzionato abbastanza bene per me durante il backup del mio telefono che non monta il suo ext4 interno, prima di fare qualcosa di drastico mentre cercavo di risolverlo (apparentemente questo richiede i permessi di root).
Nota che adb shell
generalmente imposta un terminale di testo (quindi può convertire singoli caratteri di fine riga in CRLF, alterando dati binari come immagini di partizioni o archivi TAR). Sebbene tu possa aggirare questo problema nelle versioni Unix / Linux di adb (es. Aggiungi stty raw
al tuo comando shell) o usa qualche nuovo adb con l'opzione exec-out
, su Windows scrive ancora CRLF nel suo output. Il trucco è passare i dati attraverso la codifica e la decodifica base64 (i binari sono disponibili per Windows in massa). Nota anche che gli errori oi messaggi dettagliati stampati su stderr
nella shell finiscono nel programma stdout
del programma adb shell
nel sistema host, quindi dovresti farlo scartali dopo l'inevitabile sperimentazione iniziale.
Ecco:
adb shell "su -c 'cat / dev / block / mmcblk0p25 | base64' 2> / dev / null" | base64 -d > p25
Può essere facilmente programmato da Windows per coprire tutte le partizioni (può cercare l'elenco con ls -la / dev / block /
e / o da cat / proc / diskstats
o cat / proc / partitions
), ad esempio:
for / L% P in (1 , 1,25) fai .. \ platform-tools \ adb shell "su -c 'cat / dev / block / mmcblk0p% P | base64' 2> / dev / null" | base64 -d > s3-mmcblk0p% P.img
(Nota per utilizzare %% P
nei file batch CMD o % P
nella shell interattiva).
Non dimenticare che ci sono anche mmcblk0boot [01]
partizioni e che nel complesso mmcblk0
contiene tutte quelle partizioni in un wrapping GPT, proprio come qualsiasi altro disco rigido o imitatore di uno :)
Per stimare le dimensioni delle singole partizioni, puoi guardare l'output di:
fdisk -u -l / dev / block / mmcblk0 *
Sfortunatamente, non sono riuscito a tar cf - mmcblkp0 * code rapidamente e facilmente > e ottenere il contenuto della partizione, in modo da poterlo reindirizzare ad es
7z x -si
e ottieni i dati come file multipli anche in un one-liner portatile.
Per tar
alcuni file puoi:
adb shell "su -c 'cd / mnt / data && tar czf - ./ | base64' 2> / dev / null" | base64 -d > s3-mmcblk0p25-userdata.tar.gz
AGGIORNATO: Trovati altri trucchi per trasferire dati binari.
Spero che questo aiuti qualcun altro, Jim Klimov
Uso lo script batch ( extract-db-from-emulator.bat
) di seguito per estrarre il database locale dall'host:
@@ 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_filepath % "% adb_path% adb.exe pull% pullable_filepath%% host_directory%
Non sarà necessariamente una riga, ma puoi provare a fare le seguenti azioni:
- (con adb shell, su) Copia i file in una posizione accessibile temporanea sul tuo dispositivo (ad esempio,
/ sdcard
o scheda SD esterna) - (con adb pull) Copia questi file dalla posizione temporanea sul tuo computer
- Elimina temporaneo copia
Possibile svantaggio: tra il primo e l'ultimo passaggio un'app dannosa, se vi capita di "usarla", potrebbe leggere e / o modificare file presenti in una directory temporanea accessibile pubblicamente. In pratica, questo è molto improbabile.
Vedo un errore con
adb shell "su -c '<your command>'"
su: invalid uid / gid ' -c '
La soluzione è su Linux
adb shell su 0' <your command> '