Bridge di debug Android (adb)

Android Debug Bridge (adb) è uno strumento a riga di comando versatile che ti consente di comunicare con un dispositivo. Il comando adb facilita una serie di azioni sul dispositivo, come l'installazione e il debug delle app. adb fornisce l'accesso a una shell Unix che puoi utilizzare per eseguire una serie di comandi su un dispositivo. Si tratta di un programma client-server che include tre componenti:

  • Un client, che invia comandi. Il client viene eseguito sulla tua macchina di sviluppo. Puoi richiamare un client da un terminale a riga di comando mediante un comando adb.
  • Un daemon (adbd) che esegue comandi su un dispositivo. Il daemon viene eseguito come processo in background su ciascun dispositivo.
  • Un server, che gestisce la comunicazione tra il client e il daemon. Il server viene eseguito come processo in background sulla tua macchina di sviluppo.

adb è incluso nel pacchetto Android SDK Platform Tools. Scarica questo pacchetto con SDK Manager, che lo installa su android_sdk/platform-tools/. Se vuoi il pacchetto autonomo degli strumenti della piattaforma SDK Android, scaricalo qui.

Per informazioni sulla connessione di un dispositivo per un utilizzo superiore a adb, incluso come utilizzare l'Assistente connessioni per risolvere i problemi comuni, vedi Eseguire app su un dispositivo hardware.

Come funziona ADB

Quando avvii un client adb, il client verifica innanzitutto se è già in esecuzione un processo del server adb. In caso contrario, viene avviato il processo del server. All'avvio, il server si associa alla porta TCP 5037 locale e rimane in ascolto dei comandi inviati dai client adb.

Nota: tutti i client adb utilizzano la porta 5037 per comunicare con il server adb.

Il server configura quindi le connessioni a tutti i dispositivi in esecuzione. Individua gli emulatori scansionando le porte con numero dispari nell'intervallo da 5555 a 5585, ovvero l'intervallo utilizzato dai primi 16 emulatori. Nel caso in cui trovi un daemon adb (adbd), il server configura una connessione a quella porta.

Ogni emulatore utilizza una coppia di porte sequenziali: una porta con numero pari per le connessioni della console e una porta con numero dispari per le connessioni adb. Ecco alcuni esempi:

Emulatore 1, console: 5554
Emulatore 1, adb: 5555
Emulatore 2, console: 5556
Emulatore 2, adb: 5557
e così via.

Come mostrato, l'emulatore connesso a adb sulla porta 5555 è uguale all'emulatore la cui console è in ascolto sulla porta 5554.

Dopo che il server ha configurato le connessioni a tutti i dispositivi, puoi utilizzare i comandi adb per accedere a questi dispositivi. Poiché il server gestisce le connessioni ai dispositivi e i comandi di più client adb, puoi controllare qualsiasi dispositivo da qualsiasi client o da uno script.

Attiva il debug ADB sul tuo dispositivo

Per utilizzare ADB con un dispositivo connesso tramite USB, devi attivare l'opzione Debug USB nella sezione Opzioni sviluppatore delle impostazioni di sistema del dispositivo. Su Android 4.2 (livello API 17) e versioni successive, la schermata Opzioni sviluppatore è nascosta per impostazione predefinita. Per renderla visibile, attiva le Opzioni sviluppatore.

Ora puoi collegare il tuo dispositivo tramite USB. Puoi verificare che il dispositivo sia connesso eseguendo adb devices dalla directory android_sdk/platform-tools/. Se connesso, il nome del dispositivo sarà indicato come "dispositivo".

Nota: quando connetti un dispositivo con Android 4.2.2 (livello API 17) o versioni successive, il sistema mostra una finestra di dialogo che chiede se accettare una chiave RSA che consente il debug tramite questo computer. Questo meccanismo di sicurezza protegge i dispositivi degli utenti perché garantisce che il debug USB e altri comandi adb non possano essere eseguiti, a meno che tu non riesca a sbloccare il dispositivo e confermare la finestra di dialogo.

Per maggiori informazioni sulla connessione a un dispositivo tramite USB, leggi Eseguire app su un dispositivo hardware.

Connettersi a un dispositivo tramite Wi-Fi

Nota: le istruzioni riportate di seguito non riguardano i dispositivi Wear con Android 11 (livello API 30). Per ulteriori informazioni, consulta la guida al debug di un'app Wear OS.

Android 11 (livello API 30) e versioni successive supporta il deployment e il debug della tua app in modalità wireless dalla workstation tramite Android Debug Bridge (adb). Ad esempio, puoi eseguire il deployment dell'app di cui è possibile eseguire il debug su più dispositivi remoti senza dover collegare fisicamente il dispositivo tramite USB. In questo modo non è più necessario gestire problemi di connessione USB comuni, come l'installazione del driver.

Prima di iniziare a utilizzare il debug wireless:

  • Assicurati che la workstation e il dispositivo siano connessi alla stessa rete wireless.

  • Assicurati che sul dispositivo sia installato Android 11 (livello API 30) o versioni successive per smartphone oppure Android 13 (livello API 33) o versioni successive per TV e WearOS. Per maggiori informazioni, consulta la pagina Controllare e aggiornare la versione di Android.

  • Se utilizzi l'IDE, assicurati di avere installato la versione più recente di Android Studio. Puoi scaricarla qui.

  • Sulla workstation, esegui l'aggiornamento all'ultima versione degli SDK Platform Tools.

