Vai direttamente al contenuto principale

Guida completa pratica al terminale dell'emulatore Android: adb shell, comandi console, forwarding dei porti e consigli di risoluzione dei problemi per Windows, macOS e Linux nel 2026.

Martin Donadieu

Martin Donadieu

Content Marketer

Guida completa pratica al terminale dell'emulatore Android: adb shell, comandi console, forwarding dei porti e consigli di risoluzione dei problemi per Windows, macOS e Linux nel 2026.

Se il tuo emulatore è aperto, l'app è bloccata su uno schermo nero e i controlli GUI non aiutano. Oppure, potresti essere di fronte a un lavoro di CI che non ha alcuna visualizzazione, e l'unica cosa rimasta è un prompt del terminale e un dispositivo virtuale che deve avviarsi, accettare comandi e comportarsi allo stesso modo ogni volta. È in questo punto che il terminale dell'emulatore Android smette di essere una comodità e diventa il piano di controllo su cui ti fidi.

La trasformazione importante è semplice: il terminale non è solo un modo diverso per cliccare sui medesimi pulsanti. Lo strumento dell'emulatore di Google ti offre strati separati per l'avvio, il lavoro con il shell e il controllo della console, e ogni strato risolve una classe diversa di problemi. Se li trattassi come una cosa sola, i tuoi script diventerebbero instabili, le vecchie opzioni continuerebbero a infiltrarsi nel tuo workflow e il CI si romperebbe in modi che sembrano casuali ma non lo sono.

Martin Donadieu

Indice dei Contenuti

Perché Hai Bisogno del Terminale dell'Emulatore Android

Un GUI congelato è il caso evidente. La finestra dell'emulatore è ancora aperta, ma non puoi fidarti di essa, non puoi cliccare attraverso di essa e quel flusso di lavoro non scalerebbe a un server di costruzione. Il terminale gestisce la parte che la finestra non poteva mai fare, la ripetibilità. I documenti dell'emulatore di Google descrivono la riga di comando e la console come strumenti per l'automazione e il controllo remoto, con sintassi di avvio come emulator -avd avd_name o emulator @avd_nameopzioni disponibili attraverso emulator -help Riferimento alla riga di comando per l'emulatore Android.

Perché gli squadri standardizzano sul controllo della terminale

La prima volta che questo conta è di solito poco glamour. Uno script QA richiede uno stato di dispositivo pulito, uno sviluppatore richiede lo stesso AVD per avviarsi su Linux e macOS, o un esecutore di CI deve avviare un target di test senza che nessuno stia guardando una finestra. In quel momento, l'emulatore smette di comportarsi come un'app desktop e inizia a comportarsi come infrastruttura.

Regola pratica: se una task deve essere ripetuta, registrata o recuperata dopo il fallimento, utilizzare per primo la via della terminale.

Google colloca anche l'emulatore accanto adb nel set di strumenti di riga di comando ufficiale, il che conta perché l'automazione Android è una pila di interfacce, non un'unica interfaccia che cerca di fare tutto Strumenti adb e emulator per AndroidUsare adb per l'ispezione del dispositivo e l'accesso alla shell, quindi utilizzare la console dell'emulatore per il controllo del ciclo di vita e i comandi specifici dell'emulatore. Mescolare quei ruoli è come come i script diventano fragili.

The altri preconcetti da abbandonare sono che il terminale dell'emulatore è solo un wrapper intorno alla GUI. Non è vero. La console è autenticata, legata ai porti locali e supporta comandi come avd start, avd stop, avd status, ping, e rotate Riferimento alla console dell'emulatore Android. Ecco perché si comporta come un controllo di piano di produzione, non come un sandbox per principianti.

Per flussi di lavoro ibridi e Capacitor , la stessa disciplina conta prima di installare o debuggare qualsiasi cosa. Vedi Configurazione Android per Capacitor app per il lato di configurazione che di solito si trova dietro la sessione dell'emulatore.

Lanciare Emulatori dalla Riga di Comando

La prima riga che conta è quella che mostra cosa è già disponibile. Esegui emulator -list-avds, scegli l'AVD che desideri, quindi avvialo con emulator -avd <name> o emulator @<name>. Se il percorso del binario non è presente nella tua shell PATH, trovalo all'interno della directory dell'emulatore Android SDK su Windows, macOS o Linux, quindi eseguilo direttamente da lì.

Un sviluppatore sta digitando comandi CLI sullo schermo di un computer portatile mentre lavora su un tavolo di legno.

Le bandiere di lancio che ancora contano

La partenza pulita è la differenza tra un esecuzione sana e una sessione di debug che mangia la tua mattina. Nel lavoro di tutti i giorni, le bandiere del terminale utili sono quelle che rendono il comportamento di avvio predittibile, soprattutto per i CI e gli host senza testa. -no-window è il percorso senza testa, -no-snapshot imposta uno stato pulito, -no-audio e -no-boot-anim elimina rumori non necessari, e -gpu swiftshader_indirect è un fallback pratico quando l'accelerazione hardware non è disponibile.

Quella combinazione è la differenza tra “l'emulatore è partito” e “l'emulatore è partito in un modo che un flusso di lavoro può fidarsi.” La comandi di lancio diventa parte del tuo contratto di test, non solo un wrapper di comodo. Se stai avviando un dispositivo per un flusso di lavoro di app Capacitor o ibrido, la stessa disciplina di lancio si applica prima di qualsiasi passo di debug o installazione. Una guida pratica per lo setup di Android per i sviluppatori Capacitor è utile tenere accanto ai comandi dell'emulatore.

Inizia con l'elenco dei dispositivi, non con la memoria

L'errore che vedo più spesso è l'hardcoding di assunzioni prima di controllare cosa il computer ha. Elencare gli AVD prima salva tempo perché ti dice se l'immagine che vuoi esiste e se il tuo shell può vederla. Poi lanci un dispositivo noto, osserva il percorso di avvio e solo dopo ciò tuni le bandiere.

Consiglio utile: mantieni un comando di lancio pulito per il lavoro locale e uno più rigoroso per la CI. Non lasciare che il flusso di lavoro erediti ogni flag di comodità dal tuo laptop.

Questa separazione mantiene il debug locale amichevole senza rendere l'automazione sconsiderata. Una volta che il lancio è stabile, il resto del flusso di lavoro del terminale finalmente ha qualcosa di affidabile a cui agganciarsi.

Guida dell'emulatore con adb Shell

Una volta che l'emulatore è acceso, adb diventa la superficie di controllo che utilizzi più spesso. adb devices mostra cosa è attaccato, e adb -s emulator-5554 shell ti consente di targetizzare un istanza specifica su un porto specifico. Ciò conta su una macchina con più dispositivi virtuali, perché i comandi generici possono facilmente colpire il bersaglio sbagliato. Il numero di serie mantiene la tua automazione puntata sull'emulatore che hai voluto utilizzare.

Infografica a tre passaggi che mostra il processo di comando adb shell per la gestione e lo sviluppo dell'emulatore Android.

Connetti, poi decidi se hai bisogno di una shell

La separazione tra comandi uno-a-uno e una shell interattiva conta più di quanto sembri inizialmente. Se hai bisogno solo di esaminare una impostazione o di raccogliere un file, un comando singolo è sufficiente adb shell il comando è più pulito. Se stai tracciando il comportamento dell'app passo dopo passo, inseriti in una shell interattiva e rimani lì fino a quando il lavoro è fatto.

adb push e adb pull gestisce il movimento dei file, adb install -r è il percorso pratico per test locali ripetuti, e adb exec-out screencap ti da una route di cattura di screenshot affidabile. La registrazione della schermata attraverso adb shell screenrecord è altrettanto diretta quando hai bisogno di un artefatto veloce da un run che fallisce. Per i flussi di lavoro di caricamento locale e caricamento di pacchetti, questa guida di installazione è un utile compagno.

Usa adb per il lavoro dell'app, non per il lavoro del ciclo di vita dell'emulatore

adb è il layer giusto per i comandi che eseguono all'interno di Android stesso. Se hai uno script memorizzato nella memoria condivisa, adb shell sh /sdcard/run.sh si adatta bene alle pile di automazione reali. È anche il layer in cui run-as <package> diventa utile per i build di debug, poiché ti da i file dell'app privati senza costringere la root.

La limitazione è chiara. adb non sostituisce la console dell'emulatore e non è lo strumento giusto per il controllo più profondo del ciclo di vita dell'emulatore o per azioni console-only. Utilizzalo per il trasferimento di file, la gestione dei pacchetti, l'esecuzione di comandi e la ricognizione rapida, e fermati lì.

Regola pratica: se l'azione appartiene ad Android, inizia con adb shellSe l'azione appartiene all'emulatore stesso, utilizza la console.

Per gli squadre che lavorano attraverso layer di plugin, comportamento specifico della piattaforma e domande di stato dispositivo, uno strumento di debug più ampio aiuta a mantenere il lavoro di terminale da diventare supposizione. Questo strumento di debug si adatta bene accanto al workflow adb.


Utilizzare la Console dell'Emulatore oltre adb

La console dell'emulatore è un piano di controllo separato, e questa distinzione conta. Google lo documenta come ascoltare solo sui porti localhost 5554 attraverso 5585, con autenticazione richiesta prima che i comandi siano accettati, e con comandi come avd start, avd stop, avd status, ping, e rotate disponibile non appena ti sei connesso. Ciò lo rende lo strumento giusto per azioni a livello di emulatore che adb non possono esprimersi in modo pulito.

Un infographic intitolata Essenziali per la console dell'emulatore che mostra quattro passaggi numerati per il controllo di un emulatore Android tramite terminale.

Autenticati prima di inviare qualcosa di utile

è il percorso documentato da Google per connettersi con telnet localhost console-port, aspetta OK, poi invia auth auth_token utilizzando il token memorizzato in ~/.emulator_console_auth_token. Se il file del token non esiste, la connessione telnet lo crea con un token casuale. In ambienti CI ephemeri, ciò significa che devi preservare intenzionalmente il file o resettarlo deliberatamente, perché le sorprese di autenticazione fallite sono quasi sempre errori di gestione dello stato.

La console è anche scopribile. help, help command, e help-verbose ci sono per una ragione, e risparmiano tempo quando controlli quali comandi l'emulatore accetta. Questo è un miglioramento rispetto a indovinare e sperare adb può coprire in seguito.

Sai cosa appartiene alla console

I comandi della console sono per il ciclo di vita e lo stato del dispositivo emulato. avd start e avd stop sono esempi evidenti, ma rotate e ping sono altrettanto utili quando si controlla la risposta o si simulano cambiamenti di dispositivo. L'emulatore funziona come infrastruttura in questo contesto, perché puoi scrivere la preparazione e lo spegnimento nello stesso posto in cui scrivi l'avvio.

L'errore comune è mescolare la console dell'emulatore con la shell di Android. Sembra simile da lontano, ma i protocolli sono diversi. La console è autenticata e vincolata al porto, mentre l'accesso alla shell è di solito gestito attraverso adb shell, quindi i script hanno bisogno di timeout e gestione degli errori diversi. Per la affidabilità del terminale nelle workflow specifiche delle piattaforme, questa risorsa di debug si abbina bene con i controlli di preparazione della console.

Buona porta di controllo per l'automazione: Non iniziare i test sul lancio del processo da solo. Inizia solo dopo che il console handshake ha avuto successo e il dispositivo virtuale ha riferito lo stato che aspetti.

Quella decisione elimina molte fallite 'avviato ma non pronto' prima che mai raggiungano il tuo set di test.

Applicazioni Terminali e Accesso Root all'Emulatore

A volte il lavoro appartiene all'interno della VM, non sul host. In quel caso, installare una vera applicazione di terminale all'interno dell'emulatore è la scelta più semplice, e Termux è la scelta standard. Dà un ambiente di shell dispositivo che è molto più vicino a un vero workflow Unix che toccare intorno nelle schermate di impostazioni.

