Ricerca…


introduzione

adb shell apre una shell Linux in un dispositivo o emulatore di destinazione. È il modo più potente e versatile per controllare un dispositivo Android tramite adb .

Questo argomento è stato diviso da ADB (Android Debug Bridge) a causa del raggiungimento del limite di esempi, molti dei quali riguardavano il comando della adb shell .

Sintassi

  • adb shell [-e escape] [-n] [-Tt] [-x] [comando]

Parametri

Parametro Dettagli
-e scegli il carattere di escape o "none"; predefinito '~'
-n non leggere da stdin
-T disabilitare l'allocazione PTY
-t forzare l'allocazione del PTY
-X disabilita i codici di uscita remoti e la separazione stdout / stderr

Invia testo, tasto premuto e tocca gli eventi sul dispositivo Android tramite ADB

eseguire il seguente comando per inserire il testo in una vista con un focus (se supporta l'immissione di testo)

6.0

Invia il testo su SDK 23+

adb shell "input keyboard text 'Paste text on Android Device'"

Se sei già connesso al tuo dispositivo tramite adb :

input text 'Paste text on Android Device'
6.0

Invia il testo prima di SDK 23

adb shell "input keyboard text 'Paste%stext%son%sAndroid%sDevice'"

Gli spazi non sono accettati come input, sostituirli con% s.

Invia eventi

Per simulare la pressione del tasto di accensione dell'hardware

adb shell input keyevent 26

o in alternativa

adb shell input keyevent POWER

Anche se non si dispone di una chiave hardware, è comunque possibile utilizzare un keyevent per eseguire l'azione equivalente

adb shell input keyevent CAMERA

Invia evento touch come input

adb shell input tap Xpoint Ypoint

Invia evento di scorrimento come input

adb shell input swipe Xpoint1 Ypoint1 Xpoint2 Ypoint2 [DURATION*]

* DURATION è facoltativo, impostazione predefinita = 300ms. fonte

Ottieni punti X e Y abilitando la posizione del puntatore nell'opzione sviluppatore.

Script di shell di esempio ADB

Per eseguire uno script in Ubuntu, creare script.sh, fare clic con il pulsante destro del mouse sul file e aggiungere il permesso di lettura / scrittura e selezionare Consenti il ​​file in esecuzione come programma .

Aprire l'emulatore di terminale ed eseguire il comando ./script.sh

Script.sh

 for (( c=1; c<=5; c++ ))
    do  
       adb shell input tap X Y
       echo "Clicked $c times"
       sleep 5s
    done

Per un elenco completo dei numeri degli eventi

Elenca i pacchetti

Stampa tutti i pacchetti, opzionalmente solo quelli il cui nome del pacchetto contiene il testo in <FILTER>.

adb shell pm list packages [options] <FILTER>

All <FILTER>

adb shell pm list packages

attributi:

-f per vedere il loro file associato.

-i Vedi l'installer per i pacchetti.

-u includere anche i pacchetti disinstallati.

-u Includono anche pacchetti disinstallati.

Attributi che filtrano:

-d per pacchetti disabilitati.

-e per i pacchetti abilitati.

-s per pacchetti di sistema.

-3 per pacchetti di terze parti.

--user <USER_ID> per uno spazio utente specifico da interrogare.

Concessione e revoca delle autorizzazioni API 23+

Un one-liner che aiuta a concedere o revocare le autorizzazioni vulnerabili.

  • rilascio

    adb shell pm grant <sample.package.id> android.permission.<PERMISSION_NAME>
    
  • revoca

    adb shell pm revoke <sample.package.id> android.permission.<PERMISSION_NAME>
    
  • Concessione di tutte le autorizzazioni di runtime alla volta durante l'installazione (-g)

    adb install -g /path/to/sample_package.apk
    

Stampa i dati dell'applicazione

Questo comando stampa tutti i dati rilevanti dell'applicazione:

  • codice di versione
  • nome della versione
  • autorizzazioni concesse (API Android 23+)
  • eccetera..
adb shell dumpsys package <your.package.id>

Registrazione del display

4.4

Registrazione del display di dispositivi con Android 4.4 (livello API 19) e versioni successive:

adb shell screenrecord [options] <filename>
adb shell screenrecord /sdcard/demo.mp4

(premi Ctrl-C per interrompere la registrazione)

Scarica il file dal dispositivo:

adb pull /sdcard/demo.mp4

Nota: interrompere la registrazione dello schermo premendo Ctrl-C, altrimenti la registrazione si interrompe automaticamente a tre minuti o il limite di tempo impostato da --time-limit .

adb shell screenrecord --size <WIDTHxHEIGHT>

Imposta la dimensione del video: 1280x720. Il valore predefinito è la risoluzione di visualizzazione nativa del dispositivo (se supportato), 1280x720 in caso contrario. Per risultati ottimali, utilizza una dimensione supportata dal codificatore AVC (Advanced Video Coding) del tuo dispositivo.


adb shell screenrecord --bit-rate <RATE>

Imposta la velocità in bit del video per il video, in megabit al secondo. Il valore predefinito è 4Mbps. È possibile aumentare la velocità in bit per migliorare la qualità del video, ma in questo modo si ottengono file di film più grandi. L'esempio seguente imposta il bit rate di registrazione su 5Mbps:

adb shell screenrecord --bit-rate 5000000 /sdcard/demo.mp4

adb shell screenrecord --time-limit <TIME>

Imposta il tempo di registrazione massimo, in secondi. Il valore predefinito e massimo è 180 (3 minuti).


adb shell screenrecord --rotate

Ruota l'uscita di 90 gradi. Questa funzionalità è sperimentale.


adb shell screenrecord --verbose

Visualizza le informazioni del registro sullo schermo della riga di comando. Se non si imposta questa opzione, l'utilità non visualizza alcuna informazione durante l'esecuzione.

Nota: questo potrebbe non funzionare su alcuni dispositivi.

4.4

Il comando di registrazione dello schermo non è compatibile con le versioni di Android pre 4.4

Il comando screenrecord è un'utilità shell per registrare la visualizzazione di dispositivi con Android 4.4 (livello API 19) e versioni successive. L'utilità registra l'attività dello schermo su un file MPEG-4.

Modifica dei permessi dei file usando il comando chmod

Si noti che, per modificare le autorizzazioni di file, il dispositivo deve essere rootato, su binary non viene fornito con i dispositivi spediti in fabbrica!

Convenzione:

adb shell su -c "chmod <numeric-permisson> <file>"

Autorizzazione numerica costruita da sezioni utente, gruppo e mondo.

Ad esempio, se vuoi cambiare il file per essere leggibile, scrivibile ed eseguibile da tutti, questo sarà il tuo comando:

adb shell su -c "chmod 777 <file-path>"

O

adb shell su -c "chmod 000 <file-path>"

se intendi negare qualsiasi autorizzazione ad esso.

1a cifra: specifica il permesso dell'utente, 2a cifra : specifica il permesso del gruppo, 3a cifra , specifica l'autorizzazione del mondo (altri).

Permessi di accesso:

--- :   binary value:   000,  octal value: 0 (none)
--x :   binary value:   001,  octal value: 1 (execute)
-w- :   binary value:   010,  octal value: 2 (write)
-wx :   binary value:   011,  octal value: 3 (write, execute)
r-- :   binary value:   100,  octal value: 4 (read)
r-x :   binary value:   101,  octal value: 5 (read, execute)
rw- :   binary value:   110,  octal value: 6 (read, write)
rwx :   binary value:   111,  octal value: 7 (read, write, execute)

Imposta data / ora tramite adb

6.0

Il formato SET predefinito è MMDDhhmm[[CC]YY][.ss] , cioè (2 cifre ciascuno)

Ad esempio, per impostare il 17 luglio alle 10:10, senza modificare l'anno corrente, digitare:

adb shell 'date 07171010.00'

Suggerimento 1: la modifica della data non si rifletterà immediatamente e una modifica notevole avverrà solo dopo che l'orologio di sistema avanza al minuto successivo.
È possibile forzare un aggiornamento allegando una trasmissione di intenti TIME_SET alla chiamata, in questo modo:

adb shell 'date 07171010.00 ; am broadcast -a android.intent.action.TIME_SET'

Suggerimento 2: per sincronizzare l'orologio di Android con la tua macchina locale:

Linux:

adb shell date `date +%m%d%H%M%G.%S`

Windows (PowerShell):

$currentDate = Get-Date -Format "MMddHHmmyyyy.ss" # Android's preferred format
adb shell "date $currentDate"

Entrambi i suggerimenti insieme:

adb shell 'date `date +%m%d%H%M%G.%S` ; am broadcast -a android.intent.action.TIME_SET'
6.0

Il formato SET predefinito è 'YYYYMMDD.HHmmss'

adb shell 'date -s 20160117.095930'

Suggerimento: per sincronizzare l'orologio di Android con la tua macchina locale (basata su Linux):

adb shell date -s `date +%G%m%d.%H%M%S`

Apri Opzioni sviluppatore

adb shell am start -n com.android.settings/.DevelopmentSettings

Navigherà il tuo dispositivo / emulatore nella sezione Developer Options .

Generazione di una trasmissione "Boot Complete"

Questo è rilevante per le app che implementano un BootListener . Prova la tua app uccidendo la tua app e poi prova con:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n your.app/your.app.BootListener

(sostituire your.package/your.app.BootListener con valori corretti).

Visualizza contenuto di archiviazione esterno / secondario

Visualizza contenuto:

adb shell ls \$EXTERNAL_STORAGE
adb shell ls \$SECONDARY_STORAGE

Visualizza percorso:

adb shell echo \$EXTERNAL_STORAGE
adb shell echo \$SECONDARY_STORAGE

uccidere un processo all'interno di un dispositivo Android

A volte il logcat di Android funziona in modo infinito con errori derivanti da un processo non di tua proprietà, esaurendo la batteria o rendendo difficile il debug del codice.

Un modo conveniente per risolvere il problema senza riavviare il dispositivo è individuare e terminare il processo che causa il problema.

Da Logcat

03-10 11:41:40.010 1550-1627/? E/SomeProcess: ....

nota il numero del processo: 1550

Ora possiamo aprire una shell e uccidere il processo. Nota che non possiamo eliminare il processo di root .

adb shell

all'interno della shell possiamo controllare di più sul processo usando

ps -x | grep 1550

e uccidilo se vogliamo:

kill -9 1550


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow