Stetho — библиотека за дебаговање Андроид апликација, развијена од стране Facebook-а (Meta) 2014. године. Алат се интегрише у апликацију преко Gradle зависности и отвара приступ унутрашњем стању преко Chrome DevTools-а. Према репозиторијуму facebook/stetho (2026), библиотека подржава инспекцију SQLite-а, Network-а, SharedPreferences-а, View Hierarchy-ја и Dumpapp додатака.
Главно
Stetho — Java библиотека која покреће локални WebSocket сервер унутар Андроид апликације. 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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође