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. Каждый инспектор реализован как отдельный plugin, регистрируемый при инициализации Stetho.

Требования и ограничения

Stetho поддерживает Android 4.4+ (API 19) и работает только в debug-сборках. На устройствах с Android 11+ требуется явное разрешение INTERNET в манифесте. Библиотека официально не поддерживается Facebook с 2020 года, но код остаётся открытым и используется в легаси-проектах. Для новых проектов Google рекомендует Android Studio Profiler и Network Inspector.

Подключение и настройка Stetho в Android проекте

Подключение выполняется через Gradle-зависимость с флагом debugImplementation, чтобы Stetho работал только в debug-сборке. Инициализация происходит в методе Application.onCreate() одним вызовом Stetho.initializeWithDefaults(this). Для Network Inspector требуется интеграция с OkHttp через Interceptor.

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

Настройка 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 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: работа с 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 vs 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 vs Android Studio — Stetho удобен для SQLite и legacy-проектов, Studio Inspector — стандарт для новых разработок.
  • Chucker и Flipper — современные альтернативы с in-app UI и модульной архитектурой.

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

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также