Stetho — کتابخانهای برای دیباگ کردن برنامههای اندروید است که توسط Facebook (Meta) در سال 2014 توسعه یافته است. این ابزار از طریق وابستگی Gradle در برنامه یکپارچه میشود و از طریق Chrome DevTools به وضعیت داخلی دسترسی باز میکند. طبق مخزن facebook/stetho (2026)، کتابخانه از بازرسی SQLite، Network، SharedPreferences، View Hierarchy و افزونههای Dumpapp پشتیبانی میکند.
نکات اصلی
Stetho — یک کتابخانه جاوا است که یک سرور WebSocket محلی را در داخل برنامه اندروید اجرا میکند. 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 در مانیفست الزامی است. کتابخانه از سال 2020 رسماً توسط Facebook پشتیبانی نمیشود، اما کد آن باز میماند و در پروژههای legacy استفاده میشود. برای پروژههای جدید، Google توصیه میکند از Android Studio Profiler و Network Inspector استفاده کنید.
نصب از طریق وابستگی Gradle با پرچم debugImplementation انجام میشود تا Stetho فقط در ساخت debug کار کند. راهاندازی در متد Application.onCreate() با یک فراخوانی Stetho.initializeWithDefaults(this) انجام میشود. برای Network Inspector یکپارچهسازی با OkHttp از طریق Interceptor الزامی است.
// build.gradle (برنامه) — نصب 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، هدرهای درخواست و پاسخ، کد وضعیت و زمان اجرا را ثبت میکند. دادهها پس از اتصال به دستگاه از طریق chrome://inspect در تب Network در Chrome DevTools نمایش داده میشوند.
Network Inspector Stetho همه درخواستهای HTTP برنامه را به ترتیب زمانی نمایش میدهد. برای هر درخواست در دسترس هستند: متد، URL، کد وضعیت، هدرهای درخواست و پاسخ، بدنه درخواست و پاسخ (از جمله JSON و دادههای باینری). تب Preview بدنه پاسخ را بهصورت قالببندیشده نمایش میدهد.
Chrome DevTools از فیلتر کردن درخواستها بر اساس نوع (XHR، JS، CSS، Doc)، کد وضعیت و دامنه پشتیبانی میکند. فیلد جستجو بر اساس URL و محتوا فیلتر میکند. برای توسعه موبایل مفید است که درخواستها را بر اساس دامنه API گروهبندی کنید و ترتیب فراخوانیها را هنگام تست صفحههای برنامه بررسی کنید.
// کلاینت OkHttp با interceptor 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 از طریق Chrome DevTools به پایگاههای داده SQLite برنامه متصل میشود. در تب Resources ← Web SQL همه پایگاههای داده باز، جداول و محتوای آنها نمایش داده میشود. مشاهده ساختار جداول، ایندکسها و اجرای پرسوجوهای دلخواه SQL در دسترس است.
در کنسول Chrome DevTools میتوان پرسوجوهای SQL را مستقیماً روی پایگاه داده برنامه اجرا کرد: SELECT، INSERT، UPDATE، DELETE. این برای پاکسازی دادهها قبل از تست، بررسی صحت مهاجرتها و اصلاح دستی رکوردهای نادرست بدون بازسازی برنامه مفید است. همه تغییرات فوراً روی دستگاه قابل مشاهده هستند.
Dumpapp — رابط شل 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 در پروژههای legacy که 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 first، سپس 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 به کتابخانه شبکه وابسته نیست.
در Gradle از debugImplementation استفاده کنید: 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 از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید