Android
Adb shell
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)
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'
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
- elenco di alcuni eventi interessanti ADB Shell Input Events
- documentazione di riferimento https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_POWER .
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
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.
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
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'
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