前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android Studio进阶调试技巧

Android Studio进阶调试技巧

原创
作者头像
帅气的程序员
修改2020-08-23 00:09:36
9410
修改2020-08-23 00:09:36
举报
文章被收录于专栏:Android开发之路Android开发之路

| 导语 Android Studio是一个很强大的IDE,有些很牛逼的功能却不太为人所知,这里总结了一些我所知道的进阶调试技巧。

以下内容基于Android Studio 3.5!

一. 实用功能

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

1. Analyze Stack Trace

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

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

然后点OK,如下:

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

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

2. Run inspection

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

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

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

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

3. Log收折

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

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

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

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

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

4. 自动代码提示

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

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

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

5. Analyze Apk

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

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

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

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

6. Layout Inspector

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

这个工具的路径如下:

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

二. 断点调试

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

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

1. Suspend

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

2. Condition

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

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

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

3. More

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

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

  • 断点分组

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

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

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

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

  • Exception

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

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

三. 总结

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 实用功能
    • 2. Run inspection
      • 3. Log收折
        • 4. 自动代码提示
          • 5. Analyze Apk
            • 6. Layout Inspector
            • 二. 断点调试
              • 1. Suspend
                • 2. Condition
                  • 3. More
                  • 三. 总结
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档