Root quando l'immagine lo consente

L'accesso root dipende dall'immagine, non è magico. Sugli immagini di sistema che lo consentono, adb root e adb shell su puoi arrivare dove devi andare, ma le immagini di Google Play standard non sono il posto in cui aspettarsi un lavoro root confortevole. Le AVD personalizzate sono generalmente più flessibili quando hai bisogno di accessi più profondi.

BusyBox è ancora utile in questo strato perché completa le lacune nel set di comandi che altrimenti mancherebbero. Se stai facendo l'ispezione dei file, lo scripting dispositivo o i diagnostici veloci all'interno dell'emulatore, un toolkit Unix più completo rende la macchina molto meno limitata. Le relative verifiche di root per i progetti Capacitor sono discusse in questa guida del plugin.

Utilizza l'accesso privato dell'app prima di escalation

Non ogni problema richiede root. Per i build di debug, adb shell run-as <package> spesso è sufficiente per esaminare i directory privati dell'app senza allargare il raggio d'azione. Questo è un'abitudine più pulita perché mantiene il tuo workflow allineato con lo strumento meno potente che ancora fa il lavoro.

Se hai bisogno di scritture di sistema, la partizione di sistema deve essere scrivibile, e questo è un tipo di configurazione diverso. Per il lavoro di emulator di tutti i giorni, il lato host adb shell rimane il punto di partenza migliore, e i terminali di rete del dispositivo sono meglio trattati come un layer specializzato per i casi in cui l'accesso al host non è sufficiente. La regola del pollice è semplice, utilizza l'autorità più piccola che può ancora riprodurre il bug.

Networking, Port Forwarding, e Shortcuts del Tastiera

Un flusso di lavoro dell'emulatore basato sui terminali diventa reale non appena il traffico deve attraversare il confine del host. adb reverse tcp:8080 tcp:8080 è il modo più pulito per puntare un emulatore a un server di sviluppo locale in esecuzione sul tuo computer, specialmente quando l'app si aspetta di chiamare indietro i servizi del host. adb forward gestisce il caso opposto, dove il traffico dal dispositivo deve raggiungere un ascoltatore sul host.

Scegli la direzione giusta prima di debuggare il layer sbagliato

Molto tempo perso deriva dal chiamare ogni problema di rete “un problema dell'emulatore.” In pratica, la direzione del porto è spesso sbagliata. adb reverse consente all'emulatore di raggiungere un servizio del host, mentre adb forward inviare il traffico del dispositivo verso un porto del host, quindi il percorso della connessione decide quale comando si applica.

Se la connessione sembra ancora sbagliata, controlla la tabella di routing all'interno della VM con adb shell ip route e ispeziona gli interfacce con ifconfigQuando la routing sembra normale, ma il servizio rifiuta ancora le connessioni, il difetto solitamente si trova sul listener del host o nella configurazione di forwarding, non in Android stesso. Per una visione più ampia di come i ritardi della traffico locale influenzano ciò che vedi durante la debug, questo spiegatore di ritardo di rete

è una lettura di compagnia utile.

Il controllo della tastiera fa parte della storia del terminale La mappatura della tastiera di Google trasforma l'emulatore in un bersaglio desktop molto migliore. F2 apre Menu, ESC funge da Indietro, F7 Alt-Inserisce toggles fullscreen. Lo stesso mapping copre anche controlli della telecamera, del volume e dell'orientamento, quindi molti comportamenti del dispositivo rimangono sul tastierino invece di essere nascosti nella barra degli strumenti.

Questo conta sui portatili e sui monitor grandi. Una volta che la superficie di controllo vive sul tastierino, l'emulatore inizia a comportarsi come uno strumento con cui puoi lavorare tutto il giorno, non come una finestra che continui a spingere con il mouse.

Flag obsoleta Cosa faceva in precedenza Sostituzione moderna
-audio-in Abilita il controllo di input audio Eliminalo dai script di avvio, non funziona più nei documenti correnti
-audio-out Abilita il controllo di output audio Eliminalo dai script di avvio, non funziona più nei documenti correnti
-enable-kvm Richiesto un percorso di virtualizzazione Eliminalo dai script di avvio, non funziona più nei documenti correnti
-gps Comportamento GPS controllato Rimuovilo dalle script di avvio, non funziona più nei documenti correnti
-skin Imposta la pelle del dispositivo Rimuovilo dalle script di avvio, non funziona più nei documenti correnti
-skindir Puntato a una directory della pelle Rimuovilo dalle script di avvio, non funziona più nei documenti correnti
-useaudio Attivato l'uso dell'audio Rimuovilo dalle script di avvio, non funziona più nei documenti correnti

Google elenca quelle bandiere come non funzionanti più nei documenti correnti dell'emulatore, quindi i vecchi snippet tendono a marcire velocemente quando vengono copiati in uno script fresco Note di riga di comando dell'emulatore correnteSe ancora li hai in uno script di shell condiviso, rimuovili e testa di nuovo la partenza.

Risolvere i problemi e il flusso di lavoro del terminale 2026

Schermo nero, conflitti di porta e snapshot obsoleti sono il cluster di fallimenti più comune. Le soluzioni sono facili da trovare quando si mappa sintomo a causa. Un avvio bloccato spesso indica uno stato di snapshot, mentre gli errori di autenticazione del console indicano spesso che il file del token o il handshake non sono sincronizzati. offline, unauthorized, KO: missing authScreenshot da https://__CAPGO_KEEP_0__.app

Screenshot from https://capgo.app

Se l'emulatore non riesce mai a superare uno schermo nero, riavviare con un percorso di avvio pulito e elimina lo stato obsoleto. Se

dice adb o offline , riattacca il dispositivo e verifica che l'host e l'istanza dell'emulatore siano ancora sincronizzate. Se il console restituisce unauthorized, controlla il file del token e il percorso di handshake prima di tutto, perché il console non accetterà comandi fino a quando quel passo non è corretto. KO: missing authIl conflitto di porta è spesso un segno che un emulatore precedente non si è spento correttamente, quindi la porta occupata deve essere liberata prima della prossima esecuzione. Se l'avvio non completa mai, supponi che ci sia una deriva dello snapshot fino a quando non si trova la prova contraria e forza un avvio deterministico. Quella abitudine, più di qualsiasi flag individuale, è ciò che rende il flusso di lavoro del terminale affidabile nel 2026.

Tratta il flusso di lavoro come un sistema, non come una sequenza di clic

Il pattern duraturo è un avvio prevedibile, un accesso al console autenticato,

Treat the workflow like a system, not a sequence of clicks adb shell For il lavoro a livello di app, e un percorso di rollback quando si verifica una deriva di stato. Quella è la disciplina dietro l'iterazione mobile veloce, indipendentemente dal fatto che stiate testando un'app nativa o inviando aggiornamenti a un'app Capacitor attraverso un flusso di rilascio controllato.

La fiducia è il guadagno. Una volta che il terminale dell'emulatore è collegato come piano di controllo, smettete di chiedere se la finestra è rispondente e iniziate a chiedere se lo stato dispositivo è esattamente ciò che il vostro test si aspetta.


Se state costruendo app mobili che richiedono percorsi di rilascio e recupero affidabili insieme al testing guidato dall'emulatore, Capgo offre alle squadre un modo veloce per inviare correzioni JavaScript, CSS, configurazione e asset senza dover aspettare la revisione della store. Visita Capgo per vedere come gli aggiornamenti in tempo reale, la protezione del rollback e i controlli di rilascio si integrano in un flusso di lavoro in cui il testing Android guidato dal terminale conta.

Aggiornamenti in tempo reale per le app Capacitor

Quando un bug del layer web è attivo, invia la correzione attraverso Capgo invece di aspettare giorni per l'approvazione della store. Gli utenti ricevono l'aggiornamento in background mentre le modifiche native rimangono nel normale percorso di revisione.

Inizia subito

Ultimi articoli dal nostro Blog

Capgo ti offre le migliori informazioni che ti servono per creare un'app mobile davvero professionale.