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 και ιεραρχία προβολών. Όλη η επικοινωνία γίνεται μέσω του πρωτοκόλλου Chrome DevTools Protocol, γεγονός που επιτρέπει τη χρήση των τυπικών εργαλείων του προγράμματος περιήγησης χωρίς εγκατάσταση πρόσθετου λογισμικού.
Η βιβλιοθήκη αποτελείται από μονάδες: stetho (πυρήνας), stetho-okhttp (υποκλοπή κίνησης μέσω OkHttp), stetho-urlconnection (υποκλοπή μέσω HttpURLConnection) και stetho-js-rhino (υποστήριξη προσθηκών JavaScript). Ο πυρήνας ανοίγει ένα socket UNIX στο οποίο συνδέεται το Chrome μέσω adb forward. Κάθε ελεγκτής υλοποιείται ως ξεχωριστή προσθήκη που καταχωρείται κατά την αρχικοποίηση του Stetho.
Το Stetho υποστηρίζει Android 4.4+ (API 19) και λειτουργεί μόνο σε εκδόσεις debug. Σε συσκευές με Android 11+ απαιτείται ρητή άδεια INTERNET στο manifest. Η βιβλιοθήκη δεν υποστηρίζεται επίσημα από τη Facebook από το 2020, αλλά ο κώδικας παραμένει ανοιχτός και χρησιμοποιείται σε έργα 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, τις κεφαλίδες αιτήματος και απόκρισης, τον κωδικό κατάστασης και τον χρόνο εκτέλεσης. Τα δεδομένα εμφανίζονται στην καρτέλα Network του Chrome DevTools μετά τη σύνδεση στη συσκευή μέσω chrome://inspect.
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 συνδέεται στις βάσεις δεδομένων SQLite της εφαρμογής μέσω Chrome DevTools. Στην καρτέλα Resources → Web SQL εμφανίζονται όλες οι ανοιχτές βάσεις δεδομένων, οι πίνακές τους και το περιεχόμενο. Είναι διαθέσιμη η προβολή της δομής των πινάκων, των ευρετηρίων και η εκτέλεση αυθαίρετων ερωτημάτων SQL.
Στην κονσόλα του Chrome DevTools μπορείτε να εκτελέσετε ερωτήματα SQL απευθείας στη βάση της εφαρμογής: SELECT, INSERT, UPDATE, DELETE. Αυτό είναι χρήσιμο για τον καθαρισμό δεδομένων πριν από τη δοκιμή, τον έλεγχο της ορθότητας των μεταναστεύσεων και τη χειροκίνητη διόρθωση εσφαλμένων εγγραφών χωρίς επαναδημιουργία της εφαρμογής. Όλες οι αλλαγές είναι άμεσα ορατές στη συσκευή.
Dumpapp — είναι η διεπαφή κελύφους του Stetho που επιτρέπει την εκτέλεση προσαρμοσμένων εντολών μέσω adb. Οι προσθήκες Dumpapp καταχωρούνται κατά την αρχικοποίηση του Stetho και μπορούν να εξάγουν οποιαδήποτε κατάσταση της εφαρμογής: cache, ρυθμίσεις, κατάσταση του δοχείου DI. Οι εντολές εκτελούνται ως adb forward tcp:12345 localabstract:stetho_dumpapp.
Η προσθήκη υλοποιεί τη διεπαφή DumperContext και καταχωρείται μέσω Stetho.initialize με προσαρμοσμένο InspectorModules. Το παρακάτω παράδειγμα δείχνει μια προσθήκη για dump του 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 στο manifest. Σε 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. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης