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 року, але код залишається відкритим і використовується в легасі-проєктах. Для нових проєктів 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-клієнт з 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 виправданий у легасі-проєктах, де 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, потім 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 та легасі-проєктів, Studio Inspector — стандарт для нових розробок.
  • Chucker і Flipper — сучасні альтернативи з in-app UI та модульною архітектурою.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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