Stetho — библиотека за дебъгване на Android приложения, разработена от Facebook (Meta) през 2014 година. Инструментът се интегрира в приложението чрез Gradle зависимост и отваря достъп до вътрешното състояние чрез Chrome DevTools. Според хранилището facebook/stetho (2026), библиотеката поддържа инспекция на SQLite, Network, SharedPreferences, View Hierarchy и Dumpapp добавки.
Основните точки
Stetho — Java библиотека, която стартира локален WebSocket сървър вътре в Android приложението. Chrome DevTools се свързва към този сървър през adb порт, получавайки достъп до вътрешните компоненти на приложението: бази данни, мрежови заявки, preferences и view йерархия. Цялата комуникация преминава през протокола Chrome DevTools Protocol, което позволява използването на стандартните инструменти на браузъра без инсталиране на допълнителен софтуер.
Библиотеката се състои от модули: stetho (ядро), stetho-okhttp (прихващане на трафика чрез OkHttp), stetho-urlconnection (прихващане чрез HttpURLConnection) и stetho-js-rhino (поддръжка на JavaScript добавки). Ядрото отваря UNIX сокет, към който Chrome се свързва чрез adb forward. Всеки инспектор е реализиран като отделна добавка, регистрирана при инициализацията на Stetho.
Stetho поддържа Android 4.4+ (API 19) и работи само в debug компилации. На устройства с Android 11+ се изисква изрично INTERNET разрешение в манифеста. Библиотеката не се поддържа официално от Facebook от 2020 година, но кодът остава отворен и се използва в legacy проекти. За нови проекти Google препоръчва Android Studio Profiler и Network Inspector.
Свързването се извършва чрез Gradle зависимост с флага debugImplementation, така че Stetho да работи само в debug компилация. Инициализацията става в метода Application.onCreate() с едно извикване Stetho.initializeWithDefaults(this). За Network Inspector се изисква интеграция с OkHttp чрез Interceptor.
// build.gradle (приложение) — свързване на Stetho
dependencies {
debugImplementation 'com.facebook.stetho:stetho:1.6.0'
debugImplementation 'com.facebook.stetho:stetho-okhttp3:1.6.0'
}
// Инициализация в Application класа
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}
}
За прихващане на мрежови заявки чрез OkHttp добавете StethoInterceptor към веригата от прехващачи. Stetho автоматично регистрира URL адреса, заглавките на заявката и отговора, кода на състоянието и времето за изпълнение. Данните се показват в раздела Network в Chrome DevTools след свързване към устройството чрез chrome://inspect.
Network Inspector на Stetho показва всички HTTP заявки на приложението в хронологичен ред. За всяка заявка са налични: метод, URL, код на състоянието, заглавки на заявката и отговора, тяло на заявката и отговора (включително JSON и бинарни данни). Разделът Preview показва тялото на отговора в форматиран вид.
Chrome DevTools поддържа филтриране на заявките по тип (XHR, JS, CSS, Doc), код на състоянието и домейн. Полето за търсене филтрира по URL и съдържание. За мобилна разработка е полезно да групирате заявките по API домейн и да проверявате последователността на извикванията при тестване на екраните на приложението.
// OkHttp клиент с Stetho interceptor
OkHttpClient client = new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor())
.build();
// Изпълнение на заявката
Request request = new Request.Builder()
.url("https://api.example.com/users")
.build();
client.newCall(request).enqueue(callback);
Database Inspector на Stetho се свързва към SQLite базите данни на приложението чрез Chrome DevTools. В раздела Resources → Web SQL се показват всички отворени бази данни, техните таблици и съдържание. Наличен е преглед на структурата на таблиците, индексите и изпълнение на произволни SQL заявки.
В конзолата на Chrome DevTools можете да изпълнявате SQL заявки директно към базата на приложението: SELECT, INSERT, UPDATE, DELETE. Това е полезно за почистване на данните преди тестване, проверка на коректността на миграциите и ръчно коригиране на грешни записи без прекомпилиране на приложението. Всички промени веднага се виждат на устройството.
Dumpapp — shell интерфейсът на Stetho, който позволява изпълнение на потребителски команди чрез adb. Dumpapp добавките се регистрират при инициализацията на Stetho и могат да експортират всяко състояние на приложението: кеш, настройки, състоянието на DI контейнера. Командите се изпълняват като adb forward tcp:12345 localabstract:stetho_dumpapp.
Добавката реализира интерфейса DumperContext и се регистрира чрез Stetho.initialize с потребителски InspectorModules. Примерът по-долу показва добавка за дамп на SharedPreferences: данните се сериализират в JSON и се извеждат в терминала чрез adb команда.
// Потребителска Dumpapp добавка за 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 предоставя вградени инструменти за профилиране: Network Profiler, Database Inspector и View Inspector, които се появиха в Android Studio 4.1+. Stetho беше популярно преди въвеждането на тези инструменти и остава актуално за проекти, които използват OkHttp и изискват интеграция с Chrome DevTools.
| Критерий | Stetho | Android Studio Inspector |
|---|---|---|
| Инсталация | Gradle зависимост | Вграден в IDE |
| Network | Чрез OkHttp Interceptor | Автоматично за API 26+ |
| SQLite | Chrome DevTools + SQL заявки | Само Android Studio |
| SharedPreferences | Да (Dumpapp добавка) | Не |
| View Hierarchy | Chrome DevTools Elements | Layout Inspector |
| Поддръжка | Community (legacy) | Официална от Google |
Stetho е оправдано в legacy проекти, където OkHttp вече се използва и екипът е свикнал с Chrome DevTools. За нови проекти Android Studio Inspector покрива повечето сценарии за дебъгване. Въпреки това Chrome DevTools все още е по-удобно за SQLite заявки: вградената конзола с автоматично довършване на SQL е по-бърза от последователните кликвания в IDE.
View Hierarchy в Stetho се показва в раздела Elements на Chrome DevTools като дърво, подобно на DOM. Всеки View се представя като HTML елемент с атрибути: id, layout_width, layout_height, padding, margin, visibility и текст. Промените в дървото се синхронизират в реално време при завъртане на екрана или обновяване на UI.
Избирайки елемент в дървото, можете да разгледате свойствата му в панела Styles — подобно на инспекцията на уеб страници. Stetho показва изчислените размери, разстоянията, цвета на фона и състоянието (pressed, focused, enabled). Промяната на някои свойства в DevTools веднага се прилага към приложението, което ускорява подбора на UI параметри без прекомпилиране.
Stetho помага за откриване на изтичане на памет, свързано с View: ако Activity не се унищожава след finish(), нейният коренен View остава в дървото. Чрез редовна проверка на раздела Elements можете да забележите фантомни Activity и да намерите източника на изтичането — обикновено това са статични препратки към Context или незатворени диалози.
Stetho е ефективно за проверка на JSON сериализацията преди изпращане към сървъра. Отворете Network Inspector, намерете заявката и прегледайте тялото в Raw режим, за да проверите структурата на данните и коректността на полетата.
Stetho показва всички бази, създадени чрез SQLiteOpenHelper. Ако базата не се появява в Chrome DevTools — проверете дали getWritableDatabase() е извикан поне веднъж в кода на приложението.
Stetho трябва да бъде последният interceptor във веригата на OkHttp, за да вижда модифицираните заявки. Правилният ред: AuthInterceptor first, след това LoggingInterceptor, и накрая StethoInterceptor.
Stetho е ефективно за проверка на коректността на JSON сериализацията преди изпращане към сървъра. Отворете Network Inspector, намерете заявката и прегледайте тялото на заявката в Raw режим, за да се уверите в коректността на структурата на полетата и типовете данни.
Stetho показва всички бази данни, създадени чрез SQLiteOpenHelper. Ако базата не се появява в Chrome DevTools — проверете дали методът getWritableDatabase() е извикан поне веднъж в кода на приложението. За миграции изпълнявайте ALTER TABLE чрез SQL конзолата и проверявайте резултата със SELECT заявка.
Stetho трябва да бъде последният interceptor във веригата на OkHttp, за да показва крайните модифицирани заявки. Правилната последователност: AuthInterceptor първи, след това LoggingInterceptor, и накрая StethoInterceptor за коректно регистриране.
Често задавани въпроси
Свържете устройството чрез USB, изпълнете adb forward tcp:8080 localabstract:stetho_default и отворете в Chrome страницата chrome://inspect. Уверете се, че Stetho е инициализирано в кода на приложението и че устройството е открито в списъка Remote Target.
Да, Stetho работи на Android 12+, но изисква изрично INTERNET разрешение в манифеста. На Android 14+ може да се наложи обновяване на ADB. За нови проекти Google препоръчва Android Studio Inspector, но Stetho остава работещо на всички версии.
Да, SQLite Inspector, SharedPreferences и View Hierarchy работят без OkHttp. Network Inspector изисква интеграция с OkHttp или HttpURLConnection чрез модулите stetho-okhttp3 или stetho-urlconnection. Основното ядро на Stetho не зависи от мрежова библиотека.
Използвайте debugImplementation в Gradle: debugImplementation 'com.facebook.stetho:stetho:1.6.0'. В release компилация кодът на Stetho не се компилира. Ако инициализацията е изнесена в отделен клас — обвийте извикването с проверка BuildConfig.DEBUG.
Основните алтернативи: Chucker (инспекция на HTTP в приложението, с UI), инструментите Android Studio Profiler и Network Inspector, както и Flipper (модулна платформа от Facebook с разширена функционалност). Chucker е особено популярно като in-app решение без Chrome DevTools.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също