Android查问题的一些技巧

Posted by smallSohoSolo on December 9, 2018

当项目庞大到一定量级的时候,我们就会出现各种神奇的问题,针对查问题的一些方案,总结了一些小技巧,可以帮助大家更快的定位问题,而不用浪费更多时间

如何定位一个View在哪里

如果这个view可以点击,在OnClickListener的OnClick方法上面打个断点

image-20181209164806982

如果这个View无法点击,请在View的OnTouch方法添加断点,用手触摸一下即可。

image-20181209165034471

点击一下命中之后即可在左下角的调用栈看到对应的View.

如何输出一个方法的调用栈

我们知道如果这个方法只被执行一次,那么你在这个方法上添加一个断点然后执行一次看debug调用栈就好了,但是如果这个方法被很快速的调用,那么大概率断点会卡死或者不调用,实战中是这样的。

如果这个方法可以被你修改,那么加一句log

Log.d("smallsoho","smallsoho",new Throwable("smallsoho"));

这样在log中过滤这句话就能看到所有的方法调用栈了。

如果这个方法不能被你修改怎么办?比如我想看一个sdk中被混淆的方法,我无法进行修改。

此处推荐一个aop框架:https://github.com/eleme/lancet

集成这个框架之后,我举一个输出onTouch事件的log调用栈

@TargetClass("android.view")
@Proxy("onTouchEvent")
public boolean onTouchEvent(MotionEvent event) {
    Log.d("smallsoho", "smallsoho", new Throwable("smallsoho"));
    return (boolean) Origin.call();
}

如何知道当前Activity是哪个

在log中ActivityManager,并且选择为No Filters,然后即可看到当前Activity启动的是哪个,并且能看到启动的参数。

image-20181209171341776

如何知道当前App的布局状况

如果你的项目中集成了stetho,打开你的chrome浏览器,输入

chrome://inspect/

然后你就能进入到一个页面

image-20181209172021260

点击inspect即可进入到布局管理中

image-20181209172141036

这里打马赛克的位置就是布局文件,鼠标放在上面,手机上会实时显示这个布局所在的区域,用蓝色高亮。十分方便。

总结

合理的使用log的第三个参数,合理使用断点和各种第三方开发工具能大大加快查问题的速度,工具的意义是辅助我们,而不是其他。