Per utilizzare il debug wireless, devi associare il dispositivo alla workstation tramite un codice QR o un codice di accoppiamento. La workstation e il dispositivo devono essere connessi alla stessa rete wireless. Per connetterti al tuo dispositivo, segui questi passaggi:

  1. Attiva le Opzioni sviluppatore sul tuo dispositivo.

  2. Apri Android Studio e seleziona Accoppia dispositivi tramite Wi-Fi dal menu delle configurazioni di esecuzione.

    Menu a discesa Esegui configurazioni
    Figura 1. Menu Esegui configurazioni.

    Viene visualizzata la finestra Accoppia dispositivi tramite Wi-Fi, come mostrato nella figura 2.

    Screenshot dell'accoppiamento dei dispositivi tramite Wi-Fi
    Figura 2. Finestra popup per accoppiare i dispositivi tramite codice QR o codice di accoppiamento.
  3. Sul dispositivo, tocca Debug wireless e accoppia il dispositivo:

    Screenshot di un telefono Pixel che mostra l'impostazione Sistemi di debug wireless.
    Figura 3. Screenshot dell'impostazione Debug wireless su uno smartphone Google Pixel.
    1. Per accoppiare il dispositivo con un codice QR, seleziona Accoppia dispositivo con codice QR e scansiona il codice QR ottenuto dal popup Accoppia dispositivi tramite Wi-Fi mostrato nella figura 2.

    2. Per accoppiare il dispositivo con un codice di accoppiamento, seleziona Accoppia dispositivo con codice di accoppiamento dal popup Accoppia dispositivi tramite Wi-Fi. Sul dispositivo, selezionare Accoppia utilizzando il codice di accoppiamento e prendere nota del codice di sei cifre fornito. Quando il dispositivo appare nella finestra Accoppia dispositivi tramite Wi-Fi, puoi selezionare Accoppia e inserire il codice di sei cifre mostrato sul dispositivo.

      Screenshot di esempio di inserimento del codice PIN
      Figura 4. Esempio di inserimento di un codice a sei cifre.
  4. Una volta accoppiato il dispositivo, puoi provare a implementare la tua app sul dispositivo.

    Per accoppiare un altro dispositivo o eliminare il dispositivo attuale sulla workstation, vai a Debug wireless sul dispositivo. Tocca il nome della tua workstation nella sezione Dispositivi accoppiati e seleziona Elimina.

  5. Se vuoi attivare e disattivare rapidamente il debug wireless, puoi utilizzare i riquadri sviluppatore delle Impostazioni rapide per Debug wireless, disponibili in Opzioni sviluppatore > Riquadri sviluppatore delle impostazioni rapide.

    Screenshot dei riquadri sviluppatore Impostazioni rapide di uno smartphone Google Pixel.
    Figura 5. L'impostazione Riquadri sviluppatore Impostazioni rapide consente di attivare e disattivare rapidamente il debug wireless.

Connessione Wi-Fi tramite riga di comando

In alternativa, per connetterti al dispositivo utilizzando la riga di comando senza Android Studio, segui questi passaggi:

  1. Attiva le Opzioni sviluppatore sul dispositivo, come descritto in precedenza.

  2. Attiva il debug wireless sul dispositivo, come descritto in precedenza.

  3. Sulla workstation, apri una finestra del terminale e vai a android_sdk/platform-tools.

  4. Trova il tuo indirizzo IP, il numero di porta e il codice di accoppiamento selezionando Accoppia dispositivo con codice di accoppiamento. Prendi nota dell'indirizzo IP, del numero di porta e del codice di accoppiamento visualizzati sul dispositivo.

  5. Esegui adb pair ipaddr:port sul terminale della workstation. Utilizza l'indirizzo IP e il numero di porta indicati in precedenza.

  6. Quando richiesto, inserisci il codice di accoppiamento, come mostrato di seguito.

    Screenshot dell'accoppiamento nella riga di comando.
    Figura 6. Un messaggio indica che il dispositivo è stato accoppiato correttamente.

Risolvere i problemi di connessione wireless

Se hai difficoltà a connetterti al tuo dispositivo in modalità wireless, prova a svolgere i seguenti passaggi per la risoluzione dei problemi.

Verifica se la workstation e il dispositivo soddisfano i prerequisiti

Verifica che la workstation e il dispositivo soddisfino i prerequisiti elencati all'inizio di questa sezione.

Verifica la presenza di altri problemi noti

Di seguito è riportato un elenco degli attuali problemi noti relativi al debug wireless (con adb o Android Studio) e le relative soluzioni:

  • Il Wi-Fi non si connette. Le reti Wi-Fi sicure, come le reti Wi-Fi aziendali, potrebbero bloccare le connessioni p2p e non consentirti di connetterti tramite Wi-Fi. Prova a connetterti con un cavo o un'altra rete Wi-Fi (non aziendale). Un'altra opzione è una connessione wireless che utilizza adb connect ip:port su tcp/ip (dopo una connessione USB iniziale), nel caso in cui sia possibile ricorrere a una rete non aziendale.

  • A volte adb tramite Wi-Fi si disattiva automaticamente: questo può accadere se il dispositivo cambia rete Wi-Fi o si disconnette dalla rete. Per risolvere il problema, connettiti di nuovo alla rete.

  • Il dispositivo non si connette dopo l'accoppiamento: adb si basa sul protocollo mDNS per rilevare e connettersi automaticamente ai dispositivi accoppiati. Se la configurazione della tua rete o del tuo dispositivo non supporta mDNS o lo ha disattivato, dovrai connetterti manualmente al dispositivo utilizzando adb connect ip:port.

Connettiti in modalità wireless a un dispositivo dopo una connessione USB iniziale (solo opzione disponibile su Android 10 e versioni precedenti)

Nota: questo flusso di lavoro è applicabile anche ad Android 11 (e versioni successive), con l'indicazione che prevede anche una connessione *iniziale* tramite USB fisica.

Nota: le seguenti istruzioni non riguardano i dispositivi Wear con Android 10 (livello API 29) o versioni precedenti. Per ulteriori informazioni, consulta la guida relativa al debug di un'app Wear OS.

In genere adb comunica con il dispositivo tramite USB, ma puoi usare adb anche tramite Wi-Fi. Per connettere un dispositivo con Android 10 (livello API 29) o versioni precedenti, segui questi passaggi iniziali tramite USB:

  1. Collega il dispositivo Android e il computer host adb a una rete Wi-Fi comune.
  2. Nota: fai attenzione che non tutti i punti di accesso sono adatti. Potrebbe essere necessario utilizzare un punto di accesso il cui firewall sia configurato correttamente per supportare adb.

  3. Collega il dispositivo al computer host con un cavo USB.
  4. Imposta il dispositivo di destinazione per l'ascolto di una connessione TCP/IP sulla porta 5555:
    adb tcpip 5555
    
  5. Scollega il cavo USB dal dispositivo di destinazione.
  6. Trova l'indirizzo IP del dispositivo Android. Ad esempio, su un dispositivo Nexus puoi trovare l'indirizzo IP in Impostazioni > Informazioni sul tablet (o Informazioni sul telefono) > Stato > Indirizzo IP.
  7. Connetti il dispositivo tramite il suo indirizzo IP:
    adb connect device_ip_address:5555
    
  8. Verifica che il computer host sia connesso al dispositivo di destinazione:
    $ adb devices
    List of devices attached
    device_ip_address:5555 device
    

Il tuo dispositivo è ora connesso a adb.

Se la connessione adb al tuo dispositivo si interrompe:

  • Assicurati che l'host sia ancora connesso alla stessa rete Wi-Fi a cui è collegato il dispositivo Android.
  • Riconnettiti eseguendo di nuovo il passaggio adb connect.
  • Se il problema persiste, reimposta l'host adb:
    adb kill-server
    

    Poi ricomincia dall'inizio.

Query per dispositivi

Prima di inviare comandi adb, è utile sapere quali istanze del dispositivo sono connesse al server adb. Genera un elenco di dispositivi collegati utilizzando il comando devices:

  adb devices -l
  

In risposta, adb stampa queste informazioni sullo stato per ciascun dispositivo:

  • Numero di serie: adb crea una stringa per identificare in modo univoco il dispositivo tramite il suo numero di porta. Ecco un esempio di numero di serie: emulator-5554
  • Stato: lo stato della connessione del dispositivo può essere uno dei seguenti:
    • offline: il dispositivo non è connesso a adb o non risponde.
    • device: il dispositivo è connesso al server adb. Tieni presente che questo stato non implica che il sistema Android sia completamente avviato e operativo, perché il dispositivo si connette a adb mentre il sistema è ancora in fase di avvio. Dopo l'avvio, questo è il normale stato operativo di un dispositivo.
    • no device: nessun dispositivo connesso.
  • Descrizione: se includi l'opzione -l, il comando devices indica il tipo di dispositivo. Queste informazioni sono utili se hai connesso più dispositivi in modo da poterli distinguere.

L'esempio seguente mostra il comando devices e il relativo output. Ci sono tre dispositivi in esecuzione. Le prime due righe nell'elenco sono emulatori, mentre la terza riga è un dispositivo hardware collegato al computer.

$ adb devices
List of devices attached
emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64
emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86
0a388e93      device usb:1-1 product:razor model:Nexus_7 device:flo

Emulatore non elencato

Il comando adb devices ha una sequenza di comando "angle-case" che fa sì che gli emulatori in esecuzione non vengano visualizzati nell'output adb devices anche se gli emulatori sono visibili sul desktop. Questo accade quando si verificano tutte le seguenti condizioni:

  • Il server adb non è in esecuzione.
  • Puoi utilizzare il comando emulator con l'opzione -port o -ports con un valore di porta dispari compreso tra 5554 e 5584.
  • La porta con numero dispari che hai scelto non è occupata, quindi la connessione della porta può essere stabilita con il numero di porta specificato oppure, se questa è occupata, l'emulatore passa a un'altra porta che soddisfa i requisiti del punto 2.
  • Avvia il server adb dopo aver avviato l'emulatore.

Un modo per evitare questa situazione è lasciare che l'emulatore scelga le proprie porte e non esegua più di 16 emulatori alla volta. Un altro modo è avviare sempre il server adb prima di utilizzare il comando emulator, come spiegato negli esempi seguenti.

Esempio 1: nella seguente sequenza di comando, il comando adb devices avvia il server adb, ma l'elenco dei dispositivi non viene visualizzato.

Arresta il server adb e inserisci i seguenti comandi nell'ordine mostrato. Per il nome della durata di visualizzazione media, fornisci un nome della durata di visualizzazione media valido del tuo sistema. Per visualizzare un elenco dei nomi della durata di visualizzazione media, digita emulator -list-avds. Il comando emulator si trova nella directory android_sdk/tools.

$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5555
$ adb devices

List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

Esempio 2: nella seguente sequenza di comando, adb devices mostra l'elenco dei dispositivi poiché il server adb è stato avviato per primo.

Per visualizzare l'emulatore nell'output adb devices, arresta il server adb e riavvialo dopo aver utilizzato il comando emulator e prima di utilizzare il comando adb devices, come segue:

$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5557
$ adb start-server
$ adb devices

List of devices attached
emulator-5557 device

Per ulteriori informazioni sulle opzioni della riga di comando dell'emulatore, vedi Opzioni di avvio dalla riga di comando.

Inviare comandi a un dispositivo specifico

Se sono in esecuzione più dispositivi, devi specificare il dispositivo di destinazione quando invii il comando adb. Per specificare il target, procedi nel seguente modo:

  1. Usa il comando devices per ottenere il numero di serie della destinazione.
  2. Una volta ottenuto il numero di serie, utilizza l'opzione -s con i comandi adb per specificarlo.
    1. Se esegui molti comandi adb, puoi impostare la variabile di ambiente $ANDROID_SERIAL in modo che contenga il numero di serie.
    2. Se utilizzi -s e $ANDROID_SERIAL, -s sostituisce $ANDROID_SERIAL.

Nell'esempio seguente, si ricava l'elenco dei dispositivi collegati e il numero di serie di uno dei dispositivi viene utilizzato per installare helloWorld.apk su quel dispositivo:

$ adb devices
List of devices attached
emulator-5554 device
emulator-5555 device
0.0.0.0:6520  device

# To install on emulator-5555
$ adb -s emulator-5555 install helloWorld.apk
# To install on 0.0.0.0:6520
$ adb -s 0.0.0.0:6520 install helloWorld.apk

Nota: se invii un comando senza specificare un dispositivo di destinazione quando sono disponibili più dispositivi, adb visualizza l'errore "adb: more than one device/emulator".

Se hai più dispositivi a disposizione, ma solo uno è un emulatore, utilizza l'opzione -e per inviare comandi all'emulatore. Se sono presenti più dispositivi, ma un solo dispositivo hardware collegato, utilizza l'opzione -d per inviare comandi al dispositivo hardware.

Installare un'app

Puoi utilizzare adb per installare un APK su un emulatore o un dispositivo connesso con il comando install:

adb install path_to_apk

Quando installi un APK di test, devi utilizzare l'opzione -t con il comando install. Per maggiori informazioni, consulta la sezione -t.

Per installare più APK, utilizza il criterio install-multiple. Questo è utile se scarichi tutti gli APK per un dispositivo specifico per la tua app da Play Console e vuoi installarli su un emulatore o un dispositivo fisico.

Per ulteriori informazioni su come creare un file APK che puoi installare su un emulatore/un'istanza di dispositivo, consulta Creare ed eseguire un'app.

Nota: se usi Android Studio, non è necessario usare adb direttamente per installare l'app dall'emulatore o dal dispositivo. È invece Android Studio a occuparsi della pacchettizzazione e dell'installazione dell'app.

Configura port forwarding

Utilizza il comando forward per configurare un port forwarding arbitrario, che inoltra le richieste da una porta host specifica a una porta diversa su un dispositivo. Nell'esempio seguente viene configurato l'inoltro dalla porta host 6100 alla porta 7100 del dispositivo:

adb forward tcp:6100 tcp:7100

Nell'esempio seguente viene configurato l'inoltro della porta host 6100 a local:logd:

adb forward tcp:6100 local:logd

Questo può essere utile se stai cercando di determinare cosa viene inviato a una determinata porta sul dispositivo. Tutti i dati ricevuti verranno scritti nel daemon di logging del sistema e visualizzati nei log del dispositivo.

Copiare file da e verso un dispositivo

Utilizza i comandi pull e push per copiare file da e verso un dispositivo. A differenza del comando install, che copia un file APK solo in una posizione specifica, i comandi pull e push consentono di copiare directory e file arbitrari in qualsiasi posizione su un dispositivo.

Per copiare un file o una directory e le relative sottodirectory dal dispositivo, procedi nel seguente modo:

adb pull remote local

Per copiare nel dispositivo un file o una directory e le relative sottodirectory:

adb push local remote

Sostituisci local e remote con i percorsi dei file/della directory di destinazione sulla tua macchina di sviluppo (locale) e sul dispositivo (remoto). Ecco alcuni esempi:

adb push myfile.txt /sdcard/myfile.txt

Arresta l'adb server

In alcuni casi, per risolvere il problema potrebbe essere necessario terminare il processo del server adb e riavviarlo. Ad esempio, questo potrebbe verificarsi se adb non risponde a un comando.

Per arrestare il server adb, utilizza il comando adb kill-server. Puoi quindi riavviare il server emettendo qualsiasi altro comando adb.

Invia comandi ADB

Esegui i comandi adb dalla riga di comando sulla tua macchina di sviluppo o da uno script utilizzando quanto segue:

adb [-d | -e | -s serial_number] command

Se è in esecuzione un solo emulatore o se è connesso un solo dispositivo, il comando adb viene inviato a quel dispositivo per impostazione predefinita. Se sono in esecuzione più emulatori e/o sono collegati più dispositivi, devi utilizzare l'opzione -d, -e o -s per specificare il dispositivo di destinazione a cui deve essere indirizzato il comando.

Puoi visualizzare un elenco dettagliato di tutti i comandi adb supportati utilizzando il seguente comando:

adb --help

Emetti comandi shell

Puoi utilizzare il comando shell per inviare comandi del dispositivo tramite adb o per avviare una shell interattiva. Per inviare un singolo comando, utilizza il comando shell in questo modo:

adb [-d |-e | -s serial_number] shell shell_command

Per avviare una shell interattiva su un dispositivo, utilizza il comando shell in questo modo:

adb [-d | -e | -s serial_number] shell

Per uscire da una shell interattiva, premi Control+D o digita exit.

Android fornisce la maggior parte dei normali strumenti a riga di comando Unix. Per un elenco degli strumenti disponibili, utilizza il seguente comando:

adb shell ls /system/bin

Per la maggior parte dei comandi è disponibile una guida tramite l'argomento --help. Molti dei comandi della shell sono forniti da toybox. La guida generale per tutti i comandi Toybox è disponibile tramite toybox --help.

Con Android Platform Tools 23 e versioni successive, adb gestisce gli argomenti come il comando ssh(1). Questa modifica ha risolto molti problemi relativi all'inserimento di comandi e consente di eseguire in sicurezza comandi che contengono metacaratteri della shell, ad esempio adb install Let\'sGo.apk. Questa modifica significa che è cambiata anche l'interpretazione di qualsiasi comando contenente metacaratteri della shell.

Ad esempio, adb shell setprop key 'value' ora è un errore, perché le virgolette singole (') vengono inghiottite dalla shell locale e il dispositivo rileva adb shell setprop key value. Per far funzionare il comando, cita due volte, una per la shell locale e una per la shell remota, come fai con ssh(1). Ad esempio, adb shell setprop key 'value' .

Vedi anche Strumento a riga di comando Logcat, utile per il monitoraggio del log di sistema.

Gestore attività di chiamata

All'interno di una shell adb, puoi inviare comandi allo strumento Gestione attività (am) per eseguire varie azioni di sistema, ad esempio avviare un'attività, forzare l'interruzione di un processo, trasmettere un intent, modificare le proprietà della schermata del dispositivo e altro ancora.

In una shell, la sintassi am è:

am command

Puoi anche inviare un comando di Activity Manager direttamente da adb senza inserire una shell remota. Ecco alcuni esempi:

adb shell am start -a android.intent.action.VIEW

Tabella 1. Comandi di Gestione attività disponibili

Comando Descrizione
start [options] intent Inizia un Activity specificato da intent.

Consulta la specifica per gli argomenti intent.

Le opzioni sono:

  • -D: attiva il debug.
  • -W: attendi il completamento del lancio.
  • --start-profiler file: avvia profiler e invia i risultati a file.
  • -P file: come --start-profiler, ma la profilazione si interrompe quando l'app diventa inattiva.
  • -R count: ripeti l'attività avviando count volte. Prima di ogni ripetizione, verrà completata l'attività principale.
  • -S: forza l'interruzione dell'app di destinazione prima di avviare l'attività.
  • --opengl-trace: attiva il tracciamento delle funzioni OpenGL.
  • --user user_id | current: specifica l'utente da eseguire; se non specificato, esegui come utente corrente.
startservice [options] intent Inizia il campo Service specificato da intent.

Consulta la specifica per gli argomenti intent.

Le opzioni sono:

  • --user user_id | current: specifica per quale utente eseguire l'esecuzione. Se non specificata, esegui l'esecuzione come utente corrente.
force-stop package Forza l'interruzione di tutti gli elementi associati a package.
kill [options] package Termina tutti i processi associati a package. Questo comando termina solo i processi sicuri da terminare e che non influiscono sull'esperienza utente.

Le opzioni sono:

  • --user user_id | all | current: specifica i processi dell'utente da terminare. Se non specificato, termina tutti i processi degli utenti.
kill-all Termina tutti i processi in background.
broadcast [options] intent Emetti un intent di trasmissione.

Consulta la specifica per gli argomenti intent.

Le opzioni sono:

  • [--user user_id | all | current]: specifica a quale utente inviare. Se non specificato, invia a tutti gli utenti.
instrument [options] component Avvia il monitoraggio con un'istanza Instrumentation. In genere il target component è nel formato test_package/runner_class.

Le opzioni sono:

  • -r: stampa i risultati non elaborati (altrimenti decodificano report_key_streamresult). Usali con [-e perf true] per generare un output non elaborato per le misurazioni delle prestazioni.
  • -e name value: imposta l'argomento name su value. Per i runner, una forma comune è -e testrunner_flag value[,value...].
  • -p file: scrivi i dati di profilazione in file.
  • -w: attendi la fine della strumentazione prima di tornare. Obbligatorio per i runner del test.
  • --no-window-animation: disattiva le animazioni delle finestre durante l'esecuzione.
  • --user user_id | current: specifica su quale strumentazione utente viene eseguita l'esecuzione. Se non specificato, eseguilo nell'utente corrente.
profile start process file Avvia profiler su process, scrivi i risultati in file.
profile stop process Interrompi profiler su process.
dumpheap [options] process file Esegui il dump dell'heap di process, scrivi in file.

Le opzioni sono:

  • --user [user_id | current]: quando fornisci un nome di processo, specifica l'utente del processo di cui eseguire il dump. Se non specificato, viene utilizzato l'utente corrente.
  • -n: esegui il dump dell'heap nativo anziché dell'heap gestito.
set-debug-app [options] package Imposta l'app package per il debug.

Le opzioni sono:

  • -w: attendi il debugger all'avvio dell'app.
  • --persistent: mantieni questo valore.
clear-debug-app Cancella il pacchetto precedente impostato per il debug con set-debug-app.
monitor [options] Avvia il monitoraggio di arresti anomali o ANR.

Le opzioni sono:

  • --gdb: avvia gdbserv sulla porta specificata in caso di arresto anomalo/ANR.
screen-compat {on | off} package Controlla la modalità di compatibilità dello schermo di package.
display-size [reset | widthxheight] Esegui l'override delle dimensioni di visualizzazione del dispositivo. Questo comando è utile per testare l'app su schermi di diverse dimensioni imitando una risoluzione di schermo piccolo su un dispositivo con uno schermo grande e viceversa.

Esempio:
am display-size 1280x800

display-density dpi Esegui l'override della compattezza del display. Questo comando è utile per testare l'app su diverse densità dello schermo imitando un ambiente dello schermo ad alta densità utilizzando uno schermo a bassa densità e viceversa.

Esempio:
am display-density 480

to-uri intent Stampa la specifica di intent fornita come URI.

Consulta la specifica per gli argomenti intent.

to-intent-uri intent Stampa la specifica di intent fornita come URI intent:.

Consulta la specifica per gli argomenti intent.

Specifiche per gli argomenti intent

Per i comandi di Gestione attività che utilizzano un argomento intent, puoi specificare l'intent con le seguenti opzioni:

Chiama il gestore di pacchetti (pm)

All'interno di una shell adb, puoi inviare comandi con lo strumento di gestione dei pacchetti (pm) per eseguire azioni e query sui pacchetti dell'app installati sul dispositivo.

In una shell, la sintassi pm è:

pm command

Puoi anche inviare un comando del gestore di pacchetti direttamente da adb senza inserire una shell remota. Ecco alcuni esempi:

adb shell pm uninstall com.example.MyApp

Tabella 2. Comandi del gestore di pacchetti disponibili

Comando Descrizione
list packages [options] filter Stampa tutti i pacchetti, facoltativamente solo quelli il cui nome del pacchetto contiene il testo in filter.

Opzioni:

  • -f: visualizza il file associato.
  • -d: filtro per mostrare solo i pacchetti disattivati.
  • -e: filtro per mostrare solo i pacchetti attivati.
  • -s: filtro per mostrare solo i pacchetti di sistema.
  • -3: filtra per mostrare solo i pacchetti di terze parti.
  • -i: consulta il programma di installazione dei pacchetti.
  • -u: includi i pacchetti disinstallati.
  • --user user_id: lo spazio utente in cui eseguire la query.
list permission-groups Stampa tutti i gruppi di autorizzazioni noti.
list permissions [options] group Stampa tutte le autorizzazioni note, facoltativamente solo quelle in group.

Opzioni:

  • -g: organizza per gruppo.
  • -f: stampa tutte le informazioni.
  • -s: breve riepilogo.
  • -d: elenca solo le autorizzazioni pericolose.
  • -u: elenca solo le autorizzazioni visualizzate dagli utenti.
list instrumentation [options] Elenca tutti i pacchetti di test.

Opzioni:

  • -f: elenca il file APK del pacchetto di test.
  • target_package: elenca i pacchetti di test solo per questa app.
list features Stampa tutte le funzionalità del sistema.
list libraries Stampa tutte le librerie supportate dal dispositivo attuale.
list users Stampa tutti gli utenti sul sistema.
path package Stampa il percorso dell'APK dell'elemento package specificato.
install [options] path Installa un pacchetto, specificato da path, nel sistema.

Opzioni:

  • -r: reinstalla un'app esistente conservando i relativi dati.
  • -t: consenti l'installazione degli APK di test. Gradle genera un APK di test quando hai solo eseguito o eseguito il debug della tua app o quando hai utilizzato il comando Build > Build APK di Android Studio. Se l'APK è stato creato utilizzando un SDK di anteprima per sviluppatori, devi includere l'opzione -t con il comando install se stai installando un APK di test.
  • -i installer_package_name: specifica il nome del pacchetto del programma di installazione.
  • --install-location location: imposta il percorso di installazione utilizzando uno dei seguenti valori:
    • 0: usa il percorso di installazione predefinito.
    • 1: installa nella memoria interna del dispositivo.
    • 2: installa su supporti esterni.
  • -f: installa il pacchetto sulla memoria di sistema interna.
  • -d: consenti il downgrade del codice di versione.
  • -g: concedi tutte le autorizzazioni elencate nel file manifest dell'app.
  • --fastdeploy: aggiorna rapidamente un pacchetto installato aggiornando soltanto le parti dell'APK che sono state modificate.
  • --incremental: installa una quantità sufficiente di APK per avviare l'app, trasmettendo in streaming i dati rimanenti in background. Per utilizzare questa funzionalità, devi firmare l'APK, creare un file dello schema di firma dell'APK v4 e inserire questo file nella stessa directory dell'APK. Questa funzionalità è supportata solo su alcuni dispositivi. Questa opzione impone a adb di utilizzare la funzionalità oppure restituisce un errore se non è supportata, con informazioni dettagliate sul motivo dell'errore. Aggiungi l'opzione --wait per attendere che l'APK sia installato completamente prima di concedergli l'accesso.

    --no-incremental impedisce a adb di utilizzare questa funzionalità.

uninstall [options] package Rimuove un pacco dal sistema.

Opzioni:

  • -k: conserva le directory dei dati e della cache dopo la rimozione del pacchetto.
  • --user user_id: specifica l'utente per cui viene rimosso il pacchetto.
  • --versionCode version_code: la disinstallazione viene eseguita solo se l'app ha il codice di versione fornito.
clear package Elimina tutti i dati associati a un pacchetto.
enable package_or_component Consente di attivare il pacchetto o il componente specificato (scritto come "pacchetto/classe").
disable package_or_component Disattiva il pacchetto o il componente specificato (scritto come "pacchetto/classe").
disable-user [options] package_or_component

Opzioni:

  • --user user_id: l'utente da disattivare.
grant package_name permission Concedere un'autorizzazione a un'app. Sui dispositivi con Android 6.0 (livello API 23) e versioni successive, l'autorizzazione può essere qualsiasi autorizzazione dichiarata nel file manifest dell'app. Sui dispositivi con Android 5.1 (livello API 22) e versioni precedenti, deve essere disponibile un'autorizzazione facoltativa definita dall'app.
revoke package_name permission Revoca un'autorizzazione da un'app. Sui dispositivi con Android 6.0 (livello API 23) e versioni successive, l'autorizzazione può essere qualsiasi autorizzazione dichiarata nel file manifest dell'app. Sui dispositivi con Android 5.1 (livello API 22) e versioni precedenti, deve essere disponibile un'autorizzazione facoltativa definita dall'app.
set-install-location location Modifica il percorso di installazione predefinito. Valori posizione:
  • 0: automatica: consenti al sistema di decidere la posizione migliore.
  • 1: interno: installa nella memoria interna del dispositivo.
  • 2: esterno: installa su supporti esterni.

Nota: questa funzione è destinata solo al debug. L'utilizzo di questa opzione può causare interruzioni delle app e altri comportamenti indesiderati.

get-install-location Restituisce il percorso di installazione corrente. Valori restituiti:
  • 0 [auto]: consenti al sistema di decidere la posizione migliore
  • 1 [internal]: installa nella memoria interna del dispositivo
  • 2 [external]: installa su supporti esterni
set-permission-enforced permission [true | false] Specifica se è necessario applicare l'autorizzazione fornita.
trim-caches desired_free_space Taglia i file della cache per raggiungere lo spazio libero specificato.
create-user user_name Crea un nuovo utente con il user_name specificato, stampando il nuovo identificatore utente dell'utente.
remove-user user_id Rimuovi l'utente con l'elemento user_id specificato, eliminando tutti i dati associati all'utente
get-max-users Stampa il numero massimo di utenti supportati dal dispositivo.
get-app-links [options] [package]

Stampa lo stato di verifica del dominio per il package specificato o per tutti i pacchetti se non è specificato alcun valore. I codici di stato sono definiti come segue:

  • none: non è stato registrato nulla per questo dominio
  • verified: il dominio è stato verificato correttamente
  • approved: approvato forzatamente, generalmente tramite shell
  • denied: rifiuto forzato, generalmente tramite shell
  • migrated: viene mantenuta la verifica da una risposta precedente
  • restored: conservazione della verifica di un ripristino dei dati utente
  • legacy_failure: rifiutato da uno strumento di verifica precedente, motivo sconosciuto
  • system_configured: approvato automaticamente dalla configurazione del dispositivo
  • >= 1024: codice di errore personalizzato specifico dello strumento di verifica dei dispositivi.

Le opzioni sono:

  • --user user_id: includi le selezioni degli utenti. Includi tutti i domini, non solo quelli di verifica automatica.
reset-app-links [options] [package]

Reimposta lo stato di verifica del dominio per il pacchetto specificato o per tutti i pacchetti se non è specificato alcun pacchetto.

  • package: il pacchetto da reimpostare o "tutto" per reimpostare tutti i pacchetti

Le opzioni sono:

  • --user user_id: includi le selezioni degli utenti. Includi tutti i domini, non solo quelli di verifica automatica.
verify-app-links [--re-verify] [package]

Trasmetti una richiesta di verifica per il package specificato o per tutti i pacchetti se non è specificato alcun valore. Invia solo se il pacchetto non ha mai registrato una risposta.

  • --re-verify: viene inviata anche se il pacchetto ha registrato una risposta
set-app-links [--package package] state domains

Impostare manualmente lo stato di un dominio per un pacchetto. Affinché questa operazione funzioni, il dominio deve essere dichiarato dal pacchetto come Verifica automatica. Questo comando non segnala un errore per i domini che non è stato possibile applicare.

  • --package package: il pacchetto da impostare oppure "tutti" per impostare tutti i pacchetti
  • state: il codice per impostare i domini. I valori validi sono:
    • STATE_NO_RESPONSE (0): viene reimpostato come se non fosse mai stata registrata alcuna risposta.
    • STATE_SUCCESS (1): considera il dominio come verificato dall'agente di verifica del dominio. Tieni presente che l'agente di verifica del dominio può eseguire l'override.
    • STATE_APPROVED (2): tratta il dominio come sempre approvato, impedendo all'agente di verifica del dominio di modificarlo.
    • STATE_DENIED (3): tratta il dominio come sempre negato e impedisce all'agente di verifica del dominio di modificarlo.
  • domains: elenco di domini da modificare separati da spazi oppure "tutti" per modificare ogni dominio.
set-app-links-user-selection --user user_id [--package package] enabled domains

Imposta manualmente lo stato selezionato da un utente host per un pacchetto. Affinché questa operazione vada a buon fine, il dominio deve essere dichiarato dal pacchetto. Questo comando non segnalerà un errore per i domini che non è stato possibile applicare.

  • --user user_id: l'utente per cui modificare le selezioni
  • --package package: il pacchetto da impostare
  • enabled: se approvare o meno il dominio
  • domains: elenco di domini da modificare separati da spazi oppure "tutti" per modificare ogni dominio
set-app-links-user-selection --user user_id [--package package] enabled domains

Imposta manualmente lo stato selezionato da un utente host per un pacchetto. Affinché questa operazione vada a buon fine, il dominio deve essere dichiarato dal pacchetto. Questo comando non segnalerà un errore per i domini che non è stato possibile applicare.

  • --user user_id: l'utente per cui modificare le selezioni
  • --package package: il pacchetto da impostare
  • enabled: se approvare o meno il dominio
  • domains: elenco di domini da modificare separati da spazi oppure "tutti" per modificare ogni dominio
set-app-links-allowed --user user_id [--package package] allowed

Attiva/disattiva l'impostazione di gestione dei link con verifica automatica per un pacchetto.

  • --user user_id: l'utente per cui modificare le selezioni
  • --package package: il pacchetto da impostare oppure "all" per impostare tutti i pacchetti. I pacchetti verranno reimpostati se non viene specificato alcun pacchetto
  • allowed: true per consentire al pacchetto di aprire link verificati automaticamente, false per disattivarli
get-app-link-owners --user user_id [--package package] domains

Stampa i proprietari di un dominio specifico per un determinato utente in ordine di priorità da bassa ad alta.

  • --user user_id: l'utente su cui eseguire la query
  • --package package: facoltativamente, puoi anche stampare per tutti i domini web dichiarati da un pacchetto, oppure "all" per stampare tutti i pacchetti
  • domains: elenco di domini separati da spazi per cui eseguire una query

Chiama Gestione delle norme relative ai dispositivi (dpm)

Per aiutarti a sviluppare e testare le tue app di gestione dei dispositivi, esegui comandi allo strumento Gestione criteri dei dispositivi (dpm). Utilizza lo strumento per controllare l'app di amministrazione attiva o modificare i dati sullo stato di un criterio sul dispositivo.

Mentre ti trovi in una shell, la sintassi dpm è:

dpm command

Puoi anche inviare un comando di Device Policy Manager direttamente da adb senza inserire una shell remota:

adb shell dpm command

Tabella 3. Comandi di gestione dei criteri dei dispositivi disponibili

Comando Descrizione
set-active-admin [options] component Imposta component come amministratore attivo.

Le opzioni sono:

  • --user user_id: specifica l'utente di destinazione. Puoi anche passare --user current per selezionare l'utente corrente.
set-profile-owner [options] component Imposta component come amministratore attivo e il relativo pacchetto come proprietario del profilo per un utente esistente.

Le opzioni sono:

  • --user user_id: specifica l'utente di destinazione. Puoi anche passare --user current per selezionare l'utente corrente.
  • --name name: specifica il nome leggibile dell'organizzazione.
set-device-owner [options] component Imposta component come amministratore attivo e il relativo pacchetto come proprietario del dispositivo.

Le opzioni sono:

  • --user user_id: specifica l'utente di destinazione. Puoi anche passare --user current per selezionare l'utente corrente.
  • --name name: specifica il nome leggibile dell'organizzazione.
remove-active-admin [options] component Disattivare un amministratore attivo. L'app deve dichiarare android:testOnly nel file manifest. Questo comando rimuove anche i proprietari di dispositivi e profili.

Le opzioni sono:

  • --user user_id: specifica l'utente di destinazione. Puoi anche passare --user current per selezionare l'utente corrente.
clear-freeze-period-record Cancella la registrazione sul dispositivo dei periodi di blocco impostati in precedenza per gli aggiornamenti OTA di sistema. Ciò è utile per evitare le limitazioni della programmazione dispositivo durante lo sviluppo di app che gestiscono i periodi di blocco. Consulta Gestire gli aggiornamenti di sistema.

Funzionalità supportata sui dispositivi con Android 9.0 (livello API 28) e versioni successive.

force-network-logs Forza il sistema a preparare tutti i log di rete esistenti per il recupero da parte di un DPC. Se sono disponibili log della connessione o DNS, il DPC riceve il callback onNetworkLogsAvailable(). Vedi Logging delle attività di rete.

Questo comando è a frequenza limitata. Funzionalità supportata sui dispositivi con Android 9.0 (livello API 28) e versioni successive.

force-security-logs Forza il sistema a rendere disponibili i log di sicurezza esistenti al DPC. Se sono disponibili log, il DPC riceve il callback onSecurityLogsAvailable(). Vedi Registra attività dei dispositivi aziendali.

Questo comando è a frequenza limitata. Funzionalità supportata sui dispositivi con Android 9.0 (livello API 28) e versioni successive.

Fai uno screenshot

Il comando screencap è un'utilità della shell per acquisire uno screenshot del display di un dispositivo.

In una shell, la sintassi screencap è:

screencap filename

Per utilizzare screencap dalla riga di comando, inserisci quanto segue:

adb shell screencap /sdcard/screen.png

Ecco un esempio di sessione di screenshot, in cui viene utilizzata la shell adb per acquisire lo screenshot e il comando pull per scaricare il file dal dispositivo:

$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png

Registra un video

Il comando screenrecord è un'utilità shell per la registrazione della visualizzazione dei dispositivi con Android 4.4 (livello API 19) e versioni successive. L'utilità registra l'attività dello schermo in un file MPEG-4. Puoi utilizzare questo file per creare video promozionali o di formazione o per il debug e i test.

In una shell, utilizza la seguente sintassi:

screenrecord [options] filename

Per utilizzare screenrecord dalla riga di comando, inserisci quanto segue:

adb shell screenrecord /sdcard/demo.mp4

Interrompi la registrazione dello schermo premendo Ctrl + C (Comando + C su macOS). In caso contrario, la registrazione si interrompe automaticamente dopo tre minuti o al limite di tempo impostato da --time-limit.

Per iniziare a registrare lo schermo del dispositivo, esegui il comando screenrecord per registrare il video. Quindi, esegui il comando pull per scaricare il video dal dispositivo al computer host. Ecco un esempio di sessione di registrazione:

$ adb shell
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Control + C to stop)
shell@ $ exit
$ adb pull /sdcard/demo.mp4

