Stetho, 2014 yılında Facebook (Meta) tarafından geliştirilen Android uygulamaları için hata ayıklama kütüphanesidir. Araç, Gradle bağımlılığı aracılığıyla uygulamaya entegre olur ve Chrome DevTools üzerinden iç duruma erişim açar. facebook/stetho deposuna (2026) göre kütüphane, SQLite, Network, SharedPreferences, View Hierarchy ve Dumpapp eklentilerinin incelenmesini destekler.
Önemli noktalar
Stetho, Android uygulamasının içinde yerel bir WebSocket sunucusu çalıştıran bir Java kütüphanesidir. Chrome DevTools bu sunucuya adb bağlantı noktası üzerinden bağlanır ve uygulamanın iç bileşenlerine erişim sağlar: veritabanları, ağ istekleri, preferences ve view hiyerarşisi. Tüm iletişim Chrome DevTools Protocol protokolü üzerinden gerçekleşir; bu da ek yazılım kurmadan tarayıcının standart araçlarını kullanmayı mümkün kılar.
Kütüphane modüllerden oluşur: stetho (çekirdek), stetho-okhttp (OkHttp üzerinden trafik yakalama), stetho-urlconnection (HttpURLConnection üzerinden yakalama) ve stetho-js-rhino (JavaScript eklentileri desteği). Çekirdek, Chrome'un adb forward üzerinden bağlandığı bir UNIX soketi açar. Her denetçi, Stetho başlatılırken kaydedilen ayrı bir eklenti olarak uygulanır.
Stetho Android 4.4+ (API 19) destekler ve yalnızca debug derlemelerinde çalışır. Android 11+ cihazlarda manifest dosyasında açık bir INTERNET izni gerekir. Kütüphane 2020'den beri Facebook tarafından resmi olarak desteklenmemektedir, ancak kod açık kalır ve eski (legacy) projelerde kullanılır. Yeni projeler için Google, Android Studio Profiler ve Network Inspector'ı önerir.
Bağlantı, Stetho'nun yalnızca debug derlemesinde çalışması için debugImplementation bayrağıyla bir Gradle bağımlılığı üzerinden yapılır. Başlatma, Application.onCreate() metodunda tek bir Stetho.initializeWithDefaults(this) çağrısıyla gerçekleşir. Network Inspector için OkHttp ile bir Interceptor üzerinden entegrasyon gerekir.
// build.gradle (app) — Stetho ekleme
dependencies {
debugImplementation 'com.facebook.stetho:stetho:1.6.0'
debugImplementation 'com.facebook.stetho:stetho-okhttp3:1.6.0'
}
// Application sınıfında başlatma
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}
}
OkHttp üzerinden ağ isteklerini yakalamak için interceptor zincirine StethoInterceptor ekleyin. Stetho, URL'yi, istek ve yanıt başlıklarını, durum kodunu ve yürütme süresini otomatik olarak günlüğe kaydeder. Veriler, chrome://inspect üzerinden cihaza bağlandıktan sonra Chrome DevTools'un Network sekmesinde görüntülenir.
Stetho'nun Network Inspector'ı uygulamanın tüm HTTP isteklerini kronolojik sırada görüntüler. Her istek için şunlar mevcuttur: yöntem, URL, durum kodu, istek ve yanıt başlıkları, istek ve yanıt gövdesi (JSON ve ikili veriler dahil). Preview sekmesi yanıt gövdesini biçimlendirilmiş biçimde gösterir.
Chrome DevTools, isteklerin türe (XHR, JS, CSS, Doc), durum koduna ve alan adına göre filtrelenmesini destekler. Arama alanı URL ve içeriğe göre filtreler. Mobil geliştirme için istekleri API alan adına göre gruplamak ve uygulama ekranlarını test ederken çağrı sırasını kontrol etmek faydalıdır.
// Stetho interceptor'lı OkHttp istemcisi
OkHttpClient client = new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor())
.build();
// İstek çalıştırma
Request request = new Request.Builder()
.url("https://api.example.com/users")
.build();
client.newCall(request).enqueue(callback);
Stetho'nun Database Inspector'ı Chrome DevTools üzerinden uygulamanın SQLite veritabanlarına bağlanır. Resources → Web SQL sekmesinde açık tüm veritabanları, tabloları ve içerikleri görüntülenir. Tablo yapısını, dizinleri görüntüleme ve isteğe bağlı SQL sorguları çalıştırma mümkündür.
Chrome DevTools konsolunda uygulamanın veritabanına doğrudan SQL sorguları çalıştırabilirsiniz: SELECT, INSERT, UPDATE, DELETE. Bu, testlerden önce verileri temizlemek, geçişlerin (migration) doğruluğunu kontrol etmek ve uygulamayı yeniden derlemeden hatalı kayıtları elle düzeltmek için faydalıdır. Tüm değişiklikler cihazda anında görünür.
Dumpapp, adb üzerinden özel komutlar çalıştırmayı sağlayan Stetho'nun kabuk arayüzüdür. Dumpapp eklentileri Stetho başlatılırken kaydedilir ve uygulamanın herhangi bir durumunu dışa aktarabilir: önbellek, ayarlar, DI kapsayıcısının durumu. Komutlar adb forward tcp:12345 localabstract:stetho_dumpapp şeklinde çalıştırılır.
Eklenti, DumperContext arayüzünü uygular ve özel bir InspectorModules ile Stetho.initialize üzerinden kaydedilir. Aşağıdaki örnek, SharedPreferences dökümü için bir eklenti gösterir: veriler JSON'a serileştirilir ve bir adb komutu aracılığıyla terminalde çıktı olarak verilir.
// SharedPreferences için özel Dumpapp eklentisi
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, Android Studio 4.1+'da tanıtılan yerleşik profil oluşturma araçları sağlar: Network Profiler, Database Inspector ve View Inspector. Stetho, bu araçlar tanıtılmadan önce popülerdi ve OkHttp kullanan ve Chrome DevTools ile entegrasyon gerektiren projeler için güncelliğini koruyor.
| Kriter | Stetho | Android Studio Inspector |
|---|---|---|
| Kurulum | Gradle bağımlılığı | IDE'ye yerleşik |
| Network | OkHttp Interceptor üzerinden | API 26+ için otomatik |
| SQLite | Chrome DevTools + SQL sorguları | Yalnızca Android Studio |
| SharedPreferences | Evet (Dumpapp eklentisi) | Hayır |
| View Hierarchy | Chrome DevTools Elements | Layout Inspector |
| Destek | Topluluk (legacy) | Google resmi |
Stetho, OkHttp'in zaten kullanıldığı ve ekibin Chrome DevTools'a alışkın olduğu eski projelerde uygundur. Yeni projeler için Android Studio Inspector çoğu hata ayıklama senaryosunu kapsar. Ancak Chrome DevTools, SQLite sorguları için hâlâ daha rahattır: SQL otomatik tamamlamalı yerleşik konsol, IDE'deki sıralı tıklamalardan daha hızlıdır.
Stetho'daki View Hierarchy, Chrome DevTools'un Elements sekmesinde DOM benzeri bir ağaç olarak görüntülenir. Her View, öznitelikleriyle bir HTML öğesi olarak temsil edilir: id, layout_width, layout_height, padding, margin, visibility ve metin. Ağaçtaki değişiklikler, ekran döndürüldüğünde veya UI güncellendiğinde gerçek zamanlı olarak senkronize edilir.
Ağaçta bir öğe seçerek özelliklerini Styles panelinde görüntüleyebilirsiniz — web sayfalarını incelemeye benzer şekilde. Stetho, hesaplanan boyutları, dolguları, arka plan rengini ve durumu (pressed, focused, enabled) görüntüler. DevTools'ta bazı özellikleri değiştirmek, yeniden derlemeden uygulamaya anında uygulanır; bu da UI parametrelerinin seçimini hızlandırır.
Stetho, View ile ilgili bellek sızıntılarını bulmaya yardımcı olur: bir Activity finish()'ten sonra yok edilmezse kök View'i ağaçta kalır. Elements sekmesini düzenli olarak kontrol ederek hayalet Activity'leri fark edebilir ve sızıntının kaynağını bulabilirsiniz — genellikle Context'e statik referanslar veya kapatılmamış iletişim kutuları.
Stetho, sunucuya göndermeden önce JSON serileştirmesini kontrol etmek için etkilidir. Network Inspector'ı açın, isteği bulun ve veri yapısını ve alanların doğruluğunu kontrol etmek için gövdeyi Raw modunda görüntüleyin.
Stetho, SQLiteOpenHelper üzerinden oluşturulan tüm veritabanlarını görüntüler. Veritabanı Chrome DevTools'ta görünmüyorsa, uygulama kodunda getWritableDatabase()'in en az bir kez çağrıldığını kontrol edin.
Değiştirilmiş istekleri görmek için Stetho, OkHttp zincirinde son interceptor olmalıdır. Doğru sıra: önce AuthInterceptor, sonra LoggingInterceptor, en son StethoInterceptor.
Stetho, sunucuya göndermeden önce JSON serileştirmesinin doğruluğunu kontrol etmek için etkilidir. Network Inspector'ı açın, isteği bulun ve alan yapısının ve veri türlerinin doğruluğundan emin olmak için istek gövdesini Raw modunda görüntüleyin.
Stetho, SQLiteOpenHelper üzerinden oluşturulan tüm veritabanlarını görüntüler. Veritabanı Chrome DevTools'ta görünmüyorsa, uygulama kodunda getWritableDatabase() yönteminin en az bir kez çağrıldığını kontrol edin. Geçişler için SQL konsolu üzerinden ALTER TABLE çalıştırın ve sonucu bir SELECT sorgusuyla doğrulayın.
Son değiştirilmiş istekleri görüntülemek için Stetho, OkHttp zincirinde son interceptor olmalıdır. Doğru sıra: doğru günlükleme için AuthInterceptor önce, sonra LoggingInterceptor, en son StethoInterceptor.
Sık sorulan sorular
Cihazı USB ile bağlayın, adb forward tcp:8080 localabstract:stetho_default komutunu çalıştırın ve Chrome'da chrome://inspect sayfasını açın. Stetho'nun uygulama kodunda başlatıldığından ve cihazın Remote Target listesinde algılandığından emin olun.
Evet, Stetho Android 12+ üzerinde çalışır, ancak manifest dosyasında açık bir INTERNET izni gerektirir. Android 14+ üzerinde ADB güncellemesi gerekebilir. Yeni projeler için Google, Android Studio Inspector'ı önerir, ancak Stetho tüm sürümlerde çalışmaya devam eder.
Evet, SQLite Inspector, SharedPreferences ve View Hierarchy OkHttp olmadan çalışır. Network Inspector, stetho-okhttp3 veya stetho-urlconnection modülleri üzerinden OkHttp veya HttpURLConnection ile entegrasyon gerektirir. Stetho'nun temel çekirdeği bir ağ kütüphanesine bağlı değildir.
Gradle'de debugImplementation kullanın: debugImplementation 'com.facebook.stetho:stetho:1.6.0'. Release derlemesinde Stetho kodu derlenmez. Başlatma ayrı bir sınıftaysa, çağrıyı bir BuildConfig.DEBUG kontrolüyle sarın.
Başlıca alternatifler: Chucker (uygulama içinde HTTP inceleme, UI ile), Android Studio Profiler ve Network Inspector araçları ve Flipper (genişletilmiş işlevselliğe sahip Facebook'un modüler platformu). Chucker, özellikle Chrome DevTools olmadan uygulama içi çözüm olarak popülerdir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun