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 semplifica una serie di azioni sul dispositivo, come l'installazione e il debugging delle app. adb fornisce l'accesso a una shell Unix che puoi utilizzare per eseguire una varietà 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 inviando un comando adb.
  • Un daemon (adbd), che esegue comandi su un dispositivo. Il daemon viene eseguito come processo in background su ogni dispositivo.
  • Un server che gestisce la comunicazione tra il client e il daemon. Il server viene eseguito come processo in background sulla macchina di sviluppo.

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

Per informazioni su come connettere un dispositivo da utilizzare tramite adb, inclusa la modalità di utilizzo dell'Assistente alla connessione per risolvere i problemi comuni, consulta Eseguire app su un dispositivo hardware.

Come funziona adb

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

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

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

Ogni emulatore utilizza una coppia di porte sequenziali: una porta con numero pari per le connessioni alla console e una porta con numero dispari per le connessioni adb. Ad esempio:

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

Come mostrato, l'emulatore collegato a adb sulla porta 5555 è lo stesso dell'emulatore whose console listens on port 5554.

Una volta 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 sia le connessioni ai dispositivi sia i comandi di più client adb, puoi controllare qualsiasi dispositivo da qualsiasi client o da uno script.

Attivare il debug adb sul dispositivo

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

Ora puoi collegare il dispositivo tramite USB. Puoi verificare che il dispositivo sia collegato eseguendo adb devices dalla directory android_sdk/platform-tools/. Se è connesso, vedrai il nome del dispositivo elencato 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 consenta 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 non sia possibile 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.

Connettiti a un dispositivo tramite Wi-Fi

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

Android 11 (livello API 30) e versioni successive supportano il deployment e il debug dell'app in modalità wireless dalla workstation utilizzando Android Debug Bridge (adb). Ad esempio, puoi implementare la tua app di debug su più dispositivi remoti senza dover mai connettere fisicamente il dispositivo tramite USB. In questo modo non è necessario gestire i problemi comuni di connessione USB, come l'installazione dei driver.

Prima di iniziare a utilizzare il debug wireless, segui questi passaggi:

  • 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 lo smartphone o Android 13 (livello API 33) o versioni successive per TV e Wear OS. Per maggiori informazioni, consulta Controllare e aggiornare la versione di Android.

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

  • Sulla tua workstation, esegui l'aggiornamento alla versione più recente di SDK Platform Tools.

Per utilizzare il debug wireless, devi accoppiare 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 dispositivo:

  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 della finestra popup per l'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 accoppialo:

    Screenshot di
            uno smartphone 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 in 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, seleziona Accoppia tramite codice di accoppiamento e prendi nota del codice a sei cifre fornito. Quando il tuo dispositivo viene visualizzato nella finestra Accoppia dispositivi tramite Wi-Fi, puoi selezionare Accoppia e inserire il codice di sei cifre visualizzato sul dispositivo.

      Screenshot di un esempio di inserimento del codice PIN
      Figura 4. Esempio di inserimento di un codice di sei cifre.
  4. Dopo aver accoppiato il dispositivo, puoi tentare di eseguire il deployment dell'app sul dispositivo.

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

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

    Screenshot dei riquadri sviluppatore per le impostazioni rapide di uno smartphone Google Pixel.
    Figura 5. L'impostazione Riquadri sviluppatore per le 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 tuo dispositivo come descritto in precedenza.

  3. Nella tua 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 visualizzato sul dispositivo.

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

  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 problemi a connetterti al dispositivo in modalità wireless, prova la procedura di risoluzione dei problemi riportata di seguito.

Verificare 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.

Verificare la presenza di altri problemi noti

Di seguito è riportato un elenco dei problemi attualmente noti relativi al debug wireless (con adb o Android Studio) e su come risolverli:

  • Il Wi-Fi non si connette: le reti Wi-Fi sicure, come quelle aziendali, potrebbero bloccare le connessioni p2p e non consentirti di connetterti tramite Wi-Fi. Prova a connetterti tramite cavo o un'altra rete Wi-Fi (non aziendale). La connessione wireless tramite adb connect ip:port su TCP/IP (dopo una connessione USB iniziale) è un'altra opzione, se è possibile ricorrere a una rete non aziendale.

  • adb tramite Wi-Fi a volte si disattiva automaticamente: questo può accadere se il dispositivo cambia rete Wi-Fi o si scollega dalla rete. Per risolvere il problema, ricollegati alla rete.

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

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

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

Nota: le seguenti istruzioni non si applicano ai dispositivi Wear con Android 10 (livello API 29) o versioni precedenti. Per ulteriori informazioni, consulta la guida sul debug di un'app per Wear OS.

In genere adb comunica con il dispositivo tramite USB, ma puoi utilizzare 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 adbcomputer host a una rete Wi-Fi comune.
  2. Nota:tieni presente che non tutti i punti di accesso sono adatti. Potresti dover 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 in modo che attenda 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 sullo smartphone) > Stato > Indirizzo IP.
  7. Connettiti al dispositivo tramite l'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 dispositivo viene persa:

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

    Quindi ricomincia dall'inizio.

Esegui query sui dispositivi

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

  adb devices -l
  

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

  • Numero di serie:adb crea una stringa per identificare in modo univoco il dispositivo tramite il numero di porta. Ecco un esempio di numero di serie: emulator-5554
  • Stato: lo stato di 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 è lo stato operativo normale di un dispositivo.
    • no device: nessun dispositivo connesso.
  • Descrizione: se includi l'opzione -l, il comando devices indica di che dispositivo si tratta. Queste informazioni sono utili quando hai più dispositivi connessi, in modo da distinguerli.

L'esempio seguente mostra il comando devices e il relativo output. Sono in esecuzione tre dispositivi. Le prime due righe dell'elenco sono emulatori e la terza è 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 comandi di casi limite che causa l'assenza degli emulatori in esecuzione nell'output di adb devices, anche se sono visibili sul desktop. Ciò si verifica quando tutte le seguenti condizioni sono vere:

  • Il server adb non è in esecuzione.
  • Utilizza 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 effettuata al numero di porta specificato oppure, se è occupata, l'emulatore passa a un'altra porta che soddisfa i requisiti in 2.
  • Avvia il server adb dopo aver avviato l'emulatore.

Un modo per evitare questa situazione è lasciare che sia l'emulatore a scegliere le porte e non eseguire più di 16 emulatori contemporaneamente. Un altro modo è avviare sempre il server adb prima di utilizzare il comando emulator, come spiegato negli esempi riportati di seguito.

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

Interrompi il server adb e inserisci i seguenti comandi nell'ordine indicato. Per il nome AVD, fornisci un nome AVD valido del tuo sistema. Per visualizzare un elenco dei nomi AVD, 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 comandi, adb devices mostra l'elenco dei dispositivi perché il server adb è stato avviato per primo.

Per vedere l'emulatore nell'output di adb devices, arresta il server adb e poi avvialo di nuovo 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 a 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 emetti il comando adb. Per specificare il target:

  1. Usa il comando devices per ottenere il numero di serie del target.
  2. Una volta ottenuto il numero di serie, utilizza l'opzione -s con i comandi adb per specificarlo.
    1. Se intendi emettere molti comandi adb, puoi impostare la variabile di ambiente $ANDROID_SERIAL in modo che contenga il numero di serie.
    2. Se utilizzi sia -s sia $ANDROID_SERIAL, -s esegue l'override di $ANDROID_SERIAL.

Nell'esempio seguente viene ottenuto 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 esegui un comando senza specificare un dispositivo di destinazione quando sono disponibili più dispositivi, adb visualizza l'errore "adb: più di un dispositivo/emulatore".

Se hai più dispositivi disponibili, ma solo uno è un emulatore, utilizza l'opzione -e per inviare comandi all'emulatore. Se sono presenti più dispositivi, ma solo un 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

Devi utilizzare l'opzione -t con il comando install quando installi un APK di test. Per ulteriori informazioni, consulta -t.

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

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

Nota: se utilizzi Android Studio, non è necessario utilizzare direttamente adb per installare l'app sull'emulatore o sul dispositivo. Android Studio si occupa invece della creazione del pacchetto e dell'installazione dell'app.

Configura port forwarding

Utilizza il comando forward per configurare il port forwarding arbitrario, che inoltra le richieste su una porta host specifica a una porta diversa su un dispositivo. L'esempio seguente configura il forwarding della porta host 6100 alla porta del dispositivo 7100:

adb forward tcp:6100 tcp:7100

L'esempio seguente configura l'inoltro della porta host 6100 a local:logd:

adb forward tcp:6100 local:logd

Questa operazione 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 su e da un dispositivo

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

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

adb pull remote local

Per copiare un file o una directory e le relative sottodirectory sul dispositivo: segui questi passaggi:

adb push local remote

Sostituisci local e remote con i percorsi dei file/della directory di destinazione sul computer di sviluppo (locale) e sul dispositivo (remoto). Ad esempio:

adb push myfile.txt /sdcard/myfile.txt

Arrestare l'adb server

In alcuni casi, per risolvere il problema potrebbe essere necessario terminare il processo del server adb e riavviare il server. Ad esempio, questo potrebbe accadere 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.

Emetti comandi ADB

Esegui i comandi adb da una 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 è connesso un solo dispositivo, il comando adb viene inviato al 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

Emettere comandi shell

Puoi utilizzare il comando shell per inviare comandi del dispositivo tramite adb o per avviare una shell interattiva. Per emettere un singolo comando, utilizza il comando shell come segue:

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

Per avviare una shell interattiva su un dispositivo, utilizza il comando shell come segue:

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

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

Con Android Platform Tools 23 e versioni successive, adb gestisce gli argomenti nello stesso modo in cui lo fa il comando ssh(1). Questa modifica ha risolto molti problemi relativi all'iniezione di comandi e consente di eseguire in sicurezza comandi contenenti metacaratteri della shell, come adb install Let\'sGo.apk. Questa modifica comporta anche la modifica dell'interpretazione di qualsiasi comando contenente metacaratteri della shell.

Ad esempio, adb shell setprop key 'two words' ora è un errore, perché le virgolette vengono ignorate dalla shell locale e il dispositivo vede adb shell setprop key two words. Per far funzionare il comando, cita due volte, una per la shell locale e un'altra per la shell remota, come fai con ssh(1). Ad esempio, adb shell setprop key "'two words'" funziona perché la shell locale prende il livello esterno delle virgolette e il dispositivo visualizza ancora il livello interno delle virgolette: setprop key 'two words'. Anche l'uso di un carattere di sfuggita è un'opzione, ma in genere è più facile usare le virgolette due volte.

Consulta anche lo strumento a riga di comando Logcat, utile per monitorare il log di sistema.

Gestore attività di chiamata

All'interno di una shell adb, puoi emettere comandi con lo strumento Activity Manager (am) per eseguire varie azioni di sistema, ad esempio avviare un'attività, arrestare forzatamente un processo, trasmettere un'intent, modificare le proprietà della schermata del dispositivo e altro ancora.

In una shell, la sintassi di am è:

am command

Puoi anche inviare un comando di Gestione attività direttamente da adb senza accedere a una shell remota. Ad esempio:

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

Tabella 1. Comandi di Gestione attività disponibili

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

Consulta la specifica per gli argomenti dell'intent.

Le opzioni sono:

  • -D: attiva il debug.
  • -W: attendi il completamento dell'avvio.
  • --start-profiler file: avvia il 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 il lancio dell'attività count volte. Prima di ogni ripetizione, l'attività principale verrà terminata.
  • -S: forza l'interruzione dell'app target prima di avviare l'attività.
  • --opengl-trace: attiva il monitoraggio delle funzioni OpenGL.
  • --user user_id | current: specifica l'utente da usare per l'esecuzione; se non specificato, esegui come utente corrente.
startservice [options] intent Avvia il Service specificato da intent.

Consulta la specifica per gli argomenti dell'intent.

Le opzioni sono:

  • --user user_id | current: specifica l'utente con cui eseguire il comando. Se non specificato, viene eseguito come utente corrente.
force-stop package Interrompi forzatamente tutto ciò che è associato a package.
kill [options] package Termina tutti i processi associati a package. Questo comando termina solo i processi che è sicuro 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, uccidi tutti i processi degli utenti.
kill-all Termina tutti i processi in background.
broadcast [options] intent Emettere un intent di trasmissione.

Consulta la specifica per gli argomenti dell'intent.

Le opzioni sono:

  • [--user user_id | all | current]: specifica a quale utente inviare il messaggio. Se non viene specificato, l'email viene inviata a tutti gli utenti.
instrument [options] component Inizia il monitoraggio con un'istanza Instrumentation. In genere, il valore component di destinazione è nel formato test_package/runner_class.

Le opzioni sono:

  • -r: stampa i risultati non elaborati (in caso contrario decodificareport_key_streamresult). Da utilizzare con[-e perf true] per generare un output non elaborato per le misurazioni del rendimento.
  • -e name value: imposta l'argomento name su value. Per i test runner, una forma comune è -e testrunner_flag value[,value...].
  • -p file: scrivi i dati di profilazione in file.
  • -w: attendi il completamento della strumentazione prima di tornare. Obbligatorio per i runner di test.
  • --no-window-animation: disattiva le animazioni delle finestre durante l'esecuzione.
  • --user user_id | current: specifica in quale contesto viene eseguita la misurazione degli utenti. Se non specificato, viene eseguito nell'utente corrente.
profile start process file Avvia profiler su process, scrivi risultati su 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 processo, specifica l'utente del processo da dumpare. Se non specificato, viene utilizzato l'utente corrente.
  • -b [| png | jpg | webp]: scarica le bitmap dalla memoria grafica (livello API 35 e successivi). Facoltativamente, puoi specificare il formato in cui eseguire il dump (PNG per impostazione predefinita).
  • -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 impostato in precedenza per il debug con set-debug-app.
monitor [options] Inizia a monitorare gli arresti anomali o gli 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] Sostituisci le dimensioni di visualizzazione del dispositivo. Questo comando è utile per testare l'app su schermi di diverse dimensioni simulando una risoluzione ridotta dello schermo utilizzando un dispositivo con schermo grande e viceversa.

Esempio:
am display-size 1280x800

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

Esempio:
am display-density 480

to-uri intent Stampa la specifica dell'intent specificata come URI.

Consulta la specifica per gli argomenti dell'intent.

to-intent-uri intent Stampa la specifica dell'intent specificata come URI intent:.

Consulta la specifica per gli argomenti dell'intent.

Specifiche per gli argomenti dell'intent

Per i comandi di gestione delle attività che accettano un argomento intent, puoi specificare l'intenzione con le seguenti opzioni:

Gestore di pacchetti di chiamate (pm)

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

In una shell, la sintassi di pm è:

pm command

Puoi anche emettere un comando del gestore dei pacchetti direttamente da adb senza accedere a una shell remota. Ad esempio:

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, se vuoi solo quelli il cui nome contiene il testo in filter.

Opzioni:

  • -f: visualizza il file associato.
  • -d: filtra per visualizzare solo i pacchetti disattivati.
  • -e: filtra per visualizzare solo i pacchetti abilitati.
  • -s: filtra per visualizzare solo i pacchetti di sistema.
  • -3: filtra per visualizzare solo i pacchetti di terze parti.
  • -i: consulta l'installatore per i pacchetti.
  • -u: includi i pacchetti disinstallati.
  • --user user_id: lo spazio utente su cui eseguire la query.
list permission-groups Stampa tutti i gruppi di autorizzazioni noti.
list permissions [options] group Stampa tutte le autorizzazioni note, se vuoi 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 che gli utenti vedranno.
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 corrente.
list users Stampa tutti gli utenti del sistema.
path package Stampa il percorso dell'APK del package specificato.
install [options] path Installa un pacchetto, specificato da path, nel sistema.

Opzioni:

  • -r: reinstalla un'app esistente mantenendo i relativi dati.
  • -t: consenti l'installazione di APK di test. Gradle genera un APK di test quando hai eseguito o eseguito il debug dell'app o hai utilizzato il comando Build > Build APK di Android Studio. Se l'APK è stato creato utilizzando un SDK di anteprima per gli sviluppatori, devi includere l'opzione -t con il comando install se stai installando un APK di prova.
  • -i installer_package_name: specifica il nome del pacchetto di installazione.
  • --install-location location: imposta la località di installazione utilizzando uno dei seguenti valori:
    • 0: utilizza la posizione di installazione predefinita.
    • 1: installa nell'archiviazione interna del dispositivo.
    • 2: installa su un supporto esterno.
  • -f: installa il pacchetto nella 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 solo le parti dell'APK che sono cambiate.
  • --incremental: installa una parte sufficiente dell'APK per avviare l'app mentre lo streaming dei dati rimanenti avviene in background. Per utilizzare questa funzionalità, devi firmare l'APK, creare un file v4 dello schema di firma dell'APK e posizionare questo file nella stessa directory dell'APK. Questa funzionalità è supportata solo su alcuni dispositivi. Questa opzione forza adb a utilizzare la funzionalità o a non farlo se non è supportata, fornendo informazioni dettagliate sul motivo dell'errore. Aggiungi l'opzione --wait per attendere la completa installazione dell'APK prima di concedere l'accesso all'APK.

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

uninstall [options] package Rimuove un pacchetto dal sistema.

Opzioni:

  • -k: mantieni 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: viene eseguita la disinstallazione solo se l'app ha il codice di versione specificato.
clear package Elimina tutti i dati associati a un pacchetto.
enable package_or_component Attiva il pacchetto o il componente specificato (scritto come "package/class").
disable package_or_component Disattiva il pacchetto o il componente specificato (scritto come "package/class").
disable-user [options] package_or_component

Opzioni:

  • --user user_id: l'utente da disattivare.
grant package_name permission Concedi 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 un'autorizzazione facoltativa definita dall'app.
revoke package_name permission Revocare 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 un'autorizzazione facoltativa definita dall'app.
set-install-location location Modificare la posizione di installazione predefinita. Valori posizione:
  • 0: Automatica: lascia che sia il sistema a decidere la posizione migliore.
  • 1: interna: installa nell'archiviazione interna del dispositivo.
  • 2: esterna: installa su un supporto esterno.

Nota:questa funzionalità è destinata solo al debug. L'utilizzo di questa opzione può causare il malfunzionamento delle app e altri comportamenti indesiderati.

get-install-location Restituisce la posizione di installazione corrente. Valori restituiti:
  • 0 [auto]: Lascia che sia il sistema a decidere la posizione migliore
  • 1 [internal]: installa nello spazio di archiviazione interno del dispositivo
  • 2 [external]: installa su un supporto esterno
set-permission-enforced permission [true | false] Specifica se l'autorizzazione fornita deve essere applicata in modo forzato.
trim-caches desired_free_space Ritaglia 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 il user_id specificato, eliminando tutti i dati associati a quell'utente
get-max-users Stampa il numero massimo di utenti supportati dal dispositivo.
get-app-links [options] [package]

Stampa lo stato della verifica del dominio per il package specificato o per tutti i pacchetti se non ne viene specificato nessuno. I codici stato sono definiti come segue:

  • none: non è stato registrato nulla per questo dominio
  • verified: il dominio è stato verificato correttamente
  • approved: approvata forzatamente, in genere tramite shell
  • denied: accesso negato forzato, in genere tramite shell
  • migrated: verifica conservata da una risposta precedente
  • restored: verifica conservata da un ripristino dei dati utente
  • legacy_failure: rifiuto da parte di un verificatore precedente, motivo sconosciuto
  • system_configured: approvata automaticamente dalla configurazione del dispositivo
  • >= 1024: codice di errore personalizzato, specifico per il verificatore del dispositivo

Le opzioni sono:

  • --user user_id: include le selezioni dell'utente. Includi tutti i domini, non solo quelli con 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 ne viene specificato nessuno.

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

Le opzioni sono:

  • --user user_id: include le selezioni dell'utente. Includi tutti i domini, non solo quelli con 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. Invia solo se il pacchetto in precedenza non ha registrato una risposta.

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

Imposta manualmente lo stato di un dominio per un pacchetto. Affinché questa operazione funzioni, il dominio deve essere dichiarato dal pacchetto come AutoVerify. Questo comando non segnalerà un errore per i domini che non è stato possibile applicare.

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

Imposta manualmente lo stato di una selezione dell'utente host per un pacchetto. Affinché la procedura funzioni, il dominio deve essere dichiarato dal pacchetto. Questo comando non segnala un errore per i domini a cui non è stato possibile applicare il criterio.

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

Imposta manualmente lo stato di una selezione dell'utente host per un pacchetto. Affinché questa operazione funzioni, il dominio deve essere dichiarato dal pacchetto. Questo comando non segnala un errore per i domini a cui non è stato possibile applicare il criterio.

  • --user user_id: l'utente per cui modificare le selezioni
  • --package package: il pacchetto da impostare
  • enabled: indica se approvare il dominio
  • domains: elenco dei domini da modificare separati da spazi o "all" per modificare tutti i domini
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 o "all" per impostare tutti i pacchetti; i pacchetti verranno reimpostati se non è specificato alcun pacchetto
  • allowed: true per consentire al pacchetto di aprire i link con verifica automatica, false per disattivare
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 a alta.

  • --user user_id: l'utente per cui eseguire la query
  • --package package: facoltativamente, stampa anche 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 norme dei dispositivi (dpm)

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

In una shell, la sintassi di dpmè:

dpm command

Puoi anche emettere un comando di gestione dei criteri del dispositivo direttamente da adb senza accedere a una shell remota:

adb shell dpm command

Tabella 3. Comandi di Device Policy Manager 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 dell'organizzazione leggibile.
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 dell'organizzazione leggibile.
remove-active-admin [options] component Disattivare un amministratore attivo. L'app deve dichiarare android:testOnly nel file manifest. Questo comando rimuove anche i proprietari del dispositivo e del profilo.

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 il record del dispositivo relativo ai periodi di blocco impostati in precedenza per gli aggiornamenti OTA di sistema. Questa opzione è utile per evitare le limitazioni di pianificazione del dispositivo quando sviluppi app che gestiscono periodi di blocco. Consulta Gestire gli aggiornamenti di sistema.

Supportato sui dispositivi con Android 9.0 (livello API 28) e versioni successive.

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

Questo comando è soggetto a una limitazione di frequenza. Supportato sui dispositivi con Android 9.0 (livello API 28) e versioni successive.

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

Questo comando è soggetto a una limitazione di frequenza. Supportato 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 di screencap è:

screencap filename

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

adb shell screencap /sdcard/screen.png

Di seguito è riportato 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à della shell per registrare la visualizzazione dei dispositivi con Android 4.4 (livello API 19) e versioni successive. L'utilità registra l'attività sullo schermo in un file MPEG-4. Puoi utilizzare questo file per creare video promozionali o di formazione o per attività di debug e 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. In caso contrario, la registrazione si interrompe automaticamente dopo tre minuti o il 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 sul computer ospitante. 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 a qualsiasi risoluzione e velocità in bit supportate da te richieste, mantenendo le proporzioni del display del dispositivo. L'utilità registra per impostazione predefinita la risoluzione e l'orientamento del display nativi, 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 essere in grado di registrare alla risoluzione nativa del display. Se riscontri problemi con la registrazione dello schermo, prova a utilizzare una risoluzione dello schermo inferiore.
  • La rotazione dello schermo durante la registrazione non è supportata. Se lo schermo ruota durante la registrazione, parte dello schermo viene tagliata.

