磨刀不误砍柴工,只有熟练掌握 IDE 提供的工具,才能事半功倍的高质量完成任务。
一、Lint

1.1 什么是 Lint
Android Studio 提供一个名为 Lint 的静态代码扫描工具,可以发现并纠正代码结构中的质量问题,而无需实际执行该应用,也不必编写测试用例。Lint 工具可检查您的 Android 项目源文件是否包含潜在错误,以及在正确性、安全性、性能、易用性、便利性和国际化方面是否需要优化改进。也就是说,通过 Lint 工具,我们可以写出更高质量的代码和代码潜在的问题,提高开发效率。
1.2 Lint 禁止检查
由于 Android Studio 内置了 Lint 工具,好像不需要我们干嘛。可是呀,看着面板上的黄色块,感觉超级不爽的。所以我们得了解如何配置 Lint,让它为我们服务,而不是为Google服务。
红色错误可以通过注解来消除(一般建议是根据提示进行修正,除非明白自己在做什么),可以在类或该代码所在的方法添加 @SuppressLint。即禁止 Lint 检查特定的问题检查,如果要禁止该 Java 文件所有的Lint问题,可以在类前添加如下注解 :@SuppressLint(all)。 对 XMl 文件的禁止,则可以采用如下形式:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="UnusedResources" >
<TextView
android:text="@string/auto_update_prompt" />
</LinearLayout>
父容器声明了 ignore 属性,那么子视图会继承该属性。例如上文 LinearLayout 中声明了禁止 Lint 检查 LinearLayout 的 UnusedResources 问题,TextView 自然也禁止检查该问题。禁止检查多个问题,问题之间用逗号隔开;禁止检查所有问题则使用 all 关键字。
tools:ignore="all"
我们也可以通过配置项目的 Gradle 文件来禁止检查。
例如禁止 Lint 检查项目 AndroidManifest.xml 文件的 GoogleAppIndexingWarning 问题。在项目对应组件工程的 Gradle 文件添加如下配置,这样就不会有黄色提醒了。
defaultConfig{
lintOptions {
disable 'GoogleAppIndexingWarning'
}
}
1.3 配置 Lint
上面通过 注解 和 在 xml 使用属性 来禁止 Lint 工具检查相关问题,其实已经是对Lint的配置了。Lint将多个问题归为一个issue(规则),例如下图右边的的六大规则。
- App Source Files:源文件包含组成 Android 项目的文件,包括 Java 和 XML 文件、图标和 ProGuard 配置文件等。
- lint.xml 文件:此配置文件可用于指定您希望排除的任何 Lint 检查以及自定义问题严重级别。
- lint Tool:我们可以通过Android Studio 对 Android 项目运行此静态代码扫描工具。也可以手动运行。Lint 工具检查可能影响 Android 应用质量和性能的代码结构问题。
- Lint 检查结果:我们可以在控制台(命令行运行)或 Android Studio 的 Inspection Results 窗口中查看 Lint 检查结果。
通过 Lint 工具的工作流程了解到,可以在 lint.xml 文件配置一些信息。一般新建项目都是没有 lint.xml 文件的,在项目的根目录创建 lint.xml 文件。格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- list of issues to configure -->
</lint>
那么有哪些 Issues(规则)呢?在 Android 主要有如下六大类:
- Security 安全性:在 AndroidManifest.xml 中没有配置相关权限等
- Usability 易用性:重复图标,上文开始黄色警告也属于该规则等
- Performance 性能:内存泄漏,xml 结构冗余等
- Correctness 正确性:超版本调用 API,设置不正确的属性值等
- Accessibility 无障碍:单词拼写错误等
- Internationalization 国际化:字符串缺少翻译等
1.4 检查项目质量
好不容易开发了个 APP,心里没底,那就让代码自查下,通过 Lint 来看看代码质量如何吧。步骤:
- 通过 Android Studio 的菜单栏 Analyze 选项下拉选择第一个选项 Inspect Code
-
在弹出框根据自己需要选择 lint 工具的检查范围,这里选择整个项目。检查时间也是根据项目大小来定的
-
等待一段时间后,会列出检查结果

从上图看到,不仅会检查 Android 存在的问题,也会检查 Java 等其他问题。通过单击问题,可以从右边提示框看到问题发生的地方和相关建议。
二、Profiler

2.1 什么是 Profiler
Android Studio Profiler 工具提供了实时数据,可以帮助你了解应用使用 CPU、内存、网络和电池资源的情况。虽然我们有各种的分析器,例如 CPU 分析器、内存分析器、网络分析器和能耗分析器。但 Android Profiler 可以兼容 Android 5.0(API级别21)及更高版本。可以使用 Android Studio 中的高级事件探查器来监视应用会话消耗 CPU 资源和内存的状况。内存探查器可以帮助我们使用 Leak Canary 调试内存泄漏。
2.2 启动分析
要打开 Android Profiler 窗口,请按以下步骤操作:
- 点击工具栏中的 Android Profiler(也可以点击 View > Tool Windows > Android Profiler )
-
在 Android Profiler 窗口顶部选择想要分析的设备和应用进程,如下图所示:
Profiler 窗口展示如下等内容:
- CPU 可以对代码中的方法进行检测,方法的调用次数和所花时间。
- Memory 主要是用来监测 APP 的内存分配情况,判断是否存在内存泄漏。
- Network 是用于显示 APP 网络请求的状态,频繁的网络请求是耗电的重要原因。
- Energy 主要用来展示当前的能耗情况,即功耗
通过这些数据可以分析页面启动的时间、占用内存的大致情况等。
2.3 CPU Profiler
CPU Profiler 可帮助实时检查应用的 CPU 使用率和线程 Activity,并记录函数跟踪,以便优化和调试应用代码。
2.4 Memory Profiler
Memory Profiler 是可帮助识别导致应用卡顿、冻结甚至崩溃的内存泄漏和流失。 它显示一个应用内存使用量的实时图表,可以捕获堆转储、强制执行垃圾回收以及跟踪内存分配。
Memory Profiler 可显示有关对象分配的以下信息:
- 分配哪些类型的对象以及它们使用多少空间
- 每个分配的堆叠追踪,包括在哪个线程中
- 对象在何时被取消分配(Android 8.0+)
如果设备运行 Android 8.0 或更高版本,可以按照下述方法查看对象分配: 只需点击并按住时间线,并拖动选择想要查看分配的区域,如下图所示:
2.5 Network Profiler
Network Profiler 能够在时间线上显示实时网络 Activity,包括发送和接收的数据以及当前的连接数,便于查看应用传输数据的方式和时间,并据此对底层代码进行适当优化。
点击网络连接的名称即可查看有关所发送或接收的选定文件的详细信息④。 点击各个标签可查看响应数据、标题信息和调用堆栈。
注:Network Profiler 目前只支持 HttpURLConnection 和 OkHttp 网络连接库。