Stetho — какво е това, дебъгване на Android през Chrome DevTools

Автор: IT Sectr Публикувано: 2026-05-08 Време за четене: 8 мин

Stetho — библиотека за дебъгване на Android приложения, разработена от Facebook (Meta) през 2014 година. Инструментът се интегрира в приложението чрез Gradle зависимост и отваря достъп до вътрешното състояние чрез Chrome DevTools. Според хранилището facebook/stetho (2026), библиотеката поддържа инспекция на SQLite, Network, SharedPreferences, View Hierarchy и Dumpapp добавки.

Основните точки

  • Stetho — библиотека от Facebook за инспекция на Android приложения чрез Chrome DevTools без root достъп.
  • SQLite Inspector позволява преглеждане, редактиране и изпълнение на заявки към базите данни на приложението в реално време.
  • Network Inspector прихваща HTTP/HTTPS трафика чрез OkHttp и HttpURLConnection с показване на заглавките и тялото.
  • SharedPreferences Inspector показва всички XML файлове с настройки с възможност за преглед и промяна на стойностите.
  • Dumpapp предоставя shell интерфейс за изпълнение на потребителски команди на устройството чрез adb.

Какво е Stetho и как работи

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.

Свързване и настройка на Stetho в Android проект

Свързването се извършва чрез Gradle зависимост с флага debugImplementation, така че Stetho да работи само в debug компилация. Инициализацията става в метода Application.onCreate() с едно извикване Stetho.initializeWithDefaults(this). За Network Inspector се изисква интеграция с OkHttp чрез Interceptor.

groovy
// 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);
    }
}

Настройка на Network Interceptor

За прихващане на мрежови заявки чрез OkHttp добавете StethoInterceptor към веригата от прехващачи. Stetho автоматично регистрира URL адреса, заглавките на заявката и отговора, кода на състоянието и времето за изпълнение. Данните се показват в раздела Network в Chrome DevTools след свързване към устройството чрез chrome://inspect.

Network Inspector: прихващане на HTTP трафик

Network Inspector на Stetho показва всички HTTP заявки на приложението в хронологичен ред. За всяка заявка са налични: метод, URL, код на състоянието, заглавки на заявката и отговора, тяло на заявката и отговора (включително JSON и бинарни данни). Разделът Preview показва тялото на отговора в форматиран вид.

Филтриране и търсене на заявки

Chrome DevTools поддържа филтриране на заявките по тип (XHR, JS, CSS, Doc), код на състоянието и домейн. Полето за търсене филтрира по URL и съдържание. За мобилна разработка е полезно да групирате заявките по API домейн и да проверявате последователността на извикванията при тестване на екраните на приложението.

java
// 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: работа с SQLite

Database Inspector на Stetho се свързва към SQLite базите данни на приложението чрез Chrome DevTools. В раздела Resources → Web SQL се показват всички отворени бази данни, техните таблици и съдържание. Наличен е преглед на структурата на таблиците, индексите и изпълнение на произволни SQL заявки.

Изпълнение на SQL заявки чрез DevTools

В конзолата на Chrome DevTools можете да изпълнявате SQL заявки директно към базата на приложението: SELECT, INSERT, UPDATE, DELETE. Това е полезно за почистване на данните преди тестване, проверка на коректността на миграциите и ръчно коригиране на грешни записи без прекомпилиране на приложението. Всички промени веднага се виждат на устройството.

Dumpapp и потребителски добавки

Dumpapp — shell интерфейсът на Stetho, който позволява изпълнение на потребителски команди чрез adb. Dumpapp добавките се регистрират при инициализацията на Stetho и могат да експортират всяко състояние на приложението: кеш, настройки, състоянието на DI контейнера. Командите се изпълняват като adb forward tcp:12345 localabstract:stetho_dumpapp.

Създаване на потребителска Dumpapp добавка

Добавката реализира интерфейса DumperContext и се регистрира чрез Stetho.initialize с потребителски InspectorModules. Примерът по-долу показва добавка за дамп на SharedPreferences: данните се сериализират в JSON и се извеждат в терминала чрез adb команда.

java
// Потребителска 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());
    }
}

Stetho срещу Android Studio Inspector: сравнение

Android Studio предоставя вградени инструменти за профилиране: Network Profiler, Database Inspector и View Inspector, които се появиха в Android Studio 4.1+. Stetho беше популярно преди въвеждането на тези инструменти и остава актуално за проекти, които използват OkHttp и изискват интеграция с Chrome DevTools.

КритерийStethoAndroid Studio Inspector
ИнсталацияGradle зависимостВграден в IDE
NetworkЧрез OkHttp InterceptorАвтоматично за API 26+
SQLiteChrome DevTools + SQL заявкиСамо Android Studio
SharedPreferencesДа (Dumpapp добавка)Не
View HierarchyChrome DevTools ElementsLayout Inspector
ПоддръжкаCommunity (legacy)Официална от Google

Кога да изберете Stetho

Stetho е оправдано в legacy проекти, където OkHttp вече се използва и екипът е свикнал с Chrome DevTools. За нови проекти Android Studio Inspector покрива повечето сценарии за дебъгване. Въпреки това Chrome DevTools все още е по-удобно за SQLite заявки: вградената конзола с автоматично довършване на SQL е по-бърза от последователните кликвания в IDE.

Инспекция на View Hierarchy чрез Stetho

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 параметри без прекомпилиране.

Търсене на изтичане на памет чрез View Inspector

Stetho помага за откриване на изтичане на памет, свързано с View: ако Activity не се унищожава след finish(), нейният коренен View остава в дървото. Чрез редовна проверка на раздела Elements можете да забележите фантомни Activity и да намерите източника на изтичането — обикновено това са статични препратки към Context или незатворени диалози.

Практически техники за дебъгване

Stetho е ефективно за проверка на JSON сериализацията преди изпращане към сървъра. Отворете Network Inspector, намерете заявката и прегледайте тялото в Raw режим, за да проверите структурата на данните и коректността на полетата.

Дебъгване на SQLiteOpenHelper

Stetho показва всички бази, създадени чрез SQLiteOpenHelper. Ако базата не се появява в Chrome DevTools — проверете дали getWritableDatabase() е извикан поне веднъж в кода на приложението.

Ред на Interceptor в OkHttp

Stetho трябва да бъде последният interceptor във веригата на OkHttp, за да вижда модифицираните заявки. Правилният ред: AuthInterceptor first, след това LoggingInterceptor, и накрая StethoInterceptor.

Практически техники за дебъгване със Stetho

Stetho е ефективно за проверка на коректността на JSON сериализацията преди изпращане към сървъра. Отворете Network Inspector, намерете заявката и прегледайте тялото на заявката в Raw режим, за да се уверите в коректността на структурата на полетата и типовете данни.

Дебъгване на SQLiteOpenHelper и ContentProvider

Stetho показва всички бази данни, създадени чрез SQLiteOpenHelper. Ако базата не се появява в Chrome DevTools — проверете дали методът getWritableDatabase() е извикан поне веднъж в кода на приложението. За миграции изпълнявайте ALTER TABLE чрез SQL конзолата и проверявайте резултата със SELECT заявка.

Ред на Interceptor във веригата на OkHttp

Stetho трябва да бъде последният interceptor във веригата на OkHttp, за да показва крайните модифицирани заявки. Правилната последователност: AuthInterceptor първи, след това LoggingInterceptor, и накрая StethoInterceptor за коректно регистриране.

Често задавани въпроси

Как да се свържа към Stetho чрез Chrome DevTools?

Свържете устройството чрез USB, изпълнете adb forward tcp:8080 localabstract:stetho_default и отворете в Chrome страницата chrome://inspect. Уверете се, че Stetho е инициализирано в кода на приложението и че устройството е открито в списъка Remote Target.

Работи ли Stetho на Android 12+?

Да, Stetho работи на Android 12+, но изисква изрично INTERNET разрешение в манифеста. На Android 14+ може да се наложи обновяване на ADB. За нови проекти Google препоръчва Android Studio Inspector, но Stetho остава работещо на всички версии.

Може ли да се използва Stetho без OkHttp?

Да, SQLite Inspector, SharedPreferences и View Hierarchy работят без OkHttp. Network Inspector изисква интеграция с OkHttp или HttpURLConnection чрез модулите stetho-okhttp3 или stetho-urlconnection. Основното ядро на Stetho не зависи от мрежова библиотека.

Как да изключа Stetho в release компилация?

Използвайте debugImplementation в Gradle: debugImplementation 'com.facebook.stetho:stetho:1.6.0'. В release компилация кодът на Stetho не се компилира. Ако инициализацията е изнесена в отделен клас — обвийте извикването с проверка BuildConfig.DEBUG.

Какви алтернативи на Stetho съществуват през 2026 година?

Основните алтернативи: Chucker (инспекция на HTTP в приложението, с UI), инструментите Android Studio Profiler и Network Inspector, както и Flipper (модулна платформа от Facebook с разширена функционалност). Chucker е особено популярно като in-app решение без Chrome DevTools.

Обобщение

  • Stetho — библиотека на Facebook (Meta) за дебъгване на Android чрез Chrome DevTools, която работи с API 19+.
  • Свързване чрез Gradle debugImplementation и инициализация в Application.onCreate() без допълнителни разрешения.
  • Network Inspector прихваща HTTP трафика чрез OkHttp Interceptor с показване на всички детайли на заявката и отговора.
  • SQLite Inspector позволява изпълнение на произволни SQL заявки към базите данни на приложението в реално време.
  • Dumpapp предоставя shell интерфейс за създаване на потребителски команди за дамп на състоянието на приложението чрез adb.
  • Stetho срещу Android Studio — Stetho е удобно за SQLite и legacy проекти, Studio Inspector е стандартът за нови разработки.
  • Chucker и Flipper — модерни алтернативи с in-app UI и модулна архитектура.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също