Domanda:
Hai bisogno di una riga adb shell su push & pull per accedere / dati dal file batch di Windows
sjoy
2014-10-23 10:05:01 UTC
view on stackexchange narkive permalink

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

Per usare "adb push" o "adb pull" in modalità root, il demone adb sul dispositivo deve essere in esecuzione in modalità root (che è ciò che fa ADBInsecure).
@Izzy Come posso entrare in modalità root senza adb insecure se il comando> adb root
Non lo so (ho sempre usato "ADB Insecure", dato che non riuscivo nemmeno a far funzionare `adb root`). Merita una domanda a parte, forse?
Cinque risposte:
Mike N.
2015-11-23 13:28:24 UTC
view on stackexchange narkive permalink

Bene, devi eseguire alcuni comandi, poiché non credo che funzionerà in uno.

Devi fare:

  1. shell adb
  2. su
  3. cd / data / path / of / file
  4. cp / data / path / of / file / copyme / data / local / tmp
  5. chown shell.shell / data / local / tmp / copyme
  6. exit
  7. exit
  8. adb pull / data / local / tmp / copyme / destination / copyme

Per me funziona sempre.

cos'è esattamente shell.shell
@Remario https: // linux.die.net / man / 1 / chown - significa proprietario.group.Quando copi un file usando SU, il proprietario e il gruppo saranno root.root.Il comando adb pull viene eseguito come shell.shell e non sarà in grado di estrarre il file dalla posizione temporanea.Cambiarlo prima di eseguire il pull ti consentirà il permesso.
Jim Klimov
2017-03-21 18:39:08 UTC
view on stackexchange narkive permalink

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

base64 non è una soluzione ideale.Per i file piccoli funziona bene ma per i file di grandi dimensioni aumenta il tempo di trasferimento di un terzo!
Ovviamente non è perfetto per questo, ma dato che per scopi di ripristino afferrare eventuali cannucce che possono aiutare è abbastanza buono ... beh ... :) In ogni caso, se mando un'intera partizione per l'esportazione in questo modo,Non mi interessa davvero se ci vuole un'ora contro un'ora e mezza, purché funzioni in modo affidabile.Inoltre, se, come alcuni altri hanno documentato, la variante Windows di adb.exe produce effettivamente sempre testo separato da CRLF, sembra che ci sia poco che possiamo fare se non abusarne con l'incapsulamento ASCII-friendly.In alternativa, `adb exec-out` potrebbe essere la soluzione, ma per qualche motivo non ha funzionato bene per me.
Nae
2019-02-27 17:46:49 UTC
view on stackexchange narkive permalink

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%  
Display Name
2015-06-09 12:05:25 UTC
view on stackexchange narkive permalink

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.

hannes ach
2020-05-10 12:46:58 UTC
view on stackexchange narkive permalink

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> ' 


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...