一. 实用功能

第一部分先介绍几个实用的功能。

1. Analyze Stack Trace

平时我们拿到用户或者测试提供的Crash堆栈时,我们是怎么定位代码呢?一般我们是人肉找代码,其实有个更快速的方法,即Android Studio提供的Analyze Stack Trace,路径如下:

olba4d4e34-3f40annyqz4.png

点击进入,建议先复制堆栈再打开这里,他会自动读剪切板的内容:

61nntoz425-2daqqaxdu4g.png

然后点OK,如下:

gmutamwj2y-jfbiucu2p3t.png

直接就能定位到对应的代码位置,是不是很方便!

当然这里有个前提,如果拿到的堆栈是代码混淆过的,或者工程的代码已经修改过了,定位的代码位置肯定就不准了,其实你人肉搜索代码也一样不准。

2. Run inspection

此功能是Android Studio提供的分析检测功能,即以前的lint,可以分析出工程里无用的资源和引用,路径如下:

ilm83iwh7i-ukqmwtbexj1.png

然后在弹框里输入要检查的选项即可,选项有很多,这里演示一下无用资源,如下:

8v3ti8yxsr-t30bkavejlr.png

耐心等待后,应该可以看到检查结果,如下:

k7r5yhho84-bxgmn55o3kk.png

还有其他不少检查的选项可以自己探索一下。

3. Log收折

有时我们为了方便,会在类似getView这样的频繁调用方法打log,如下:

pxp1uuxtwz-mrk1ta0jxua.png

很容易一整屏都是这种log,但又不想代码里把他去掉,这时候就可以用收折功能把这些log 收折起来,如下:

52sl66ahft-4axkdlbm0fq.png

选中想要收折的log里相同的字段,右键选择Fold Lines Like This,如下:

zi7xz257uw-lstvsi13tto.png

点ok就行,后面log就会自动收折,控制台显示如下:

dx59byxoyy-yhxt5urh1yo.png

留意一下这里,除了我们这次新增的关键字外,前面还有一大堆已经帮我们加好的关键字,不出意外的话,平时在控制台看到的系统log里有些是自动收折的,他应该就在这里面,如下:

cqlbb6k9zb-wneghdzdwuw.png4. 自动代码提示

假设你写了下面这样的代码:

m09rnskqxp-xfevyptzmgu.png

你的Activity并没有实现ClickListener接口,所以报错很正常,这时你可以自己去完善代码,也有更快的方法,鼠标放在红线的地方,Alt+Enter试试,Android Studio会自动出现代码提示:

sgb4pp75d6-3weq2baisw3.png

选择对应的方案,Android Studio就会自动帮你补充需要的代码。

5. Analyze Apk

如果你想看一下最终打包的Apk结构,可以使用Analyze Apk,路径如下:

v4b9brqm9x-55x2x0szzpz.png

然后选择对应文件夹下的Apk包即可,如果是通过gradle自动编译出包,Android Studio会自动定位到出包的文件夹下,分析图如下:

1k30lzfzp9-0btc24u2wdm.png

这里可以看到dex和资源最终在压缩包里的大小和占比。

如果是外面下的Apk包,可以直接拖到Android Studio,他会自动解析。

6. Layout Inspector

这个工具可以用来抓取当前UI的布局,包括View的当前属性和参数,平时主要有两种用途,一是找陌生页面的某些控件代码,对于一个陌生页面,如果需要在上面修改UI,有时不知道从哪入手,可以通过这个工具找到具体View的id,搜索一下就可以找到布局和代码位置了;二是可以分析View的大小和间距等属性,如果一个View显示不符合预期,代码又看不出啥问题,通过看布局的各属性或许可以找到原因。

这个工具的路径如下:

vvikl4cg81-gjkwi3t25pl.png

然后根据提示,选取对应的进程和Activity,就可以显示出结果了,如下:

6ky89mhmjv-5a1lc1mlm5t.png二. 断点调试

断点调试相信每个开发日常都在用,除了最基本的断点,单步调试等操作,Android Studio的断点调试功能还不止这些,感兴趣请往下看。

秘诀如下,右键一个断点,会出现高级面板,从上往下依次是,Enabled(开关),Suspend(线程挂起),Condition(条件断点),More(断点管理),Enabled很简单,就是启动或暂用一个断点,下面介绍其他几个实用的技巧。

spstw70uio-r51ptthrqgb.png1. Suspend

即线程挂起规则,如果平时没操作过这里,或者不知道有这个选项,其默认选项就是Thread,即断点到达时,当前线程会挂起,这符合App的运行原理,想象你在一个子线程阻塞了,并不会影响其他线程的运行。All代表当断点到达时,所有线程都会被挂起,即整个app都会停止,想象一下,有时候我们在调试一个断点走了好几分钟,走完时发现其他线程都跑了n轮了,很不方便定位问题,这时候就可以选择All试试了。

2. Condition

即条件断点,代表此断点在某个条件满足时才会触发,这是个很强大的功能,大部分时候用不到,但某些场景下会发现很好用。

举个例子,ListView+Adapter我们都用过,如下:

s8qagdipqn-pnogfrrfhjl.png

如果我们需要调试getView这个方法时,这个断点会很频繁地触发,如果只是想调试某个position的场景,这时Condition就派上用场了,直接在Condition处输入条件就行(position==10),断点只会在满足此条件下才会触发,输入时Android Studio会自动联想,其上下文就是当前的代码上下文,变量和方法都可以用来作为条件输入,是不是很强大。

mgg5iq1ket-stt4wfn5eij.png3. More

直接点击More,即可进入断点管理面板,如下:

jwm5etfucy-pihql4wcpc4.png

这里主要介绍两个功能,断点分组和Exception。

断点分组

从上图我们可以看到,默认所有断点都铺开列在一起,如果平时经常打点,上百个断点很正常,这里就会显得很混乱,有时想统一禁用某些类的断点都很费劲,这里有两个技巧,一个是使用顶部提供的分包和分类管理,如下:

4r3z2stlp7-cu0ahjkfpmz.png

这里选的是分类管理,即同个类的断点会显示在一起,前面两个分别是分包和分文件管理,可以自己根据需要选择。

另外一个技巧是自定义分组,如下:

wxz4tjr9ir-vop2pyngk0w.png

shift选择多个断点后右键,Create new创建一个自定义名字的分组(比如某个bug),然后这几个断点就会单独分到自定义的分组下,如下:

qz6km2t591-qia2n0krkg5.png

Exception

即App运行过程中出现Exception的时候,是否要被Android Studio捕获,如下:

dmyayfrmgd-q4mbxvpeuoa.png

Android Studio默认是关闭这个选项的,猜测可能是考虑到性能问题,一般我们通过log也可以快速定位到Exception的位置,但如果要看一下Exception的现场来定位问题,则可以打开这个选项,Android Studio会自动断点在抛Exception的位置。

三. 总结

总结一下,以上只是Android Studio众多功能中的一小部分,如果用得好,可以大大提高开发和调试效率,期待后续挖掘更多的技巧!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