《Android编程权威指南》之Android应用调试篇

处理应用的bug,这是每个程序员的基本功,实际项目中天天都有各式各样的bug,因此学会如何使用Logcat、Android Lint以及Android Studio内置的调试器就非常有必要啦。

异常与栈跟踪

写代码嘛,一个不注意就把程序写奔啦,不用担心,展开Android DDMS工具窗口。上下滑动LogCat窗口滚动条,就能看到整片红色的异常或错误信息。若看不到,可尝试选择LogCat的No Filters过滤器项。还有可以调整Log Level位Error,让系统只输出严重问题日志。

如图,随意写个空指针错误,LogCat就打印出了异常报告,告诉我们异常及其栈追踪,我们可以从异常语句直接跳转到源代码出错的对应行上,找出奔溃原因,加以修正。


《Android编程权威指南》之Android应用调试篇_第1张图片
Demo截图

如果发生应用崩溃的设备没有与计算机连接,日志信息也不会全部丢失。设备会将最近的日志保存到日志文件中(保存时间取决具体设备,一般十分钟之内有保证)。

记录栈跟踪日志

这个方式就是打印日志了,因为有的时候代码出现问题,不一定就会造成奔溃了,就可以在需要的地方,利用Log.d(...)方式来打印相应的信息,来检查方法是否正常调用,并且数据值是否跟预计一致了。大量的日志输出也容易导致LogCat窗口信息混乱难读,因此可以在查看的时候也可以过滤掉一些暂时不需要查看的日志,或者直接选择TAG,就只打印某一些log日志了。

《Android编程权威指南》之Android应用调试篇_第2张图片
Demo截图
一般项目中都会自行封装一个专门打印Log日志的类,用于控制整个项目的日志输出,github上面有个非常好用的日志输出工具,叫 logger 它打印出来的log是这个样子,很方便实用。

《Android编程权威指南》之Android应用调试篇_第3张图片
github上截图

地址:https://github.com/orhanobut/logger

设置断点

打断点也是程序员调试程序的常用方法,断点会在断点设置行的前一行代码出停止运行,然后我们可以逐行检查代码,看看接下来到底发生了什么。

《Android编程权威指南》之Android应用调试篇_第4张图片
Demo截图
像这样在需要打断点的代码那行旁边,点个小红点出来,此时需要调试运行整个项目而不是直接运行,单击run旁边的debug
Demo截图
设备会报告说正在等待调试器加载,然后继续运行。然后从

Demo截图
能看到各种信息,然后就是学习这是视图显示的一些信息是代表什么意思了,还有跳转下一步啊,对断点的各种操作啦什么的。
《Android编程权威指南》之Android应用调试篇_第5张图片
截图取自此书

有篇文章专门讲了Android Studio一些各种小技巧,当然包含了调试技巧,很棒的文章。

地址:http://jaeger.itscoder.com/android/2016/02/14/android-studio-tips.html

小结一句:打印Log日志的优点是,在同一日志记录中可以看到多处的栈跟踪信息;缺点是,必须学习如何添加日志记录方法,重新编译、运行应用并跟踪排查应用问题。相对而言,断点调试的方法更为方便,当然不同场景下,打印日志会更加清晰、方便寻找解决问题线索,比如说一个循环中。

Android特有的调试工具——Android Lint

Android Lint是Android应用代码的静态分析器,它是无需代码运行就能检查代码错误的的特殊程序,凭着对Android框架知识的掌握,Android Lint深入检查代码,找出编译器无法发现的问题。
选择Analyze -> Inspect Code...菜单项手动运行Lint


《Android编程权威指南》之Android应用调试篇_第6张图片
Demo截图

选择Whole project。然后Android Studio会立即运行Lint和其他一些静态分析器开始分析代码。
检查完毕,所有的潜在问题会按类别列出。


《Android编程权威指南》之Android应用调试篇_第7张图片
Demo截图
展开Android Lint类别可看到项目中的具体Lint信息,继续展开看到更加详细的信息,包括问题发生的地方。


R类问题——有时候资源编译错误莫名其妙的出现,若遇到此类问题,可尝试如下操作

  1. 重新检查资源文件中的XML文件的有效性(某个布局的拼写有可能错误,拼写规范要遵守)
  2. 清晰项目(选择Build -> Clean Project,Android Studio会重新编译整个项目,消除错误,建议经常进行深度项目清理)
  3. 使用Gradle同步项目(若修改了build.gradle配置文件,就需要同步更新项目的编译设置。选择Tool -> Android -> Sync Project with Gradle Files菜单项,Android Studio会使用正确的项目设置重新编译项目)
  4. 运行Android Lint(仔细查看Lint警告信息,在项目中也许就能在这个工具的帮助下获得意想不到的发现噢)

如果仍然无法解决问题,那就访问 http://stackoverflow.com 寻求帮助吧 ~ O(∩_∩)O哈哈 ~

挑战练习:探索布局检查器

使用布局检查器以交互的方式检查布局文件,调试布局文件,研究它是如何在屏幕上渲染显示的。启动应用,在Android Monitor工具窗口点击最左边的布局检查器按钮,布局检查器激活后,点击布局检查器视图里的元素查看布局属性。

《Android编程权威指南》之Android应用调试篇_第8张图片
截图取自此书
实际上我在Android Studio3.0 Logcat旁边没找到这个布局检查器,大概在旧一点的AS版本里面有。看到Lotcat旁边看到一个截图功能,还挺好的。

《Android编程权威指南》之Android应用调试篇_第9张图片
截图取自demo
我查看布局属性应该直接在XML文件这里不知道算不算,如图,由此可以看到布局属性,布局结构组成。

《Android编程权威指南》之Android应用调试篇_第10张图片
截图取自demo
好不容易找到了AS3.0 布局检测器,Tools> Android>Layout Inspector

《Android编程权威指南》之Android应用调试篇_第11张图片
截图取自demo
选择应用
《Android编程权威指南》之Android应用调试篇_第12张图片
截图取自demo
选择window
《Android编程权威指南》之Android应用调试篇_第13张图片
截图取自demo
查看自己想查看的布局控件信息,点击中间的控件,左边定位到控件,右边是当前控件的属性表格。

《Android编程权威指南》之Android应用调试篇_第14张图片
截图取自demo

挑战练习:探索内存分配跟踪

在Android Monitor工具窗口,点击内存分配跟踪器按钮启动它。

《Android编程权威指南》之Android应用调试篇_第15张图片
截图取自此书
然后在前台操作应用,后台就开始记录内存分配状况。一旦找到想优化的点,就可以再次点击内存分配跟踪器按钮停止。就可以看到内存分配报告。

《Android编程权威指南》之Android应用调试篇_第16张图片
截图取自此书
内存分配报告会列出内存分配发生的次数以及字节大小。在工具顶端选择你需要的报表类型,报表展现形式可以是表,也可以是图。

然而,AS3.0我也没找到书上的这个内容,不过提供了个强大的 Android Profiler 分析器。

《Android编程权威指南》之Android应用调试篇_第17张图片
截图取自demo
选择要配置的设备和应用程序进程,单击NETWORK,CPU或MEMORY时间线可以打开每个分析器的更详细视图。

截图取自demo
点击Run Configuration

截图取自demo
《Android编程权威指南》之Android应用调试篇_第18张图片
截图取自demo
这里显示gradle plugin 的版本至少是2.4,我这项目的plugin是2.2.3,此时并不能很好的体会这个功能的强大。我这最终把项目的build gradle plugin改成了3.0.0

《Android编程权威指南》之Android应用调试篇_第19张图片
截图取自demo
当然,移植过程中会遇到不少坑,百度还是找的到原因的,我参考的博客: http://blog.csdn.net/qq_34795285/article/details/78194282
还有butterknife最新的在3.0.0也报错有问题,所以我用的butterknife版本为8.4.0。

终于可以勾选那个Enable advanced profiling了,那里描述是,需要API级别小于26,在允许Profiler跟踪网络负载,应用程序事件和对象计数等数据的时候,它可能对构建速度有轻微的性能影响。

单击Network——网络使用情况

《Android编程权威指南》之Android应用调试篇_第20张图片
截图取自demo

横坐标代表是时间轴,那些折现是一些网络请求,按住鼠标左键从中选择一个范围,那用两条白色的竖杆包起来那块就是选择的范围,然后左下的列表就列出来了此范围的网络请求信息,什么状态啊,时间,请求类型啊,点击其中一条,右边显示的response更为具体了,图片的直接显示了图片,还有URL,不是图片的,把json数据全部都显示出来了,这个功能真的好方便呀,旁边还有一些选项,都可以看看用于分析。

单击MEMORY——内存使用情况

《Android编程权威指南》之Android应用调试篇_第21张图片
截图取自demo

单击CPU——CPU占用情况

《Android编程权威指南》之Android应用调试篇_第22张图片
截图取自demo

具体怎么分析使用,网上也有不少,可以参考博客:http://blog.csdn.net/niubitianping/article/details/72617864

更新于 2018/2/2

你可能感兴趣的:(《Android编程权威指南》之Android应用调试篇)