Stetho هي مكتبة لتصحيح أخطاء تطبيقات أندرويد، طورتها فيسبوك (Meta) عام 2014. تدمج الأداة في التطبيق عبر تبعية Gradle وتفتح الوصول إلى الحالة الداخلية من خلال Chrome DevTools. وفقًا لـ مستودع facebook/stetho (2026)، تدعم المكتبة فحص SQLite وNetwork وSharedPreferences وView Hierarchy وإضافات Dumpapp.
النقاط الرئيسية
Stetho مكتبة Java تشغل خادم WebSocket محليًا داخل تطبيق أندرويد. يتصل Chrome DevTools بهذا الخادم عبر منفذ adb، ويحصل على الوصول إلى المكونات الداخلية للتطبيق: قواعد البيانات وطلبات الشبكة والتفضيلات وبنية العرض (view hierarchy). كل الاتصال يتم عبر بروتوكول Chrome DevTools، ما يسمح باستخدام أدوات المتصفح القياسية دون تثبيت برامج إضافية.
تتكون المكتبة من وحدات: stetho (النواة)، وstetho-okhttp (اعتراض الحركة عبر OkHttp)، وstetho-urlconnection (الاعتراض عبر HttpURLConnection) وstetho-js-rhino (دعم إضافات JavaScript). تفتح النواة مقبس UNIX يتصل به Chrome عبر adb forward. يتم تنفيذ كل فاحص (inspector) كإضافة منفصلة تُسجل عند تهيئة Stetho.
يدعم Stetho Android 4.4+ (API 19) ويعمل فقط في إصدارات التصحيح (debug). على الأجهزة التي تعمل بنظام Android 11+ يلزم إذن INTERNET صريح في البيان (manifest). لم تعد المكتبة مدعومة رسميًا من فيسبوك منذ عام 2020، لكن الكود يبقى مفتوحًا ويُستخدم في المشاريع القديمة (legacy). للمشاريع الجديدة توصي جوجل بـ Android Studio Profiler وNetwork Inspector.
يتم الربط عبر تبعية Gradle مع علامة debugImplementation حتى يعمل Stetho في إصدار التصحيح فقط. تتم التهيئة في طريقة 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
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 | Elements في Chrome DevTools | Layout Inspector |
| الدعم | المجتمع (legacy) | رسمي من جوجل |
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 والنص. تتم مزامنة التغييرات في الشجرة في الوقت الفعلي عند تدوير الشاشة أو تحديث الواجهة.
باختيار عنصر في الشجرة، يمكن عرض خصائصه في لوحة Styles، على غرار فحص صفحات الويب. يعرض Stetho الأبعاد المحسوبة والهوامش الداخلية ولون الخلفية والحالة (pressed, focused, enabled). يُطبَّق تغيير بعض الخصائص في DevTools فورًا على التطبيق، ما يسرع اختيار معلمات الواجهة دون إعادة البناء.
يساعد Stetho في اكتشاف تسربات الذاكرة المرتبطة بـ View: إذا لم تُدمر Activity بعد finish()، يبقى View الجذري الخاص بها في الشجرة. عبر الفحص المنتظم لتبويب Elements يمكن ملاحظة Activities وهمية وإيجاد مصدر التسرب، وعادةً ما تكون مراجع ثابتة إلى Context أو حوارات غير مغلقة.
Stetho فعّال للتحقق من تسلسل JSON قبل إرساله إلى الخادم. افتح Network Inspector وابحث عن الطلب واعرض الجسم في وضع Raw للتحقق من بنية البيانات وصحة الحقول.
يعرض Stetho جميع قواعد البيانات التي أُنشئت عبر SQLiteOpenHelper. إذا لم تظهر القاعدة في Chrome DevTools، تحقق من استدعاء getWritableDatabase() مرة واحدة على الأقل في كود التطبيق.
يجب أن يكون Stetho آخر معترض في سلسلة OkHttp لرؤية الطلبات المعدلة. الترتيب الصحيح: AuthInterceptor أولًا، ثم LoggingInterceptor، ثم StethoInterceptor أخيرًا.
Stetho فعّال للتحقق من صحة تسلسل JSON قبل إرساله إلى الخادم. افتح Network Inspector وابحث عن الطلب واعرض جسم الطلب في وضع Raw للتأكد من صحة بنية الحقول وأنواع البيانات.
يعرض Stetho جميع قواعد البيانات التي أُنشئت عبر SQLiteOpenHelper. إذا لم تظهر القاعدة في Chrome DevTools، تحقق من استدعاء طريقة getWritableDatabase() مرة واحدة على الأقل في كود التطبيق. لعمليات الترحيل نفذ ALTER TABLE عبر وحدة تحكم SQL وتحقق من النتيجة باستعلام SELECT.
يجب أن يكون Stetho آخر معترض في سلسلة OkHttp لعرض الطلبات المعدلة النهائية. التسلسل الصحيح: AuthInterceptor أولًا، ثم LoggingInterceptor، ثم StethoInterceptor أخيرًا لتسجيل صحيح.
الأسئلة الشائعة
وصّل الجهاز عبر USB، ونفذ adb forward tcp:8080 localabstract:stetho_default وافتح صفحة chrome://inspect في Chrome. تأكد من تهيئة Stetho في كود التطبيق ومن اكتشاف الجهاز في قائمة Remote Target.
نعم، يعمل Stetho على Android 12+، لكنه يتطلب إذن INTERNET صريحًا في البيان. على Android 14+ قد يلزم تحديث ADB. للمشاريع الجديدة توصي جوجل بـ 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 داخل التطبيق مع واجهة)، وأدوات Android Studio Profiler وNetwork Inspector، بالإضافة إلى Flipper (منصة معيارية من فيسبوك بوظائف موسعة). يحظى Chucker بشعبية خاصة كحل داخل التطبيق دون Chrome DevTools.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا