第4章 Android应用的调试(1/1)
有关复制Project文件夹之后
上次复制了整个文件夹作为一个新的项目之后,确实是可以各自运行了,但是出现了一个新的问题,就是两个项目在AVD上安装apk,会覆盖掉先前的App。其实这运行起来也没什么问题,但是我觉得两个工程共用一个App很奇怪。
一定有某些元素决定了一个App的独一性。既然我当时是直接复制整个文件夹的,那么那些参数想必也没有改变——即便重建了项目也是。上网查询了之后找到了解决方法。
所以总结一下就是,区分一个App是否是独一的,一是包名,二是AndroidManife.xml文件的一些参数(包名),三是Gradle Scripts文件。
有关Android应用调试方法的概括
最开始的,我们可以使用LogCat来查看异常或错误信息。在外面编写的大部分代码中,最后一个没给出原因的异常往往就是关注点,点击蓝色链接,Android Studio就会自动跳转到源代码对应的代码行。
此法适用于崩溃型运行异常,非崩溃型异常往往检测不了。因此在这一章介绍了众多常用的调试方法。
记录栈跟踪日志
如果你怀疑某一个方法在某处没有被调用,可以在方法中添加日志输出语句
Log.d(TAG,"Updating question text", new Exception());
每当调用该方法时就会建立一个新的不抛出的异常对象。通过追踪调用异常记录方法的地方就可以查清你所怀疑的方法在何时何地被调用了。
设置断点
这个就是很普通的设置断点,使用起来和其它编译器没什么区别。
使用异常断点
Run->View Breakpoints菜单可以调出异常断点的设置窗口。点击“–”可以删除先前设置的断点;点击“+”可以设置一个新的断点。
新增一个断点时可以选择需要捕获的异常的类型。设置完成后调试应用,调试器就能很快的定位到异常抛出的代码行,真是太棒啦。
使用Android Lint
Android Lint时Android应用代码的静态分析器(static analyzer)。它能深入检查代码,找出编译器无法发现的问题。
其实功能就是和很多IDE自带的检查语法差不多,我们在写代码时会自动帮我们检测。只不过很多IDE只能检测比如Java的语法错误,而不能检测Android的。Android Lint就是补足了这个功能。
值得注意的是可以主动去搜寻项目中所有潜在的问题。Analyze->Inspect Code可以手动运行Lint,使用时可以手动选择检查的范围,既然都手动使用了那就直接选Whole project了。检查完之后会列出所有的潜在问题,可以去查看详细信息也可以跳转到有问题的代码行上。
R类的问题
引用未添加的资源或者删除仍然被引用的资源会导致编译错误;此外资源编译错误又是会一直存在或莫名其妙出现。遇到后一种情况可以尝试以下操作。
重新检查资源文件中XML文件的有效性
某个布局XML文件中的拼写错误会导致最近一次编译未生成R.java文件,需要修复找到的错误并且重新保存。
清理项目
Build->Clean Project
Build->Rebuild Project
建议经常做深度清理。
使用Gradle同步项目
如果修改了build.gradle配置文件,就需要同步更新项目的编译设置。
Tools->Android->Sync Project with Gradle
一般来讲只要你修改了build.gradle文件,Android Studio就会自动提示你同步编译设置。
运行Android Lint
走投无路的无奈之举。
关于挑战练习
这次的挑战练习没什么难度,就是欣赏一些新功能。不过我又一次搞出了意想不到的问题。如果强制关闭AVD,重启开启之后会使得Android Monitor找不到这台AVD。如下图所示的DISCONNECTED。
解决方法是,重新开几次AVD,直到恢复为止。实在不行就重启AS。
探索布局检查器
如下图所示
探索内存分配跟踪
可以设置监视某一段时间的内存分配情况。我觉得图标挺好看的。