Stetho — knihovna pro ladění aplikací pro Android vyvinutá společností Facebook (Meta) v roce 2014. Nástroj se integruje do aplikace přes závislost Gradle a otevírá přístup k vnitřnímu stavu přes Chrome DevTools. Podle repozitáře facebook/stetho (2026) knihovna podporuje kontrolu SQLite, Network, SharedPreferences, View Hierarchy a pluginů Dumpapp.
Hlavní body
Stetho — Java knihovna, která spouští lokální server WebSocket uvnitř aplikace pro Android. Chrome DevTools se k tomuto serveru připojí přes port adb a získá přístup k vnitřním součástem aplikace: databázím, síťovým požadavkům, preferences a hierarchii view. Veškerá komunikace probíhá přes protokol Chrome DevTools Protocol, což umožňuje používat standardní nástroje prohlížeče bez instalace dalšího softwaru.
Knihovna se skládá z modulů: stetho (jádro), stetho-okhttp (zachycení provozu přes OkHttp), stetho-urlconnection (zachycení přes HttpURLConnection) a stetho-js-rhino (podpora pluginů JavaScript). Jádro otevírá socket UNIX, ke kterému se Chrome připojuje přes adb forward. Každý inspektor je implementován jako samostatný plugin registrovaný při inicializaci Stetho.
Stetho podporuje Android 4.4+ (API 19) a funguje pouze v sestaveních debug. Na zařízeních s Android 11+ je vyžadováno výslovné oprávnění INTERNET v manifestu. Knihovna není od roku 2020 oficiálně podporována společností Facebook, ale kód zůstává otevřený a používá se v projektech legacy. Pro nové projekty Google doporučuje Android Studio Profiler a Network Inspector.
Připojení se provádí přes závislost Gradle s příznakem debugImplementation, aby Stetho fungovalo pouze v sestavení debug. Inicializace probíhá v metodě Application.onCreate() jediným voláním Stetho.initializeWithDefaults(this). Pro Network Inspector je vyžadována integrace s OkHttp přes Interceptor.
// build.gradle (aplikace) — připojení Stetho
dependencies {
debugImplementation 'com.facebook.stetho:stetho:1.6.0'
debugImplementation 'com.facebook.stetho:stetho-okhttp3:1.6.0'
}
// Inicializace ve třídě Application
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}
}
Pro zachycení síťových požadavků přes OkHttp přidejte StethoInterceptor do řetězce interceptorů. Stetho automaticky zaznamenává URL, hlavičky požadavku a odpovědi, stavový kód a dobu provádění. Data se zobrazují na kartě Network v Chrome DevTools po připojení k zařízení přes chrome://inspect.
Network Inspector nástroje Stetho zobrazuje všechny požadavky HTTP aplikace v chronologickém pořadí. Pro každý požadavek jsou k dispozici: metoda, URL, stavový kód, hlavičky požadavku a odpovědi, tělo požadavku a odpovědi (včetně JSON a binárních dat). Karta Preview zobrazuje tělo odpovědi ve formátované podobě.
Chrome DevTools podporuje filtrování požadavků podle typu (XHR, JS, CSS, Doc), stavového kódu a domény. Vyhledávací pole filtruje podle URL a obsahu. Pro mobilní vývoj je užitečné seskupovat požadavky podle domény API a kontrolovat pořadí volání při testování obrazovek aplikace.
// Klient OkHttp s interceptor Stetho
OkHttpClient client = new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor())
.build();
// Provedení požadavku
Request request = new Request.Builder()
.url("https://api.example.com/users")
.build();
client.newCall(request).enqueue(callback);
Database Inspector nástroje Stetho se připojuje k databázím SQLite aplikace přes Chrome DevTools. Na kartě Resources → Web SQL se zobrazují všechny otevřené databáze, jejich tabulky a obsah. K dispozici je prohlížení struktury tabulek, indexů a provádění libovolných dotazů SQL.
V konzoli Chrome DevTools lze provádět dotazy SQL přímo k databázi aplikace: SELECT, INSERT, UPDATE, DELETE. To je užitečné pro čištění dat před testováním, kontrolu správnosti migrací a ruční opravu nesprávných záznamů bez přestavby aplikace. Všechny změny jsou okamžitě viditelné na zařízení.
Dumpapp — rozhraní shell nástroje Stetho, které umožňuje provádět vlastní příkazy přes adb. Pluginy Dumpapp se registrují při inicializaci Stetho a mohou exportovat libovolný stav aplikace: mezipaměť, nastavení, stav kontejneru DI. Příkazy se provádějí jako adb forward tcp:12345 localabstract:stetho_dumpapp.
Plugin implementuje rozhraní DumperContext a registruje se přes Stetho.initialize s vlastním InspectorModules. Následující příklad ukazuje plugin pro dump SharedPreferences: data se serializují do JSON a zobrazí se v terminálu přes příkaz adb.
// Vlastní plugin Dumpapp pro 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 poskytuje vestavěné nástroje profilování: Network Profiler, Database Inspector a View Inspector, které se objevily v Android Studio 4.1+. Stetho bylo populární před zavedením těchto nástrojů a zůstává aktuální pro projekty používající OkHttp a vyžadující integraci s Chrome DevTools.
| Kritérium | Stetho | Android Studio Inspector |
|---|---|---|
| Instalace | Závislost Gradle | Vestavěné v IDE |
| Network | Přes OkHttp Interceptor | Automaticky pro API 26+ |
| SQLite | Chrome DevTools + dotazy SQL | Pouze Android Studio |
| SharedPreferences | Ano (plugin Dumpapp) | Ne |
| View Hierarchy | Chrome DevTools Elements | Layout Inspector |
| Podpora | Community (legacy) | Oficiální Google |
Stetho je opodstatněné v projektech legacy, kde se OkHttp již používá a tým je zvyklý na Chrome DevTools. Pro nové projekty Android Studio Inspector pokrývá většinu scénářů ladění. Chrome DevTools je však stále pohodlnější pro dotazy SQLite: vestavěná konzole s automatickým doplňováním SQL je rychlejší než postupné klikání v IDE.
View Hierarchy se v Stetho zobrazuje na kartě Elements v Chrome DevTools jako strom podobný DOM. Každý View je reprezentován jako prvek HTML s atributy: id, layout_width, layout_height, padding, margin, visibility a text. Změny ve stromu se synchronizují v reálném čase při otočení obrazovky nebo aktualizaci UI.
Výběrem prvku ve stromu lze prohlížet jeho vlastnosti na panelu Styles — podobně jako při kontrole webových stránek. Stetho zobrazuje vypočítané rozměry, mezery, barvu pozadí a stav (pressed, focused, enabled). Změna některých vlastností v DevTools se okamžitě použije na aplikaci, což urychluje výběr parametrů UI bez přestavby.
Stetho pomáhá odhalit úniky paměti související s View: pokud se Activity po finish() nezničí, její kořenový View zůstává ve stromu. Pravidelnou kontrolou karty Elements lze zaznamenat fantomové Activity a najít zdroj úniku — obvykle jde o statické odkazy na Context nebo neuzavřené dialogy.
Stetho je účinné pro kontrolu serializace JSON před odesláním na server. Otevřete Network Inspector, najděte požadavek a prohlédněte si tělo v režimu Raw pro kontrolu struktury dat a správnosti polí.
Stetho zobrazuje všechny databáze vytvořené přes SQLiteOpenHelper. Pokud se databáze nezobrazuje v Chrome DevTools — ověřte, že getWritableDatabase() byl v kódu aplikace zavolán alespoň jednou.
Stetho musí být posledním interceptor v řetězci OkHttp, aby viděl upravené požadavky. Správné pořadí: AuthInterceptor first, poté LoggingInterceptor, a na konci StethoInterceptor.
Stetho je účinné pro kontrolu správnosti serializace JSON před odesláním na server. Otevřete Network Inspector, najděte požadavek a prohlédněte si tělo požadavku v režimu Raw, abyste si ověřili správnost struktury polí a typů dat.
Stetho zobrazuje všechny databáze vytvořené přes SQLiteOpenHelper. Pokud se databáze nezobrazuje v Chrome DevTools — ověřte, že metoda getWritableDatabase() byla v kódu aplikace zavolána alespoň jednou. Pro migrace proveďte ALTER TABLE přes konzoli SQL a výsledek zkontrolujte dotazem SELECT.
Stetho musí být posledním interceptor v řetězci OkHttp, aby zobrazoval konečné upravené požadavky. Správná sekvence: AuthInterceptor první, poté LoggingInterceptor, a na konci StethoInterceptor pro správné protokolování.
Často kladené otázky
Připojte zařízení přes USB, proveďte adb forward tcp:8080 localabstract:stetho_default a v Chrome otevřete stránku chrome://inspect. Ujistěte se, že Stetho je inicializováno v kódu aplikace a zařízení je detekováno v seznamu Remote Target.
Ano, Stetho funguje na Android 12+, ale vyžaduje výslovné oprávnění INTERNET v manifestu. Na Android 14+ může být nutná aktualizace ADB. Pro nové projekty Google doporučuje Android Studio Inspector, ale Stetho zůstává funkční na všech verzích.
Ano, SQLite Inspector, SharedPreferences a View Hierarchy fungují bez OkHttp. Network Inspector vyžaduje integraci s OkHttp nebo HttpURLConnection přes moduly stetho-okhttp3 nebo stetho-urlconnection. Základní jádro Stetho nezávisí na síťové knihovně.
Použijte debugImplementation v Gradle: debugImplementation 'com.facebook.stetho:stetho:1.6.0'. V sestavení release se kód Stetho nekompiluje. Pokud je inicializace vyčleněna do samostatné třídy — obalte volání kontrolou BuildConfig.DEBUG.
Hlavní alternativy: Chucker (kontrola HTTP v aplikaci, s UI), nástroje Android Studio Profiler a Network Inspector a také Flipper (modulární platforma od Facebooku s rozšířenou funkcionalitou). Chucker je obzvláště populární jako řešení in-app bez Chrome DevTools.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také