Stetho——A Debug Bridge for Android Applications


Stetho

Stetho is a sophisticated debug bridge for Android applications. When enabled, developers have access to the Chrome Developer Tools feature natively part of the Chrome desktop browser. Developers can also choose to enable the optional dumpapp tool which offers a powerful command-line interface to application internals.

Stetho Build Status

Features

Chrome DevTools


The integration with the Chrome DevTools frontend is implemented using a client/server protocol which the Stetho software provides for your application. Once your application is integrated, simply navigate to chrome://inspect and click “Inspect” to get started!

Database Inspection


SQLite databases can be visualized and interactively explored with full read/write capabilities.

View Hierarchy


View hierarchy support for ICS (API 15) and up! Lots of goodies such as instances virtually placed in the hierarchy, view highlighting, and the ability to tap on a view to jump to its position in the hierarchy.

Stetho is a sophisticated debug bridge for Android applications. When enabled,
developers have access to the Chrome Developer Tools feature natively part of
the Chrome desktop browser. Developers can also choose to enable the optional
dumpapp tool which offers a powerful command-line interface to application
internals.

Once you complete the set-up instructions below, just start your app and point
your laptop browser to chrome://inspect. Click the “Inspect” button to
begin.

Set-up

Download

Download the latest JARs or grab via Gradle:

1
compile 'com.facebook.stetho:stetho:1.4.2'

or Maven:

1
2
3
4
5
<dependency>
<groupId>com.facebook.stetho</groupId>
<artifactId>stetho</artifactId>
<version>1.4.2</version>
</dependency>

Only the main stetho dependency is strictly required; however, you may also wish to use one of the network helpers:

1
compile 'com.facebook.stetho:stetho-okhttp3:1.4.2'

or:

1
compile 'com.facebook.stetho:stetho-urlconnection:1.4.2'

You can also enable a JavaScript console with:

1
compile 'com.facebook.stetho:stetho-js-rhino:1.4.2'

For more details on how to customize the JavaScript runtime see stetho-js-rhino.

Putting it together

Integrating with Stetho is intended to be seamless and straightforward for
most existing Android applications. There is a simple initialization step
which occurs in your Application class:

1
2
3
4
5
6
public class MyApplication extends Application {
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}
}

This brings up most of the default configuration but does not enable some
additional hooks (most notably, network inspection). See below for specific
details on individual subsystems.

Enable network inspection

If you are using the popular OkHttp
library at the 3.x release, you can use the
Interceptors system to
automatically hook into your existing stack. This is currently the simplest
and most straightforward way to enable network inspection:

1
2
3
new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor())
.build()

Note that okhttp 2.x will work as well, but with slightly different syntax and you must use the stetho-okhttp artifact (not stetho-okhttp3).

As interceptors can modify the request and response, add the Stetho interceptor after all others to get an accurate view of the network traffic.

If you are using HttpURLConnection, you can use StethoURLConnectionManager
to assist with integration though you should be aware that there are some
caveats with this approach. In particular, you must explicitly add
Accept-Encoding: gzip to the request headers and manually handle compressed
responses in order for Stetho to report compressed payload sizes.

See the stetho-sample project for more details.

Going further

Custom dumpapp plugins

Custom plugins are the preferred means of extending the dumpapp system and
can be added easily during configuration. Simply replace your configuration
step as such:

1
2
3
4
5
6
7
8
9
10
11
Stetho.initialize(Stetho.newInitializerBuilder(context)
.enableDumpapp(new DumperPluginsProvider() {
@Override
public Iterable<DumperPlugin> get() {
return new Stetho.DefaultDumperPluginsBuilder(context)
.provide(new MyDumperPlugin())
.finish();
}
})
.enableWebKitInspector(Stetho.defaultInspectorModulesProvider(context))
.build())

See the stetho-sample project for more details.

Improve Stetho!

See the CONTRIBUTING.md file for how to help out.

License

Stetho is BSD-licensed. We also provide an additional patent grant.