Stetho è una libreria per il debug delle applicazioni Android, sviluppata da Facebook (Meta) nel 2014. Lo strumento si integra nell'applicazione tramite una dipendenza Gradle e apre l'accesso allo stato interno attraverso Chrome DevTools. Secondo il repository facebook/stetho (2026), la libreria supporta l'ispezione di SQLite, Network, SharedPreferences, View Hierarchy e i plugin Dumpapp.
Punti chiave
Stetho è una libreria Java che avvia un server WebSocket locale all'interno dell'applicazione Android. Chrome DevTools si collega a questo server tramite una porta adb, ottenendo l'accesso ai componenti interni dell'applicazione: database, richieste di rete, preferences e la gerarchia delle viste. Tutta la comunicazione passa attraverso il protocollo Chrome DevTools, che consente di utilizzare gli strumenti standard del browser senza installare software aggiuntivo.
La libreria è composta da moduli: stetho (nucleo), stetho-okhttp (intercettazione del traffico tramite OkHttp), stetho-urlconnection (intercettazione tramite HttpURLConnection) e stetho-js-rhino (supporto ai plugin JavaScript). Il nucleo apre un socket UNIX a cui Chrome si collega tramite adb forward. Ogni ispettore è implementato come plugin separato, registrato all'inizializzazione di Stetho.
Stetho supporta Android 4.4+ (API 19) e funziona solo nelle build di debug. Su dispositivi con Android 11+ è richiesto un permesso INTERNET esplicito nel manifest. La libreria non è ufficialmente supportata da Facebook dal 2020, ma il codice resta aperto e viene utilizzato nei progetti legacy. Per i nuovi progetti Google consiglia Android Studio Profiler e Network Inspector.
Il collegamento avviene tramite una dipendenza Gradle con il flag debugImplementation affinché Stetho funzioni solo nella build di debug. L'inizializzazione avviene nel metodo Application.onCreate() con una singola chiamata a Stetho.initializeWithDefaults(this). Per Network Inspector è richiesta l'integrazione con OkHttp tramite un Interceptor.
// build.gradle (app) — aggiungere Stetho
dependencies {
debugImplementation 'com.facebook.stetho:stetho:1.6.0'
debugImplementation 'com.facebook.stetho:stetho-okhttp3:1.6.0'
}
// Inizializzazione nella classe Application
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}
}
Per intercettare le richieste di rete tramite OkHttp, aggiungere StethoInterceptor alla catena di interceptor. Stetho registra automaticamente l'URL, le intestazioni di richiesta e risposta, il codice di stato e il tempo di esecuzione. I dati vengono visualizzati nella scheda Network di Chrome DevTools dopo il collegamento al dispositivo tramite chrome://inspect.
Il Network Inspector di Stetho mostra tutte le richieste HTTP dell'applicazione in ordine cronologico. Per ogni richiesta sono disponibili: metodo, URL, codice di stato, intestazioni di richiesta e risposta, corpo della richiesta e della risposta (inclusi JSON e dati binari). La scheda Preview mostra il corpo della risposta in forma formattata.
Chrome DevTools supporta il filtro delle richieste per tipo (XHR, JS, CSS, Doc), codice di stato e dominio. Il campo di ricerca filtra per URL e contenuto. Per lo sviluppo mobile è utile raggruppare le richieste per dominio API e verificare la sequenza delle chiamate durante i test degli schermi dell'applicazione.
// Client OkHttp con interceptor Stetho
OkHttpClient client = new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor())
.build();
// Esecuzione di una richiesta
Request request = new Request.Builder()
.url("https://api.example.com/users")
.build();
client.newCall(request).enqueue(callback);
Il Database Inspector di Stetho si collega ai database SQLite dell'applicazione tramite Chrome DevTools. Nella scheda Resources → Web SQL vengono mostrati tutti i database aperti, le loro tabelle e i contenuti. Sono disponibili la visualizzazione della struttura delle tabelle, degli indici e l'esecuzione di query SQL arbitrarie.
Nella console di Chrome DevTools è possibile eseguire query SQL direttamente sul database dell'applicazione: SELECT, INSERT, UPDATE, DELETE. Questo è utile per pulire i dati prima dei test, verificare la correttezza delle migrazioni e correggere manualmente record errati senza ricompilare l'applicazione. Tutte le modifiche sono immediatamente visibili sul dispositivo.
Dumpapp è l'interfaccia shell di Stetho che consente di eseguire comandi personalizzati tramite adb. I plugin Dumpapp vengono registrati all'inizializzazione di Stetho e possono esportare qualsiasi stato dell'applicazione: cache, impostazioni, stato del contenitore DI. I comandi vengono eseguiti come adb forward tcp:12345 localabstract:stetho_dumpapp.
Il plugin implementa l'interfaccia DumperContext e viene registrato tramite Stetho.initialize con un InspectorModules personalizzato. L'esempio seguente mostra un plugin per il dump di SharedPreferences: i dati vengono serializzati in JSON e stampati nel terminale tramite un comando adb.
// Plugin Dumpapp personalizzato per SharedPreferences
public class PrefsDumper implements DumperContext {
@Override
public String getName() {
return "prefs";
}
@Override
public void dump(DumperContext ctx) {
SharedPreferences sp = ctx.getContext()
.getSharedPreferences("app_prefs", Context.MODE_PRIVATE);
ctx.getStdout().println(sp.getAll().toString());
}
}
Android Studio fornisce strumenti di profiling integrati: Network Profiler, Database Inspector e View Inspector, introdotti in Android Studio 4.1+. Stetho era popolare prima dell'introduzione di questi strumenti e resta rilevante per i progetti che usano OkHttp e richiedono l'integrazione con Chrome DevTools.
| Criterio | Stetho | Android Studio Inspector |
|---|---|---|
| Installazione | Dipendenza Gradle | Integrato nell'IDE |
| Network | Tramite OkHttp Interceptor | Automatico per API 26+ |
| SQLite | Chrome DevTools + query SQL | Solo Android Studio |
| SharedPreferences | Sì (plugin Dumpapp) | No |
| View Hierarchy | Elements di Chrome DevTools | Layout Inspector |
| Supporto | Community (legacy) | Ufficiale Google |
Stetho è giustificato nei progetti legacy dove OkHttp è già utilizzato e il team è abituato a Chrome DevTools. Per i nuovi progetti Android Studio Inspector copre la maggior parte degli scenari di debug. Tuttavia, Chrome DevTools resta più comodo per le query SQLite: la console integrata con autocompletamento SQL è più veloce dei clic sequenziali nell'IDE.
La View Hierarchy in Stetho viene mostrata nella scheda Elements di Chrome DevTools come un albero simile al DOM. Ogni View è rappresentata come un elemento HTML con attributi: id, layout_width, layout_height, padding, margin, visibility e testo. Le modifiche nell'albero vengono sincronizzate in tempo reale alla rotazione dello schermo o all'aggiornamento dell'UI.
Selezionando un elemento nell'albero, è possibile visualizzare le sue proprietà nel pannello Styles, in modo simile all'ispezione delle pagine web. Stetho mostra le dimensioni calcolate, i padding, il colore di sfondo e lo stato (pressed, focused, enabled). La modifica di alcune proprietà in DevTools viene applicata immediatamente all'applicazione, accelerando la scelta dei parametri UI senza ricompilazione.
Stetho aiuta a individuare perdite di memoria legate alle View: se un'Activity non viene distrutta dopo finish(), la sua View radice rimane nell'albero. Controllando regolarmente la scheda Elements si possono notare Activity fantasma e trovare la fonte della perdita, di solito riferimenti statici a Context o dialoghi non chiusi.
Stetho è efficace per verificare la serializzazione JSON prima di inviarla al server. Aprire Network Inspector, trovare la richiesta e visualizzare il corpo in modalità Raw per verificare la struttura dei dati e la correttezza dei campi.
Stetho mostra tutti i database creati tramite SQLiteOpenHelper. Se il database non compare in Chrome DevTools, verificare che getWritableDatabase() sia stato chiamato almeno una volta nel codice dell'applicazione.
Stetho deve essere l'ultimo interceptor nella catena OkHttp per vedere le richieste modificate. L'ordine corretto: prima AuthInterceptor, poi LoggingInterceptor, poi StethoInterceptor per ultimo.
Stetho è efficace per verificare la correttezza della serializzazione JSON prima di inviarla al server. Aprire Network Inspector, trovare la richiesta e visualizzare il corpo della richiesta in modalità Raw per assicurarsi della correttezza della struttura dei campi e dei tipi di dati.
Stetho mostra tutti i database creati tramite SQLiteOpenHelper. Se il database non compare in Chrome DevTools, verificare che il metodo getWritableDatabase() sia stato chiamato almeno una volta nel codice dell'applicazione. Per le migrazioni, eseguire ALTER TABLE tramite la console SQL e verificare il risultato con una query SELECT.
Stetho deve essere l'ultimo interceptor nella catena OkHttp per mostrare le richieste modificate finali. La sequenza corretta: AuthInterceptor per primo, poi LoggingInterceptor, poi StethoInterceptor per ultimo per una registrazione corretta.
Domande frequenti
Collegare il dispositivo via USB, eseguire adb forward tcp:8080 localabstract:stetho_default e aprire in Chrome la pagina chrome://inspect. Assicurarsi che Stetho sia inizializzato nel codice dell'applicazione e che il dispositivo sia rilevato nell'elenco Remote Target.
Sì, Stetho funziona su Android 12+, ma richiede un permesso INTERNET esplicito nel manifest. Su Android 14+ può essere necessario un aggiornamento di ADB. Per i nuovi progetti Google consiglia Android Studio Inspector, ma Stetho resta funzionante su tutte le versioni.
Sì, SQLite Inspector, SharedPreferences e View Hierarchy funzionano senza OkHttp. Network Inspector richiede l'integrazione con OkHttp o HttpURLConnection tramite i moduli stetho-okhttp3 o stetho-urlconnection. Il nucleo di base di Stetho non dipende da una libreria di rete.
Usare debugImplementation in Gradle: debugImplementation 'com.facebook.stetho:stetho:1.6.0'. Nella build di release il codice di Stetho non viene compilato. Se l'inizializzazione è in una classe separata, avvolgere la chiamata con un controllo di BuildConfig.DEBUG.
Le principali alternative: Chucker (ispezione HTTP nell'app, con UI), gli strumenti Android Studio Profiler e Network Inspector, oltre a Flipper (una piattaforma modulare di Facebook con funzionalità estese). Chucker è particolarmente popolare come soluzione in-app senza Chrome DevTools.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche