V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
figofuture
V2EX  ›  Android

如何像 Chrome 调试网页那样,调试你的安卓 APP

  •  
  •   figofuture · 2016-04-19 11:25:05 +08:00 · 7381 次点击
    这是一个创建于 2929 天前的主题,其中的信息可能已经有所发展或是发生改变。

    从事移动端安卓 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 内心世界。

    欲知后事,请点击 http://www.figotan.org/2016/04/18/using-stetho-to-diagnose-data-on-android/

    10 条回复    2016-04-19 17:37:11 +08:00
    kamen
        1
    kamen  
       2016-04-19 12:04:54 +08:00 via Android
    软文,还特别长,大家都散了吧
    chairuosen
        2
    chairuosen  
       2016-04-19 12:09:22 +08:00
    不是软文,还不错
    figofuture
        3
    figofuture  
    OP
       2016-04-19 12:11:47 +08:00
    @kamen 亲身实践的,怎么会是软文呢?主要是为了介绍 Facebook 开源的 Stetho 工具来的。
    dphdjy
        4
    dphdjy  
       2016-04-19 12:14:41 +08:00 via Android
    不是软文,但是。。。大概开发的基本都知道了才对~
    dphdjy
        5
    dphdjy  
       2016-04-19 12:15:28 +08:00 via Android
    不过。。。_(:з)∠)_ 好拖沓的文章。。。
    kamen
        6
    kamen  
       2016-04-19 12:22:02 +08:00 via Android
    @figofuture 好吧,我为自己的言论道歉,不过这文章也太拖沓了吧?
    Light3
        7
    Light3  
       2016-04-19 13:19:40 +08:00
    = = 看了点别的 不错
    MASAILA
        8
    MASAILA  
       2016-04-19 13:54:48 +08:00
    文章写的不错的 其实不用全文转载 贴个 url 就好了
    Exin
        9
    Exin  
       2016-04-19 14:47:39 +08:00
    借地问一句:我用 Android Studio 调试 App 的时候,加断点经常导致 App 在断点之后无故退出且没有错误日志。有人遇到过吗?
    morning
        10
    morning  
       2016-04-19 17:37:11 +08:00
    @Exin 把最右边的过滤去掉应该能看到
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3373 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:41 · PVG 18:41 · LAX 03:41 · JFK 06:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.