Tabella 4. Opzioni 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 del display nativo del dispositivo (se supportata), 1280 x 720 in caso contrario. Per risultati ottimali, utilizza una dimensione supportata dall'encoder Advanced Video Coding (AVC) del tuo dispositivo.
--bit-rate rate Imposta la velocità in bit del video in megabit al secondo. Il valore predefinito è 20 Mbps. Puoi aumentare la velocità in bit per migliorare la qualità video, ma in questo modo i file dei filmati risulteranno più grandi. L'esempio seguente imposta la velocità in bit di registrazione su 6 Mbps:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time Imposta la durata massima della 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 Mostra le informazioni dei log nella schermata della riga di comando. Se non imposti questa opzione, l'utilità non mostra alcuna informazione durante l'esecuzione.

Leggere i profili ART per le app

A partire da Android 7.0 (livello API 24), Android Runtime (ART) raccoglie 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 del file del profilo di esecuzione solo se disponi dell'accesso come utente root al file system, ad esempio su un emulatore.

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

adb shell cmd package dump-profiles package

Per recuperare il file prodotto, utilizza:

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

Reimpostare i dispositivi di test

Se testi la tua 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 un ripristino dei dati di fabbrica di un dispositivo di test con Android 10 (livello API 29) o versioni successive utilizzando il comando della shell testharness adb, come mostrato di seguito:

adb shell cmd testharness enable

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

Inoltre, per semplificare e rendere più sicuro il test dell'app, l'utilizzo di testharness per ripristinare un dispositivo modifica anche le seguenti impostazioni del dispositivo:

  • Il dispositivo configura determinate impostazioni di sistema in modo che le procedure guidate di configurazione iniziale del dispositivo non vengano visualizzate. Ciò significa che il dispositivo entra in uno stato da 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 degli 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().

sqlite

sqlite3 avvia il programma a riga di comando sqlite per esaminare i 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 comandi SQLite dalla riga di comando, come mostrato:

$ 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 disponi dell'accesso root al file system, ad esempio su un emulatore.

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

Back-end USB adb

Il server adb può interagire con lo stack USB tramite due backend. Può utilizzare il backend nativo del sistema operativo (Windows, Linux o macOS) oppure il backend libusb. Alcune funzionalità, come attach, detach e il rilevamento della velocità USB, sono disponibili solo quando si utilizza il backend libusb.

Puoi scegliere un backend utilizzando la variabile di ambiente ADB_LIBUSB. Se non è impostato, adb utilizza il proprio backend predefinito. Il comportamento predefinito varia in base al sistema operativo. A partire da ADB 34, il backend liubusb viene utilizzato per impostazione predefinita su tutti i sistemi operativi tranne Windows, dove viene utilizzato per impostazione predefinita il backend nativo. Se viene impostato il criterio ADB_LIBUSB, determina se viene utilizzato il backend nativo o libusb. Per ulteriori informazioni sulle variabili di ambiente adb, consulta la pagina del manuale di adb.

Backend mDNS di adb

ADB può utilizzare il protocollo DNS multicast per connettere automaticamente il server e i dispositivi. Il server ADB viene fornito con due backend, Bonjour (mdnsResponder di Apple) e Openscreen.

Il backend di Bonjour richiede che un demone sia in esecuzione sulla macchina host. Su macOS, il daemon integrato di Apple è sempre in esecuzione, ma su Windows e Linux l'utente deve assicurarsi che il daemon mdnsd sia attivo e in esecuzione. Se il comando adb mdns check restituisce un errore, è probabile che ADB stia utilizzando il backend Bonjour, ma non sia in esecuzione alcun demone Bonjour.

Il backend Openscreen non ha bisogno di un daemon in esecuzione sulla macchina. Il supporto del backend Openscreen su macOS inizia dalla versione 35 di ADB. Windows e Linux sono supportati a partire dalla versione 34 di ADB.

Per impostazione predefinita, ADB utilizza il backend Bonjour. Questo comportamento può essere modificato utilizzando la variabile di ambiente ADB_MDNS_OPENSCREEN (impostata su 1 o 0). Per ulteriori dettagli, consulta la pagina del manuale di ADB.