Stetho — o bibliotecă pentru depanarea aplicațiilor Android, dezvoltată de Facebook (Meta) în 2014. Instrumentul se integrează în aplicație prin dependența Gradle și deschide accesul la starea internă prin Chrome DevTools. Conform depozitului facebook/stetho (2026), biblioteca suportă inspecția SQLite, Network, SharedPreferences, View Hierarchy și a pluginurilor Dumpapp.
Principalele
Stetho — este o bibliotecă Java care pornește un server local WebSocket în interiorul aplicației Android. Chrome DevTools se conectează la acest server prin portul adb, obținând acces la componentele interne ale aplicației: baze de date, cereri de rețea, preferences și ierarhia view. Toată comunicarea trece prin protocolul Chrome DevTools Protocol, ceea ce permite utilizarea instrumentelor standard ale browserului fără instalarea de software suplimentar.
Biblioteca este formată din module: stetho (nucleul), stetho-okhttp (interceptarea traficului prin OkHttp), stetho-urlconnection (interceptarea prin HttpURLConnection) și stetho-js-rhino (suport pentru pluginuri JavaScript). Nucleul deschide un socket UNIX la care Chrome se conectează prin adb forward. Fiecare inspector este implementat ca un plugin separat, înregistrat la inițializarea Stetho.
Stetho suportă Android 4.4+ (API 19) și funcționează doar în build-urile de debug. Pe dispozitivele cu Android 11+ este necesară permisiunea explicită INTERNET în manifest. Biblioteca nu este susținută oficial de Facebook din 2020, dar codul rămâne deschis și este folosit în proiectele legacy. Pentru proiectele noi, Google recomandă Android Studio Profiler și Network Inspector.
Conectarea se face prin dependența Gradle cu flag-ul debugImplementation, pentru ca Stetho să funcționeze doar în build-ul de debug. Inițializarea are loc în metoda Application.onCreate() printr-un singur apel Stetho.initializeWithDefaults(this). Pentru Network Inspector este necesară integrarea cu OkHttp prin Interceptor.
// build.gradle (aplicație) — conectarea Stetho
dependencies {
debugImplementation 'com.facebook.stetho:stetho:1.6.0'
debugImplementation 'com.facebook.stetho:stetho-okhttp3:1.6.0'
}
// Inițializare în clasa Application
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}
}
Pentru interceptarea cererilor de rețea prin OkHttp, adăugați StethoInterceptor în lanțul de interceptori. Stetho loghează automat URL-ul, antetele cererii și răspunsului, codul de status și timpul de execuție. Datele se afișează în tab-ul Network din Chrome DevTools după conectarea la dispozitiv prin chrome://inspect.
Network Inspector al Stetho afișează toate cererile HTTP ale aplicației în ordine cronologică. Pentru fiecare cerere sunt disponibile: metoda, URL-ul, codul de status, antetele cererii și răspunsului, corpul cererii și răspunsului (inclusiv JSON și date binare). Tab-ul Preview afișează corpul răspunsului într-o formă formatată.
Chrome DevTools suportă filtrarea cererilor după tip (XHR, JS, CSS, Doc), cod de status și domeniu. Câmpul de căutare filtrează după URL și conținut. Pentru dezvoltarea mobilă este util să grupați cererile după domeniul API și să verificați secvența de apeluri la testarea ecranelor aplicației.
// Client OkHttp cu interceptor Stetho
OkHttpClient client = new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor())
.build();
// Executarea cererii
Request request = new Request.Builder()
.url("https://api.example.com/users")
.build();
client.newCall(request).enqueue(callback);
Database Inspector al Stetho se conectează la bazele de date SQLite ale aplicației prin Chrome DevTools. În tab-ul Resources → Web SQL sunt afișate toate bazele de date deschise, tabelele lor și conținutul. Este disponibilă vizualizarea structurii tabelelor, a indecșilor și executarea de interogări SQL arbitrare.
În consola Chrome DevTools puteți executa interogări SQL direct către baza aplicației: SELECT, INSERT, UPDATE, DELETE. Acest lucru este util pentru curățarea datelor înainte de testare, verificarea corectitudinii migrărilor și corectarea manuală a înregistrărilor incorecte fără recompilarea aplicației. Toate modificările sunt imediat vizibile pe dispozitiv.
Dumpapp — este interfața shell a Stetho care permite executarea de comenzi personalizate prin adb. Pluginurile Dumpapp se înregistrează la inițializarea Stetho și pot exporta orice stare a aplicației: cache, setări, starea containerului DI. Comenzile se execută ca adb forward tcp:12345 localabstract:stetho_dumpapp.
Pluginul implementează interfața DumperContext și se înregistrează prin Stetho.initialize cu un InspectorModules personalizat. Exemplul de mai jos arată un plugin pentru dump-ul SharedPreferences: datele sunt serializate în JSON și afișate în terminal prin comanda adb.
// Plugin personalizat Dumpapp pentru 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 oferă instrumente de profilare integrate: Network Profiler, Database Inspector și View Inspector, apărute în Android Studio 4.1+. Stetho a fost popular până la introducerea acestor instrumente și rămâne relevant pentru proiectele care folosesc OkHttp și necesită integrare cu Chrome DevTools.
| Criteriu | Stetho | Android Studio Inspector |
|---|---|---|
| Instalare | Dependență Gradle | Integrat în IDE |
| Network | Prin OkHttp Interceptor | Automat pentru API 26+ |
| SQLite | Chrome DevTools + interogări SQL | Doar Android Studio |
| SharedPreferences | Da (plugin Dumpapp) | Nu |
| View Hierarchy | Chrome DevTools Elements | Layout Inspector |
| Suport | Community (legacy) | Oficial Google |
Stetho este justificat în proiectele legacy unde OkHttp este deja folosit și echipa este obișnuită cu Chrome DevTools. Pentru proiectele noi, Android Studio Inspector acoperă majoritatea scenariilor de depanare. Totuși, Chrome DevTools este în continuare mai comod pentru interogările SQLite: consola integrată cu autocompletare SQL este mai rapidă decât click-urile succesive în IDE.
View Hierarchy în Stetho este afișat în tab-ul Elements din Chrome DevTools ca un arbore asemănător cu DOM. Fiecare View este reprezentat ca un element HTML cu atribute: id, layout_width, layout_height, padding, margin, visibility și text. Modificările din arbore se sincronizează în timp real la rotirea ecranului sau la actualizarea UI.
Selectând un element în arbore, puteți vizualiza proprietățile sale în panoul Styles — similar inspecției paginilor web. Stetho afișează dimensiunile calculate, spațierile, culoarea de fundal și starea (pressed, focused, enabled). Modificarea unor proprietăți în DevTools se aplică imediat aplicației, ceea ce accelerează ajustarea parametrilor UI fără recompilare.
Stetho ajută la detectarea scurgerilor de memorie legate de View: dacă Activity nu este distrusă după finish(), View-ul său rădăcină rămâne în arbore. Prin verificarea regulată a tab-ului Elements puteți observa Activity-uri fantomă și găsi sursa scurgerii — de obicei sunt referințe statice la Context sau dialoguri neînchise.
Stetho este eficient pentru verificarea serializării JSON înainte de trimiterea pe server. Deschideți Network Inspector, găsiți cererea și vizualizați corpul în modul Raw pentru a verifica structura datelor și corectitudinea câmpurilor.
Stetho afișează toate bazele create prin SQLiteOpenHelper. Dacă baza nu apare în Chrome DevTools — verificați că getWritableDatabase() a fost apelat cel puțin o dată în codul aplicației.
Stetho trebuie să fie ultimul interceptor din lanțul OkHttp pentru a vedea cererile modificate. Ordinea corectă: AuthInterceptor first, apoi LoggingInterceptor, iar StethoInterceptor la final.
Stetho este eficient pentru verificarea corectitudinii serializării JSON înainte de trimiterea pe server. Deschideți Network Inspector, găsiți cererea și vizualizați corpul cererii în modul Raw pentru a vă asigura de corectitudinea structurii câmpurilor și a tipurilor de date.
Stetho afișează toate bazele de date create prin SQLiteOpenHelper. Dacă baza nu apare în Chrome DevTools — verificați că metoda getWritableDatabase() a fost apelată cel puțin o dată în codul aplicației. Pentru migrări, executați ALTER TABLE prin consola SQL și verificați rezultatul cu o interogare SELECT.
Stetho trebuie să fie ultimul interceptor din lanțul OkHttp pentru a afișa cererile finale modificate. Secvența corectă: AuthInterceptor primul, apoi LoggingInterceptor, iar StethoInterceptor la final pentru logarea corectă.
Întrebări frecvente
Conectați dispozitivul prin USB, executați adb forward tcp:8080 localabstract:stetho_default și deschideți în Chrome pagina chrome://inspect. Asigurați-vă că Stetho este inițializat în codul aplicației și dispozitivul a fost detectat în lista Remote Target.
Da, Stetho funcționează pe Android 12+, dar necesită permisiunea explicită INTERNET în manifest. Pe Android 14+ poate fi necesară actualizarea ADB. Pentru proiectele noi Google recomandă Android Studio Inspector, dar Stetho rămâne funcțional pe toate versiunile.
Da, SQLite Inspector, SharedPreferences și View Hierarchy funcționează fără OkHttp. Network Inspector necesită integrare cu OkHttp sau HttpURLConnection prin modulele stetho-okhttp3 sau stetho-urlconnection. Nucleul de bază al Stetho nu depinde de o bibliotecă de rețea.
Folosiți debugImplementation în Gradle: debugImplementation 'com.facebook.stetho:stetho:1.6.0'. În build-ul release, codul Stetho nu este compilat. Dacă inițializarea este mutată într-o clasă separată — înfășurați apelul cu verificarea BuildConfig.DEBUG.
Principalele alternative: Chucker (inspecția HTTP în aplicație, cu UI), instrumentele Android Studio Profiler și Network Inspector, precum și Flipper (platformă modulară de la Facebook cu funcționalitate extinsă). Chucker este deosebit de popular ca soluție in-app fără Chrome DevTools.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și