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. Каждый инспектор реализован как отдельный plugin, регистрируемый при инициализации Stetho.
Stetho поддерживает Android 4.4+ (API 19) и работает только в debug-сборках. На устройствах с Android 11+ требуется явное разрешение INTERNET в манифесте. Библиотека официально не поддерживается Facebook с 2020 года, но код остаётся открытым и используется в легаси-проектах. Для новых проектов Google рекомендует Android Studio Profiler и Network Inspector.
Подключение выполняется через Gradle-зависимость с флагом debugImplementation, чтобы Stetho работал только в debug-сборке. Инициализация происходит в методе Application.onCreate() одним вызовом Stetho.initializeWithDefaults(this). Для Network Inspector требуется интеграция с OkHttp через Interceptor.
// build.gradle (app) — подключение 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 client с 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 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также