L'utilità screenrecord può registrare con qualsiasi risoluzione e velocità in bit supportate da te richieste, mantenendo le proporzioni del display del dispositivo. Per impostazione predefinita, l'utilità registra con la risoluzione e l'orientamento nativi del display, con una durata massima di tre minuti.

Limitazioni dell'utilità screenrecord:

  • L'audio non viene registrato con il file video.
  • La registrazione video non è disponibile per i dispositivi con Wear OS.
  • Alcuni dispositivi potrebbero non riuscire a registrare alla risoluzione nativa del display. Se riscontri problemi con la registrazione dello schermo, prova a utilizzare una risoluzione inferiore.
  • La rotazione dello schermo non è supportata durante la registrazione. Se lo schermo ruota durante la registrazione, parte dello schermo viene tagliata nella registrazione.

Tabella 4. Opzioni per screenrecord

Opzioni Descrizione
--help Visualizza la sintassi e le opzioni del comando
--size widthxheight Imposta le dimensioni del video: 1280x720. Il valore predefinito è la risoluzione nativa del display del dispositivo (se supportata), in caso contrario 1280 x 720. Per ottenere risultati ottimali, utilizza una dimensione supportata dal codificatore AVC (Advanced Video Coding) del tuo dispositivo.
--bit-rate rate Imposta la velocità in bit del video in megabit al secondo. Il valore predefinito è 4 Mbps. Puoi aumentare la velocità in bit per migliorare la qualità video, ma in questo modo i file video saranno più grandi. Nell'esempio seguente la velocità in bit di registrazione viene impostata su 6 Mbps:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time Imposta il tempo massimo di registrazione in secondi. Il valore predefinito e massimo è 180 (3 minuti).
--rotate Ruota l'output di 90 gradi. Si tratta di una funzionalità sperimentale.
--verbose Visualizza le informazioni del log nella schermata della riga di comando. Se non imposti questa opzione, l'utilità non mostra informazioni durante l'esecuzione.

Lettura dei profili ART per le app

A partire da Android 7.0 (livello API 24), Android Runtime (ART) raccoglie i profili di esecuzione per le app installate, che vengono utilizzati per ottimizzare le prestazioni delle app. Esamina i profili raccolti per capire quali metodi vengono eseguiti di frequente e quali classi vengono utilizzate durante l'avvio dell'app.

Nota: è possibile recuperare il nome file del profilo di esecuzione solo se hai accesso root al file system, ad esempio su un emulatore.

Per generare un formato di testo delle informazioni del profilo, utilizza il seguente comando:

adb shell cmd package dump-profiles package

Per recuperare il file generato, utilizza:

adb pull /data/misc/profman/package.prof.txt

Reimposta i dispositivi di test

Se testi l'app su più dispositivi di test, potrebbe essere utile reimpostare il dispositivo tra un test e l'altro, ad esempio per rimuovere i dati utente e reimpostare l'ambiente di test. Puoi eseguire il ripristino dei dati di fabbrica di un dispositivo di test con Android 10 (livello API 29) o versioni successive utilizzando il comando della shell adb testharness, come mostrato di seguito:

adb shell cmd testharness enable

Quando ripristini il dispositivo utilizzando testharness, il dispositivo esegue automaticamente il backup della chiave RSA che consente il debug tramite la workstation attuale in una posizione permanente. In altre parole, dopo il ripristino del dispositivo, la workstation può continuare a eseguire il debug e inviare i comandi adb al dispositivo senza registrare manualmente una nuova chiave.

Inoltre, per rendere più semplice e sicuro continuare a testare la tua app, l'uso di testharness per ripristinare un dispositivo cambia anche le seguenti impostazioni del dispositivo:

  • Il dispositivo configura determinate impostazioni di sistema in modo che le procedure guidate di configurazione iniziale non vengano visualizzate. In altre parole, il dispositivo entra in uno stato in cui puoi installare, eseguire il debug e testare la tua app rapidamente.
  • Impostazioni:
    • Disattiva la schermata di blocco.
    • Disattiva gli avvisi di emergenza.
    • Disattiva la sincronizzazione automatica per gli account.
    • Disattiva gli aggiornamenti di sistema automatici.
  • Altro:
    • Disattiva le app di sicurezza preinstallate.

Se la tua app deve rilevare e adattarsi alle impostazioni predefinite del comando testharness, utilizza ActivityManager.isRunningInUserTestHarness().

Squadrato

sqlite3 avvia il programma a riga di comando sqlite per l'esame dei database SQLite. Include comandi come .dump per stampare i contenuti di una tabella e .schema per stampare l'istruzione SQL CREATE per una tabella esistente. Puoi anche eseguire i comandi SQLite dalla riga di comando, come mostrato di seguito:

$ adb -s emulator-5554 shell
$ sqlite3 /data/data/com.example.app/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions

Nota: è possibile accedere a un database SQLite solo se hai accesso root al file system, ad esempio su un emulatore.

Per ulteriori informazioni, consulta la documentazione relativa alla riga di comando di sqlite3.