Stetho — biblioteka do debugowania aplikacji Android, opracowana przez Facebook (Meta) w 2014 roku. Narzędzie integruje się z aplikacją przez zależność Gradle i otwiera dostęp do stanu wewnętrznego przez Chrome DevTools. Według repozytorium facebook/stetho (2026), biblioteka obsługuje inspekcję SQLite, Network, SharedPreferences, View Hierarchy i wtyczek Dumpapp.
Najważniejsze
Stetho — to biblioteka Java, która uruchamia lokalny serwer WebSocket wewnątrz aplikacji Android. Chrome DevTools łączy się z tym serwerem przez port adb, uzyskując dostęp do wewnętrznych komponentów aplikacji: baz danych, zapytań sieciowych, preferences i hierarchii widoków. Cała komunikacja przebiega przez protokół Chrome DevTools Protocol, co pozwala korzystać ze standardowych narzędzi przeglądarki bez instalowania dodatkowego oprogramowania.
Biblioteka składa się z modułów: stetho (rdzeń), stetho-okhttp (przechwytywanie ruchu przez OkHttp), stetho-urlconnection (przechwytywanie przez HttpURLConnection) oraz stetho-js-rhino (obsługa wtyczek JavaScript). Rdzeń otwiera gniazdo UNIX, do którego Chrome łączy się przez adb forward. Każdy inspektor jest zaimplementowany jako osobna wtyczka rejestrowana podczas inicjalizacji Stetho.
Stetho obsługuje Android 4.4+ (API 19) i działa tylko w wersjach debug. Na urządzeniach z Android 11+ wymagane jest jawne uprawnienie INTERNET w manifeście. Biblioteka nie jest oficjalnie wspierana przez Facebook od 2020 roku, ale kod pozostaje otwarty i jest używany w projektach legacy. Do nowych projektów Google zaleca Android Studio Profiler i Network Inspector.
Podłączenie wykonuje się przez zależność Gradle z flagą debugImplementation, aby Stetho działał tylko w wersji debug. Inicjalizacja odbywa się w metodzie Application.onCreate() jednym wywołaniem Stetho.initializeWithDefaults(this). Do Network Inspector wymagana jest integracja z OkHttp przez Interceptor.
// build.gradle (aplikacja) — podłączenie Stetho
dependencies {
debugImplementation 'com.facebook.stetho:stetho:1.6.0'
debugImplementation 'com.facebook.stetho:stetho-okhttp3:1.6.0'
}
// Inicjalizacja w klasie Application
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}
}
Do przechwytywania zapytań sieciowych przez OkHttp dodaj StethoInterceptor do łańcucha przechwytywaczy. Stetho automatycznie loguje URL, nagłówki zapytania i odpowiedzi, kod statusu oraz czas wykonania. Dane wyświetlają się w zakładce Network w Chrome DevTools po podłączeniu urządzenia przez chrome://inspect.
Network Inspector Stetho wyświetla wszystkie zapytania HTTP aplikacji w kolejności chronologicznej. Dla każdego zapytania dostępne są: metoda, URL, kod statusu, nagłówki zapytania i odpowiedzi, treść zapytania i odpowiedzi (w tym JSON i dane binarne). Zakładka Preview pokazuje treść odpowiedzi w sformatowanej postaci.
Chrome DevTools obsługuje filtrowanie zapytań według typu (XHR, JS, CSS, Doc), kodu statusu i domeny. Pole wyszukiwania filtruje po URL i zawartości. Przy tworzeniu aplikacji mobilnych warto grupować zapytania według domeny API i sprawdzać kolejność wywołań podczas testowania ekranów aplikacji.
// Klient OkHttp z interceptor Stetho
OkHttpClient client = new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor())
.build();
// Wykonanie żądania
Request request = new Request.Builder()
.url("https://api.example.com/users")
.build();
client.newCall(request).enqueue(callback);
Database Inspector Stetho łączy się z bazami danych SQLite aplikacji przez Chrome DevTools. W zakładce Resources → Web SQL wyświetlane są wszystkie otwarte bazy danych, ich tabele i zawartość. Dostępny jest podgląd struktury tabel, indeksów oraz wykonywanie dowolnych zapytań SQL.
W konsoli Chrome DevTools można wykonywać zapytania SQL bezpośrednio do bazy aplikacji: SELECT, INSERT, UPDATE, DELETE. Jest to przydatne do czyszczenia danych przed testowaniem, weryfikacji poprawności migracji oraz ręcznego poprawiania nieprawidłowych rekordów bez przebudowy aplikacji. Wszystkie zmiany są natychmiast widoczne na urządzeniu.
Dumpapp — to interfejs powłoki Stetho, który pozwala wykonywać niestandardowe polecenia przez adb. Wtyczki Dumpapp są rejestrowane podczas inicjalizacji Stetho i mogą eksportować dowolny stan aplikacji: pamięć podręczną, ustawienia, stan kontenera DI. Polecenia wykonuje się jako adb forward tcp:12345 localabstract:stetho_dumpapp.
Wtyczka implementuje interfejs DumperContext i jest rejestrowana przez Stetho.initialize z niestandardowym InspectorModules. Poniższy przykład pokazuje wtyczkę do zrzutu SharedPreferences: dane są serializowane do JSON i wyprowadzane do terminala przez polecenie adb.
// Niestandardowa wtyczka Dumpapp dla 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 udostępnia wbudowane narzędzia profilowania: Network Profiler, Database Inspector i View Inspector, które pojawiły się w Android Studio 4.1+. Stetho był popularny przed wprowadzeniem tych narzędzi i pozostaje aktualny dla projektów używających OkHttp i wymagających integracji z Chrome DevTools.
| Kryterium | Stetho | Android Studio Inspector |
|---|---|---|
| Instalacja | Zależność Gradle | Wbudowany w IDE |
| Network | Przez OkHttp Interceptor | Automatycznie dla API 26+ |
| SQLite | Chrome DevTools + zapytania SQL | Tylko Android Studio |
| SharedPreferences | Tak (wtyczka Dumpapp) | Nie |
| View Hierarchy | Chrome DevTools Elements | Layout Inspector |
| Wsparcie | Community (legacy) | Oficjalne Google |
Stetho jest uzasadniony w projektach legacy, w których OkHttp już jest używany, a zespół przyzwyczaił się do Chrome DevTools. Do nowych projektów Android Studio Inspector pokrywa większość scenariuszy debugowania. Jednak Chrome DevTools wciąż jest wygodniejszy do zapytań SQLite: wbudowana konsola z autouzupełnianiem SQL działa szybciej niż kolejne kliknięcia w IDE.
View Hierarchy w Stetho jest wyświetlane w zakładce Elements Chrome DevTools jako drzewo podobne do DOM. Każdy View jest przedstawiony jako element HTML z atrybutami: id, layout_width, layout_height, padding, margin, visibility i tekst. Zmiany w drzewie są synchronizowane w czasie rzeczywistym przy obrocie ekranu lub aktualizacji UI.
Po wybraniu elementu w drzewie można przeglądać jego właściwości na panelu Styles — podobnie jak przy inspekcji stron internetowych. Stetho wyświetla obliczone rozmiary, odstępy, kolor tła i stan (pressed, focused, enabled). Zmiana niektórych właściwości w DevTools natychmiast stosuje się do aplikacji, co przyspiesza dobieranie parametrów UI bez przebudowy.
Stetho pomaga wykryć wycieki pamięci związane z View: jeśli Activity nie jest niszczone po finish(), jej główny View pozostaje w drzewie. Poprzez regularne sprawdzanie zakładki Elements można zauważyć fantomowe Activity i znaleźć źródło wycieku — zwykle są to statyczne referencje do Context lub niezamknięte dialogi.
Stetho jest skuteczny do sprawdzania serializacji JSON przed wysłaniem na serwer. Otwórz Network Inspector, znajdź zapytanie i przejrzyj treść w trybie Raw, aby sprawdzić strukturę danych i poprawność pól.
Stetho wyświetla wszystkie bazy utworzone przez SQLiteOpenHelper. Jeśli baza nie pojawia się w Chrome DevTools — sprawdź, czy getWritableDatabase() został wywołany przynajmniej raz w kodzie aplikacji.
Stetho powinien być ostatnim interceptor w łańcuchu OkHttp, aby widzieć zmodyfikowane zapytania. Właściwa kolejność: AuthInterceptor first, następnie LoggingInterceptor, a na końcu StethoInterceptor.
Stetho jest skuteczny do sprawdzania poprawności serializacji JSON przed wysłaniem na serwer. Otwórz Network Inspector, znajdź zapytanie i przejrzyj treść zapytania w trybie Raw, aby upewnić się co do poprawności struktury pól i typów danych.
Stetho wyświetla wszystkie bazy danych utworzone przez SQLiteOpenHelper. Jeśli baza nie pojawia się w Chrome DevTools — sprawdź, czy metoda getWritableDatabase() została wywołana przynajmniej raz w kodzie aplikacji. Do migracji wykonuj ALTER TABLE przez konsolę SQL i weryfikuj wynik zapytaniem SELECT.
Stetho powinien być ostatnim interceptor w łańcuchu OkHttp, aby wyświetlać końcowe zmodyfikowane zapytania. Właściwa sekwencja: AuthInterceptor pierwszy, następnie LoggingInterceptor, a na końcu StethoInterceptor dla poprawnego logowania.
Często zadawane pytania
Podłącz urządzenie przez USB, wykonaj adb forward tcp:8080 localabstract:stetho_default i otwórz w Chrome stronę chrome://inspect. Upewnij się, że Stetho został zainicjalizowany w kodzie aplikacji i urządzenie zostało wykryte na liście Remote Target.
Tak, Stetho działa na Android 12+, ale wymaga jawnego uprawnienia INTERNET w manifeście. Na Android 14+ może być wymagana aktualizacja ADB. Do nowych projektów Google zaleca Android Studio Inspector, ale Stetho pozostaje sprawny na wszystkich wersjach.
Tak, SQLite Inspector, SharedPreferences i View Hierarchy działają bez OkHttp. Network Inspector wymaga integracji z OkHttp lub HttpURLConnection przez moduły stetho-okhttp3 lub stetho-urlconnection. Podstawowy rdzeń Stetho nie zależy od biblioteki sieciowej.
Użyj debugImplementation w Gradle: debugImplementation 'com.facebook.stetho:stetho:1.6.0'. W wersji release kod Stetho nie jest kompilowany. Jeśli inicjalizacja jest wydzielona do osobnej klasy — opakuj wywołanie sprawdzeniem BuildConfig.DEBUG.
Główne alternatywy: Chucker (inspekcja HTTP w aplikacji, z UI), narzędzia Android Studio Profiler i Network Inspector, a także Flipper (modułowa platforma od Facebooka z rozszerzoną funkcjonalnością). Chucker jest szczególnie popularny jako rozwiązanie in-app bez Chrome DevTools.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również