Stetho — ett bibliotek för felsökning av Android-appar, utvecklat av Facebook (Meta) 2014. Verktyget integreras i appen via ett Gradle-beroende och öppnar åtkomst till det interna tillståndet via Chrome DevTools. Enligt repositoryt facebook/stetho (2026) stödjer biblioteket inspektion av SQLite, Network, SharedPreferences, View Hierarchy och Dumpapp-plugins.
De viktigaste punkterna
Stetho — är ett Java-bibliotek som startar en lokal WebSocket-server i Android-appen. Chrome DevTools ansluter till denna server via adb-porten och får åtkomst till appens interna komponenter: databaser, nätverksförfrågningar, preferences och view-hierarki. All kommunikation sker via protokollet Chrome DevTools Protocol, vilket gör att du kan använda webbläsarens standardverktyg utan att installera ytterligare programvara.
Biblioteket består av moduler: stetho (kärnan), stetho-okhttp (fånga trafik via OkHttp), stetho-urlconnection (fånga via HttpURLConnection) och stetho-js-rhino (stöd för JavaScript-plugins). Kärnan öppnar en UNIX-socket som Chrome ansluter till via adb forward. Varje inspektör är implementerad som en separat plugin som registreras vid initieringen av Stetho.
Stetho stödjer Android 4.4+ (API 19) och fungerar endast i debug-byggen. På enheter med Android 11+ krävs ett explicit INTERNET-tillstånd i manifestet. Biblioteket stöds inte officiellt av Facebook sedan 2020, men koden förblir öppen och används i legacy-projekt. För nya projekt rekommenderar Google Android Studio Profiler och Network Inspector.
Anslutning görs via ett Gradle-beroende med flaggan debugImplementation, så att Stetho bara fungerar i debug-bygget. Initieringen sker i metoden Application.onCreate() med ett enda anrop Stetho.initializeWithDefaults(this). För Network Inspector krävs integration med OkHttp via en Interceptor.
// build.gradle (app) — anslut Stetho
dependencies {
debugImplementation 'com.facebook.stetho:stetho:1.6.0'
debugImplementation 'com.facebook.stetho:stetho-okhttp3:1.6.0'
}
// Initiering i Application-klassen
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}
}
För att fånga nätverksförfrågningar via OkHttp lägger du till StethoInterceptor i interceptor-kedjan. Stetho loggar automatiskt URL:en, rubriker för förfrågan och svar, statuskod och exekveringstid. Data visas på fliken Network i Chrome DevTools efter anslutning till enheten via chrome://inspect.
Stethos Network Inspector visar alla HTTP-förfrågningar från appen i kronologisk ordning. För varje förfrågan finns: metod, URL, statuskod, rubriker för förfrågan och svar, brödtext för förfrågan och svar (inklusive JSON och binärdata). Fliken Preview visar svarstexten i formaterad form.
Chrome DevTools stödjer filtrering av förfrågningar efter typ (XHR, JS, CSS, Doc), statuskod och domän. Sökfältet filtrerar efter URL och innehåll. För mobilutveckling är det användbart att gruppera förfrågningar efter API-domän och kontrollera anropsordningen när du testar appens skärmar.
// OkHttp-klient med Stetho-interceptor
OkHttpClient client = new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor())
.build();
// Utför förfrågan
Request request = new Request.Builder()
.url("https://api.example.com/users")
.build();
client.newCall(request).enqueue(callback);
Stethos Database Inspector ansluter till appens SQLite-databaser via Chrome DevTools. På fliken Resources → Web SQL visas alla öppnade databaser, deras tabeller och innehåll. Visning av tabellstrukturer, index och exekvering av godtyckliga SQL-frågor är tillgängligt.
I Chrome DevTools konsol kan du köra SQL-frågor direkt mot appens databas: SELECT, INSERT, UPDATE, DELETE. Detta är användbart för att rensa data före testning, kontrollera migreringars korrekthet och manuellt korrigera felaktiga poster utan att bygga om appen. Alla ändringar syns omedelbart på enheten.
Dumpapp — är Stethos shell-gränssnitt som gör att du kan köra anpassade kommandon via adb. Dumpapp-plugins registreras vid initieringen av Stetho och kan exportera vilket tillstånd som helst i appen: cache, inställningar, DI-containerns tillstånd. Kommandon körs som adb forward tcp:12345 localabstract:stetho_dumpapp.
Pluginen implementerar gränssnittet DumperContext och registreras via Stetho.initialize med en anpassad InspectorModules. Exemplet nedan visar en plugin för dump av SharedPreferences: data serialiseras till JSON och visas i terminalen via ett adb-kommando.
// Anpassad Dumpapp-plugin för 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 erbjuder inbyggda profileringsverktyg: Network Profiler, Database Inspector och View Inspector, som dök upp i Android Studio 4.1+. Stetho var populärt innan dessa verktyg introducerades och förblir aktuellt för projekt som använder OkHttp och kräver integration med Chrome DevTools.
| Kriterium | Stetho | Android Studio Inspector |
|---|---|---|
| Installation | Gradle-beroende | Inbyggt i IDE |
| Network | Via OkHttp Interceptor | Automatiskt för API 26+ |
| SQLite | Chrome DevTools + SQL-frågor | Endast Android Studio |
| SharedPreferences | Ja (Dumpapp-plugin) | Nej |
| View Hierarchy | Chrome DevTools Elements | Layout Inspector |
| Support | Community (legacy) | Officiellt Google |
Stetho är motiverat i legacy-projekt där OkHttp redan används och teamet är vana vid Chrome DevTools. För nya projekt täcker Android Studio Inspector de flesta felsökningsscenarier. Chrome DevTools är dock fortfarande bekvämare för SQLite-frågor: den inbyggda konsolen med automatisk SQL-komplettering är snabbare än upprepade klick i IDE.
View Hierarchy visas i Stetho på fliken Elements i Chrome DevTools som ett DOM-liknande träd. Varje View representeras som ett HTML-element med attribut: id, layout_width, layout_height, padding, margin, visibility och text. Ändringar i trädet synkroniseras i realtid när skärmen roteras eller UI uppdateras.
Genom att välja ett element i trädet kan du visa dess egenskaper på panelen Styles — på samma sätt som när du inspekterar webbsidor. Stetho visar beräknade mått, marginaler, bakgrundsfärg och tillstånd (pressed, focused, enabled). Ändring av vissa egenskaper i DevTools tillämpas omedelbart på appen, vilket påskyndar justeringen av UI-parametrar utan ombyggnad.
Stetho hjälper till att upptäcka minnesläckor relaterade till View: om en Activity inte förstörs efter finish() förblir dess rot-View i trädet. Genom att regelbundet kontrollera fliken Elements kan du lägga märke till fantom-Activitys och hitta källan till läckan — vanligtvis statiska referenser till Context eller ej stängda dialogrutor.
Stetho är effektivt för att kontrollera JSON-serialisering innan den skickas till servern. Öppna Network Inspector, hitta förfrågan och visa brödtexten i Raw-läge för att kontrollera datastrukturen och fältens korrekthet.
Stetho visar alla databaser som skapats via SQLiteOpenHelper. Om databasen inte visas i Chrome DevTools — kontrollera att getWritableDatabase() har anropats minst en gång i appkoden.
Stetho måste vara den sista interceptorn i OkHttp-kedjan för att se ändrade förfrågningar. Korrekt ordning: AuthInterceptor first, sedan LoggingInterceptor, och sist StethoInterceptor.
Stetho är effektivt för att kontrollera korrektheten av JSON-serialisering innan den skickas till servern. Öppna Network Inspector, hitta förfrågan och visa förfrågans brödtext i Raw-läge för att säkerställa korrektheten av fältstrukturen och datatyperna.
Stetho visar alla databaser som skapats via SQLiteOpenHelper. Om databasen inte visas i Chrome DevTools — kontrollera att metoden getWritableDatabase() har anropats minst en gång i appkoden. För migreringar, utför ALTER TABLE via SQL-konsolen och verifiera resultatet med en SELECT-fråga.
Stetho måste vara den sista interceptorn i OkHttp-kedjan för att visa slutliga ändrade förfrågningar. Korrekt sekvens: AuthInterceptor först, sedan LoggingInterceptor, och sist StethoInterceptor för korrekt loggning.
Vanliga frågor
Anslut enheten via USB, kör adb forward tcp:8080 localabstract:stetho_default och öppna i Chrome sidan chrome://inspect. Se till att Stetho har initierats i appkoden och att enheten har upptäckts i listan Remote Target.
Ja, Stetho fungerar på Android 12+, men kräver ett explicit INTERNET-tillstånd i manifestet. På Android 14+ kan en ADB-uppdatering krävas. För nya projekt rekommenderar Google Android Studio Inspector, men Stetho förblir funktionsdugligt på alla versioner.
Ja, SQLite Inspector, SharedPreferences och View Hierarchy fungerar utan OkHttp. Network Inspector kräver integration med OkHttp eller HttpURLConnection via modulerna stetho-okhttp3 eller stetho-urlconnection. Stethos grundkärna är inte beroende av ett nätverksbibliotek.
Använd debugImplementation i Gradle: debugImplementation 'com.facebook.stetho:stetho:1.6.0'. I ett release-bygge kompileras inte Stetho-koden. Om initieringen ligger i en separat klass — linda in anropet med en kontroll av BuildConfig.DEBUG.
De viktigaste alternativen: Chucker (HTTP-inspektion i appen, med UI), verktygen Android Studio Profiler och Network Inspector, samt Flipper (modulär plattform från Facebook med utökad funktionalitet). Chucker är särskilt populärt som en in-app-lösning utan Chrome DevTools.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också