Stetho — nó là gì, gỡ lỗi Android qua Chrome DevTools

Tác giả: IT Sectr Đã đăng: 2026-05-08 Thời gian đọc: 8 phút

Stetho là thư viện gỡ lỗi ứng dụng Android, do Facebook (Meta) phát triển vào năm 2014. Công cụ này tích hợp vào ứng dụng qua phụ thuộc Gradle và mở quyền truy cập trạng thái nội bộ qua Chrome DevTools. Theo kho lưu trữ facebook/stetho (2026), thư viện hỗ trợ kiểm tra SQLite, Network, SharedPreferences, View Hierarchy và các plugin Dumpapp.

Điểm chính

  • Stetho là thư viện của Facebook để kiểm tra ứng dụng Android qua Chrome DevTools mà không cần quyền root.
  • SQLite Inspector cho phép xem, chỉnh sửa và thực thi truy vấn trên cơ sở dữ liệu của ứng dụng theo thời gian thực.
  • Network Inspector chặn lưu lượng HTTP/HTTPS qua OkHttp và HttpURLConnection, hiển thị tiêu đề và nội dung.
  • SharedPreferences Inspector hiển thị tất cả tệp XML cài đặt với khả năng xem và thay đổi giá trị.
  • Dumpapp cung cấp giao diện shell để thực thi các lệnh tùy chỉnh trên thiết bị qua adb.

Stetho là gì và nó hoạt động như thế nào

Stetho là thư viện Java chạy một máy chủ WebSocket cục bộ bên trong ứng dụng Android. Chrome DevTools kết nối đến máy chủ này qua cổng adb, lấy quyền truy cập vào các thành phần nội bộ của ứng dụng: cơ sở dữ liệu, yêu cầu mạng, preferences và hệ phân cấp view. Toàn bộ giao tiếp diễn ra qua giao thức Chrome DevTools, cho phép sử dụng các công cụ chuẩn của trình duyệt mà không cần cài phần mềm bổ sung.

Kiến trúc và thành phần

Thư viện gồm các mô-đun: stetho (lõi), stetho-okhttp (chặn lưu lượng qua OkHttp), stetho-urlconnection (chặn qua HttpURLConnection) và stetho-js-rhino (hỗ trợ plugin JavaScript). Lõi mở một socket UNIX mà Chrome kết nối qua adb forward. Mỗi trình kiểm tra được triển khai như một plugin riêng biệt, được đăng ký khi khởi tạo Stetho.

Yêu cầu và giới hạn

Stetho hỗ trợ Android 4.4+ (API 19) và chỉ hoạt động trong bản build debug. Trên thiết bị Android 11+ cần quyền INTERNET tường minh trong tệp manifest. Thư viện không còn được Facebook chính thức hỗ trợ từ năm 2020, nhưng mã nguồn vẫn mở và được dùng trong các dự án kế thừa. Với dự án mới, Google khuyến nghị Android Studio Profiler và Network Inspector.

Kết nối và cấu hình Stetho trong dự án Android

Kết nối được thực hiện qua phụ thuộc Gradle với cờ debugImplementation để Stetho chỉ hoạt động trong bản build debug. Khởi tạo diễn ra trong phương thức Application.onCreate() bằng một lệnh gọi Stetho.initializeWithDefaults(this). Với Network Inspector cần tích hợp OkHttp qua Interceptor.

groovy
// build.gradle (app) — thêm Stetho
dependencies {
    debugImplementation 'com.facebook.stetho:stetho:1.6.0'
    debugImplementation 'com.facebook.stetho:stetho-okhttp3:1.6.0'
}

// Khởi tạo trong lớp Application
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Stetho.initializeWithDefaults(this);
    }
}

Cấu hình Network Interceptor

Để chặn các yêu cầu mạng qua OkHttp, hãy thêm StethoInterceptor vào chuỗi interceptor. Stetho tự động ghi lại URL, tiêu đề yêu cầu và phản hồi, mã trạng thái và thời gian thực thi. Dữ liệu được hiển thị trong tab Network của Chrome DevTools sau khi kết nối thiết bị qua chrome://inspect.

Network Inspector: chặn lưu lượng HTTP

Network Inspector của Stetho hiển thị tất cả yêu cầu HTTP của ứng dụng theo thứ tự thời gian. Với mỗi yêu cầu có sẵn: phương thức, URL, mã trạng thái, tiêu đề yêu cầu và phản hồi, nội dung yêu cầu và phản hồi (bao gồm JSON và dữ liệu nhị phân). Tab Preview hiển thị nội dung phản hồi dưới dạng đã định dạng.

Lọc và tìm kiếm yêu cầu

Chrome DevTools hỗ trợ lọc yêu cầu theo loại (XHR, JS, CSS, Doc), mã trạng thái và miền. Trường tìm kiếm lọc theo URL và nội dung. Với phát triển di động, nên nhóm các yêu cầu theo miền API và kiểm tra trình tự gọi khi kiểm thử các màn hình của ứng dụng.

java
// Trình khách OkHttp với interceptor Stetho
OkHttpClient client = new OkHttpClient.Builder()
    .addNetworkInterceptor(new StethoInterceptor())
    .build();

// Thực thi yêu cầu
Request request = new Request.Builder()
    .url("https://api.example.com/users")
    .build();
client.newCall(request).enqueue(callback);

Database Inspector: làm việc với SQLite

Database Inspector của Stetho kết nối đến cơ sở dữ liệu SQLite của ứng dụng qua Chrome DevTools. Trong tab Resources → Web SQL hiển thị tất cả cơ sở dữ liệu đang mở, các bảng và nội dung của chúng. Có thể xem cấu trúc bảng, chỉ mục và thực thi các truy vấn SQL tùy ý.

Thực thi truy vấn SQL qua DevTools

Trong bảng điều khiển của Chrome DevTools bạn có thể thực thi trực tiếp các truy vấn SQL trên cơ sở dữ liệu của ứng dụng: SELECT, INSERT, UPDATE, DELETE. Điều này hữu ích để dọn dữ liệu trước khi kiểm thử, kiểm tra tính đúng đắn của các migration và sửa thủ công các bản ghi sai mà không cần build lại ứng dụng. Mọi thay đổi đều hiển thị ngay trên thiết bị.

Dumpapp và plugin tùy chỉnh

Dumpapp là giao diện shell của Stetho cho phép thực thi các lệnh tùy chỉnh qua adb. Các plugin Dumpapp được đăng ký khi khởi tạo Stetho và có thể xuất bất kỳ trạng thái nào của ứng dụng: bộ nhớ đệm, cài đặt, trạng thái của vùng chứa DI. Các lệnh được thực thi dạng adb forward tcp:12345 localabstract:stetho_dumpapp.

Tạo plugin Dumpapp tùy chỉnh

Plugin triển khai giao diện DumperContext và được đăng ký qua Stetho.initialize với InspectorModules tùy chỉnh. Ví dụ dưới đây cho thấy plugin để dump SharedPreferences: dữ liệu được tuần tự hóa thành JSON và xuất ra terminal qua lệnh adb.

java
// Plugin Dumpapp tùy chỉnh cho 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());
    }
}

Stetho vs Android Studio Inspector: so sánh

Android Studio cung cấp các công cụ lập hồ sơ tích hợp: Network Profiler, Database Inspector và View Inspector, xuất hiện từ Android Studio 4.1+. Stetho phổ biến trước khi các công cụ này ra đời và vẫn phù hợp với các dự án dùng OkHttp và cần tích hợp với Chrome DevTools.

Tiêu chíStethoAndroid Studio Inspector
Cài đặtPhụ thuộc GradleTích hợp trong IDE
NetworkQua OkHttp InterceptorTự động cho API 26+
SQLiteChrome DevTools + truy vấn SQLChỉ Android Studio
SharedPreferencesCó (plugin Dumpapp)Không
View HierarchyElements trong Chrome DevToolsLayout Inspector
Hỗ trợCộng đồng (kế thừa)Chính thức từ Google

Khi nào nên chọn Stetho

Stetho phù hợp trong các dự án kế thừa nơi OkHttp đã được dùng và nhóm đã quen với Chrome DevTools. Với dự án mới, Android Studio Inspector bao phủ hầu hết các tình huống gỡ lỗi. Tuy nhiên, Chrome DevTools vẫn tiện hơn cho truy vấn SQLite: bảng điều khiển tích hợp với tự động hoàn thành SQL nhanh hơn các cú nhấp liên tiếp trong IDE.

Kiểm tra View Hierarchy qua Stetho

View Hierarchy trong Stetho được hiển thị trong tab Elements của Chrome DevTools như một cây giống DOM. Mỗi View được biểu diễn như một phần tử HTML với các thuộc tính: id, layout_width, layout_height, padding, margin, visibility và văn bản. Các thay đổi trong cây được đồng bộ theo thời gian thực khi xoay màn hình hoặc cập nhật UI.

Xem và thay đổi thuộc tính

Chọn một phần tử trong cây, bạn có thể xem các thuộc tính của nó trên bảng Styles — tương tự như kiểm tra trang web. Stetho hiển thị kích thước đã tính, khoảng đệm, màu nền và trạng thái (pressed, focused, enabled). Việc thay đổi một số thuộc tính trong DevTools được áp dụng ngay lập tức cho ứng dụng, giúp chọn tham số UI nhanh hơn mà không cần build lại.

Tìm rò rỉ bộ nhớ qua View Inspector

Stetho giúp phát hiện rò rỉ bộ nhớ liên quan đến View: nếu Activity không bị hủy sau finish(), View gốc của nó vẫn nằm trong cây. Qua việc kiểm tra thường xuyên tab Elements, bạn có thể nhận thấy các Activity ma và tìm ra nguồn rò rỉ — thường là tham chiếu tĩnh đến Context hoặc các hộp thoại chưa đóng.

Kỹ thuật gỡ lỗi thực tế

Stetho hiệu quả để kiểm tra quá trình tuần tự hóa JSON trước khi gửi lên máy chủ. Hãy mở Network Inspector, tìm yêu cầu và xem nội dung ở chế độ Raw để kiểm tra cấu trúc dữ liệu và tính đúng đắn của các trường.

Gỡ lỗi SQLiteOpenHelper

Stetho hiển thị tất cả cơ sở dữ liệu được tạo qua SQLiteOpenHelper. Nếu cơ sở dữ liệu không xuất hiện trong Chrome DevTools, hãy kiểm tra rằng getWritableDatabase() đã được gọi ít nhất một lần trong mã ứng dụng.

Thứ tự Interceptor trong OkHttp

Stetho phải là interceptor cuối cùng trong chuỗi OkHttp để thấy các yêu cầu đã được sửa đổi. Thứ tự đúng: AuthInterceptor trước, sau đó LoggingInterceptor, cuối cùng là StethoInterceptor.

Kỹ thuật gỡ lỗi thực tế với Stetho

Stetho hiệu quả để kiểm tra tính đúng đắn của quá trình tuần tự hóa JSON trước khi gửi lên máy chủ. Hãy mở Network Inspector, tìm yêu cầu và xem nội dung yêu cầu ở chế độ Raw để đảm bảo cấu trúc trường và loại dữ liệu chính xác.

Gỡ lỗi SQLiteOpenHelper và ContentProvider

Stetho hiển thị tất cả cơ sở dữ liệu được tạo qua SQLiteOpenHelper. Nếu cơ sở dữ liệu không xuất hiện trong Chrome DevTools, hãy kiểm tra rằng phương thức getWritableDatabase() đã được gọi ít nhất một lần trong mã ứng dụng. Với migration, hãy thực thi ALTER TABLE qua bảng điều khiển SQL và kiểm tra kết quả bằng truy vấn SELECT.

Thứ tự Interceptor trong chuỗi OkHttp

Stetho phải là interceptor cuối cùng trong chuỗi OkHttp để hiển thị các yêu cầu đã sửa đổi cuối cùng. Trình tự đúng: AuthInterceptor trước, sau đó LoggingInterceptor, cuối cùng là StethoInterceptor để ghi log chính xác.

Các câu hỏi thường gặp

Làm thế nào để kết nối với Stetho qua Chrome DevTools?

Kết nối thiết bị qua USB, thực thi adb forward tcp:8080 localabstract:stetho_default và mở trang chrome://inspect trong Chrome. Đảm bảo Stetho được khởi tạo trong mã ứng dụng và thiết bị được phát hiện trong danh sách Remote Target.

Stetho có hoạt động trên Android 12+ không?

Có, Stetho hoạt động trên Android 12+, nhưng yêu cầu quyền INTERNET tường minh trong tệp manifest. Trên Android 14+ có thể cần cập nhật ADB. Với dự án mới Google khuyến nghị Android Studio Inspector, nhưng Stetho vẫn hoạt động trên mọi phiên bản.

Có thể dùng Stetho mà không có OkHttp không?

Có, SQLite Inspector, SharedPreferences và View Hierarchy hoạt động không cần OkHttp. Network Inspector yêu cầu tích hợp với OkHttp hoặc HttpURLConnection qua các mô-đun stetho-okhttp3 hoặc stetho-urlconnection. Lõi cơ bản của Stetho không phụ thuộc vào thư viện mạng nào.

Làm thế nào để tắt Stetho trong bản build release?

Hãy dùng debugImplementation trong Gradle: debugImplementation 'com.facebook.stetho:stetho:1.6.0'. Trong bản build release mã Stetho không được biên dịch. Nếu việc khởi tạo được tách ra một lớp riêng — hãy bọc lệnh gọi bằng kiểm tra BuildConfig.DEBUG.

Có những lựa chọn thay thế nào cho Stetho trong năm 2026?

Các lựa chọn chính: Chucker (kiểm tra HTTP trong ứng dụng, có UI), các công cụ Android Studio Profiler và Network Inspector, cùng Flipper (nền tảng mô-đun của Facebook với chức năng mở rộng). Chucker đặc biệt phổ biến như giải pháp in-app không cần Chrome DevTools.

Tổng kết

  • Stetho là thư viện của Facebook (Meta) để gỡ lỗi Android qua Chrome DevTools, hoạt động với API 19+.
  • Kết nối qua debugImplementation của Gradle và khởi tạo trong Application.onCreate() mà không cần thêm quyền.
  • Network Inspector chặn lưu lượng HTTP qua Interceptor của OkHttp, hiển thị mọi chi tiết của yêu cầu và phản hồi.
  • SQLite Inspector cho phép thực thi các truy vấn SQL tùy ý trên cơ sở dữ liệu của ứng dụng theo thời gian thực.
  • Dumpapp cung cấp giao diện shell để tạo các lệnh tùy chỉnh xuất trạng thái của ứng dụng qua adb.
  • Stetho vs Android Studio — Stetho tiện cho SQLite và dự án kế thừa, Studio Inspector là tiêu chuẩn cho phát triển mới.
  • Chucker và Flipper — các lựa chọn hiện đại với UI in-app và kiến trúc mô-đun.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm