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. Кожен інспектор реалізований як окремий плагін, який реєструється під час ініціалізації 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-клієнт з 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 виправданий у легасі-проєктах, де 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, потім 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також