今年年初,facebook开源了一个Android开发调试工具,叫stetho,应该是单词stethoscope的一部分吧,意为诊断器。
在项目中添加相应代码,通过Chrome DevTools连接设备后具备以下功能:
- 可以在Chrome里进行网络访问检测,可以查看请求链接,请求头,JSON数据等
- 不root的情况下查看Sqlite数据库,并且可以使用sql语句去操作
- 最近又升级了,API 15 以上能查看View hierarchy了
- dumpapp 工具提供强大的命令行接口来访问应用内部
更新比较频繁,前几天更新到1.1.0了,使用AndroidStudio可以很方便的添加到项目中。当然也可以从github页面下载最新Jar包。
Chrome DevTools 需要科学上网(fanqiang),否则点 inspect 会出一直是一块白板。(或者寻求其他方法解决)
要在项目中启动Stetho很方便,按照官方的说明:
添加初始化的代码到Application内,完成这一步就具备查看数据库,查看View层级结构,使用默认dumpapp工具的能力了
public class MyApplication extends Application { public void onCreate() { super.onCreate(); Stetho.initialize(Stetho.newInitializerBuilder(this) .enableDumpapp(Stetho.defaultDumperPluginsProvider(this)) .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this)).build(); } }
开启网络检测,有两种方式
- 使用HttpURLConnection有些麻烦,可以参考我提供的DEMO的代码(在正文最底下),需要用到另一个依赖 stetho-urlconnection
如果用的目前超流行的 OkHttp 则非常方便,给OkHttpClient 设置一个StethoInterceptor 即可,需要另一个依赖 stetho-okhttp
OkHttpClient client = new OkHttpClient(); client.networkInterceptors().add(new StethoInterceptor());
如果用了Retrofit这个开源项目,也可以很方便的进行设置,同样需要另一个依赖 stetho-okhttp
OkHttpClient client = new OkHttpClient(); client.networkInterceptors().add(new StethoInterceptor()); RestAdapter adapter = new RestAdapter.Builder().setClient(new OkClient(client)).setEndpoint(BASE_URL).buid();
自定义 dumpapp 可以参考我提供的DEMO的代码,值得注意的是 该工具只能运行在 类Unix环境下,比如Linux和Mac。
效果截图(点击可查看大图)
- 网络请求监测
- 查看与操作sqlite操作效果
- 查看与操作sharedpreference
- 在Chrome上查看View的层级
- 在上图显示的层级中我选中Actionbar后,手机上也会显示被选中的位置
- http请求头查看
- json数据查看