Android开发调试神器 - Stetho

这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战

开发者在开发中想查看安卓APP运行时的网络访问和数据存储情况,调试太麻烦,日志也挺烦,有没有更好的办法呢?Facebook给广大开发者传了福音,带了福利,放在下午茶的小桌子上,美食干货不敢独吞,所以拿来分享给大家

从事移动端安卓APP的开发,除了代码逻辑之外就是在和数据打交道。数据的输入输出,往返于网络接口之间,流窜于内存之中存储之内,不能像编写的代码那样直接在代码编辑器中看到其具体的内容。所以如果想窥探数据的真伪对错,目前来说,不外三法。本文开始,告诉你第四条路。

现状,以及各自的问题

前面说传统上有两条路可以帮助开发者查看APP运行过程中处理的数据,这里简单描述下处理方式以及每种方式的优缺点。

  • 断点调试运行中的APP。你可以用调试器直接调试一个APP,但如果这个APP过于庞大,初始化加载时间很久,那么,最好的调试办法是先将APP在设备(手机或者模拟器)上运行起来,然后用attach to process的方式在被调试的APP进程上加载调试器,这样会比一上来直接调试APP更快一些。想看数据的话,直接在相应代码行加上断点,附着在APP进程上的调试器会自动断下程序,然后查看当前上下文中各种变量的值以及内存的数据,也可以修改这些数据。但是,如果你想看某个数据是不是真的写到存储的文件里,估计需要添加额外的读取代码来查看,而且,每次给APP挂调试器查看数据,感觉还是有些不方便。如果你想诊断和分析网络的访问速度和数据的流量,数据存储的空间和总体数据量,单靠调试这种手段显得力不从心了。而且如果断点的地方在UI的某处代码,长时间处于断点状态查看数据,会导致APP发生ANR的异常。
  • 加打印日志。类似产品运营的埋点和服务端访问/操作日志,我们也可以在客户端APP相应的位置大书类似到此一游此地无淫三百靓的句式,让APP进程通过一个叫控制台的老东西(console是计算机世界的老司机了,啥大风大浪没见过的)告诉我们发生了啥,如何发生的,以及发生的结果如何。断点不好做到的网络访问速度和数据流量等东西也可以通过日志叫唤了。这么看起来,貌似加日志已经是一种很完美的办法了。但是,你有没有感觉到这样超级麻烦?首先是你的代码量突然变大了,代码结构变丑了,代码环境卫生变差了,翠花上的酸菜我不敢吃了。相信我,日志海(骷髅海的代码态) 一定会让你疲惫的双眼犹如狂风暴雨里的一叶孤舟,说翻就翻,眼都不带眨一下的。说人话,日志是一种侵入式的调试手段,啥叫侵入式?就是它必须由您老人家亲自动手埋藏在代码的心房里,直到天荒地老,APP下架,它也不会化作半点春泥更护花的。而对于调试来说,看日志的情调less than lower,千篇飞过如同嚼蜡。看过安卓日志的童鞋都知道,前尘往事并木有渺云烟,那些个天天在微信群里大呼小叫的群主来看看到底啥叫刷屏。可怜的安卓开发们,天天被日志刷屏。
  • 借助第三方工具。对于网络来说,基本就是设置代理,最常用的不外乎Charles (收费,基于Java开发,跨平台);Fiddler(免费&收费,基于.Net开发,目前支持通过mono的方式运行在Mac和Linux上);Mitmproxy(免费&开源,基于Python开发,跨平台);还有比较麻烦的办法,比如Http/Https代理+Wireshark/tcpdump这种。这些工具只能满足网络监控,对于非网络数据就无能为力了。对于存储在手机上的数据,可以通过adb登陆到手机,获得root权限后查看APP内部数据,也可以采用一些安装在手机端的带图形界面的APP来查看和修改数据,比如SQLEditor之类的,这类APP同样需要获取root权限。

那么,后来,Facebook给我们这些可怜的娃带来了福音和福利,试试看咯

听诊器来了

Stetho英译为“听诊”,是Facebook研发的安卓APP网络诊断和数据监控的框架,目前已经开放源代码,开发者接入Stetho框架提供的SDK到APP中,这样就可以通过安装在开发机(PC/MAC,Windows/OS X/Linux)上安装的谷歌的Chrome开发者工具(通过Chrome浏览器使用)来查看,诊断和分析APP中发生的网络请求和响应以及数据内容,就像用Chrome调试网站一样调试APP程序。当然,几乎任何工具都自带老司机console,Stetho也不例外,它提供了一个叫做dumpapp的工具,可以向你倾述更多的APP内心世界。

猜你喜欢

转载自juejin.im/post/7001128216505090078