Stetho হল Android অ্যাপ্লিকেশন ডিবাগিংয়ের জন্য একটি লাইব্রেরি, যা Facebook (Meta) 2014 সালে তৈরি করেছিল। টুলটি Gradle-নির্ভরতার মাধ্যমে অ্যাপে একীভূত হয় এবং Chrome DevTools-এর মাধ্যমে অভ্যন্তরীণ অবস্থায় প্রবেশাধিকার খুলে দেয়। facebook/stetho রিপোজিটরি (2026)-র মতে, লাইব্রেরিটি SQLite, Network, SharedPreferences, View Hierarchy এবং Dumpapp প্লাগইন পরীক্ষা সমর্থন করে।
মূল বিষয়
Stetho হল একটি Java লাইব্রেরি যা Android অ্যাপ্লিকেশনের ভেতরে একটি লোকাল 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 সুপারিশ করে।
সংযোগ debugImplementation ফ্ল্যাগসহ Gradle-নির্ভরতার মাধ্যমে করা হয়, যাতে Stetho শুধুমাত্র debug-বিল্ডে কাজ করে। ইনিশিয়ালাইজেশন Application.onCreate() মেথডে একটি একক Stetho.initializeWithDefaults(this) কল দিয়ে হয়। Network Inspector-এর জন্য Interceptor-এর মাধ্যমে OkHttp-এর সাথে একীভূতকরণ প্রয়োজন।
// 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, অনুরোধ ও প্রতিক্রিয়ার হেডার, স্ট্যাটাস-কোড এবং নির্বাহের সময় লগ করে। chrome://inspect-এর মাধ্যমে ডিভাইসে সংযোগের পরে ডেটা Chrome DevTools-এর Network ট্যাবে প্রদর্শিত হয়।
Stetho-র Network Inspector অ্যাপের সব HTTP অনুরোধ কালানুক্রমিক ক্রমে প্রদর্শন করে। প্রতিটি অনুরোধের জন্য পাওয়া যায়: পদ্ধতি, URL, স্ট্যাটাস-কোড, অনুরোধ ও প্রতিক্রিয়ার হেডার, অনুরোধ ও প্রতিক্রিয়ার বডি (JSON এবং বাইনারি ডেটাসহ)। Preview ট্যাব প্রতিক্রিয়ার বডি ফরম্যাটকৃত রূপে দেখায়।
Chrome DevTools প্রকার (XHR, JS, CSS, Doc), স্ট্যাটাস-কোড এবং ডোমেইন অনুসারে অনুরোধ ফিল্টারিং সমর্থন করে। খোঁজ ক্ষেত্র URL ও বিষয়বস্তু অনুযায়ী ফিল্টার করে। মোবাইল ডেভেলপমেন্টের জন্য অনুরোধগুলিকে API ডোমেইন অনুসারে গ্রুপ করা এবং অ্যাপের স্ক্রিন পরীক্ষার সময় কলের ক্রম যাচাই করা উপকারী।
// Stetho interceptor সহ OkHttp ক্লায়েন্ট
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);
Stetho-র Database Inspector 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 ইন্টারফেস বাস্তবায়ন করে এবং কাস্টম InspectorModules সহ Stetho.initialize-এর মাধ্যমে নিবন্ধিত হয়। নিচের উদাহরণটি SharedPreferences ডাম্পের জন্য প্লাগইন দেখায়: ডেটা JSON-এ সিরিয়ালাইজ হয়ে adb-কমান্ডের মাধ্যমে টার্মিনালে আউটপুট হয়।
// SharedPreferences-এর জন্য কাস্টম Dumpapp প্লাগইন
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 |
| সমর্থন | কমিউনিটি (legacy) | Google-এর অফিসিয়াল |
Stetho legacy-প্রজেক্টে যুক্তিসঙ্গত, যেখানে OkHttp আগে থেকেই ব্যবহৃত হয় এবং দল Chrome DevTools-এ অভ্যস্ত। নতুন প্রজেক্টের জন্য Android Studio Inspector বেশিরভাগ ডিবাগিং পরিস্থিতি কভার করে। তবে, SQLite-কোয়েরির জন্য Chrome DevTools এখনও বেশি সুবিধাজনক: SQL অটোকমপ্লিশনসহ বিল্ট-ইন কনসোল IDE-তে ধারাবাহিক ক্লিকের চেয়ে দ্রুত।
Stetho-তে View Hierarchy Chrome DevTools-এর Elements ট্যাবে 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-কে OkHttp শৃঙ্খলে শেষ interceptor হতে হবে। সঠিক ক্রম: প্রথমে AuthInterceptor, তারপর LoggingInterceptor, তারপর শেষে StethoInterceptor।
Stetho সার্ভারে পাঠানোর আগে JSON-সিরিয়ালাইজেশনের সঠিকতা যাচাইয়ের জন্য কার্যকর। Network Inspector খুলুন, অনুরোধ খুঁজে নিন এবং ফিল্ডের গঠন ও ডেটা প্রকারের সঠিকতা নিশ্চিত করতে অনুরোধের বডি Raw-মোডে দেখুন।
Stetho SQLiteOpenHelper-এর মাধ্যমে তৈরি সব ডেটাবেস প্রদর্শন করে। যদি ডেটাবেস Chrome DevTools-এ না আসে — যাচাই করুন যে অ্যাপ কোডে getWritableDatabase() মেথড অন্তত একবার কল হয়েছে। মাইগ্রেশনের জন্য SQL কনসোল দিয়ে ALTER TABLE চালান এবং SELECT কোয়েরি দিয়ে ফলাফল যাচাই করুন।
চূড়ান্ত পরিবর্তিত অনুরোধ প্রদর্শনের জন্য Stetho-কে OkHttp শৃঙ্খলে শেষ interceptor হতে হবে। সঠিক অনুক্রম: সঠিক লগিংয়ের জন্য 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-এর জন্য stetho-okhttp3 বা stetho-urlconnection মডিউলের মাধ্যমে OkHttp বা HttpURLConnection-এর সাথে একীভূতকরণ প্রয়োজন। Stetho-র মৌলিক কোর নেটওয়ার্ক লাইব্রেরির উপর নির্ভর করে না।
Gradle-এ debugImplementation ব্যবহার করুন: debugImplementation 'com.facebook.stetho:stetho:1.6.0'। release-বিল্ডে Stetho কোড কম্পাইল হয় না। যদি ইনিশিয়ালাইজেশন আলাদা ক্লাসে থাকে — কলটিকে BuildConfig.DEBUG যাচাই দিয়ে ঘিরে দিন।
প্রধান বিকল্প: Chucker (UI সহ অ্যাপে HTTP পরীক্ষা), Android Studio Profiler ও Network Inspector টুল, সেইসাথে Flipper (বর্ধিত কার্যকারিতাসহ Facebook-এর মডিউলার প্ল্যাটফর্ম)। Chucker বিশেষত Chrome DevTools ছাড়া in-app সমাধান হিসেবে জনপ্রিয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন