课程介绍与目标:Lint 和 Detekt 到底能帮你做什么
大家好,我是你们这堂课的主讲人。在 Android 圈子里摸爬滚打了十来年,我见过太多「代码审查像开盲盒」的项目——每次 PR 一打开,满屏都是缩进错误、命名不规范、甚至空指针隐患。说实话,这种问题如果都靠人工来盯,效率太低了。所以今天这门课,我想跟你聊聊怎么把 Lint 和 Detekt 这两个静态分析工具,塞进 CI 流水线的不同层次里,让机器替你把那些低级的坑提前踩掉。
Lint 是什么?Detekt 又是什么?
先简单说说这俩工具。Lint 是 Android Studio 自带的静态分析工具,它主要扫描 XML 资源、Manifest 文件、Java/Kotlin 代码里那些「约定俗成但不规范」的地方。比如硬编码字符串、未使用的资源、布局性能问题——这些它在行。
Detekt 呢,是专门针对 Kotlin 代码的静态分析工具。它更关注代码复杂度、函数长度、包依赖等「代码坏味道」。我记得在做一个大型模块化项目时,有个同事写了一个 400 行的函数,Detekt 直接报复杂度超标,我一看,其实完全可以拆成四个小函数。从那次之后,我们团队就把 Detekt 的复杂度阈值写进了 CI 的硬性门槛。
简单总结一下两者的侧重点:
| 工具 | 重点扫描领域 | 典型规则 | 输出格式 |
|---|---|---|---|
| Lint | Android 资源、XML、Manifest、Java/Kotlin 语法约定 | HardcodedText、UnusedResources、ObsoleteLayoutParam | HTML、XML、JSON、纯文本 |
| Detekt | Kotlin 代码风格、复杂度、潜在缺陷 | LongMethod、CyclomaticComplexity、UnusedParameter | HTML、XML、SARIF、纯文本 |
你想想看,如果把这俩工具只放在「开发者本地跑一跑」,那效果其实很有限。为什么?因为每个人在提交前可能忘了跑,或者跑出来一堆警告直接忽略。所以我一直主张:要把静态分析嵌入到 CI 的不同分层里,让机器替你把第一道关。
CI 分层概念:让静态分析在合适的位置发光
很多团队会把 CI 理解成「就一个 Jenkins job,跑一遍测试就完事」。但实际工程里,CI 是一个多层流水线,从开发者本地的预提交钩子,到远程的代码门禁,每一层的目标不同,工具配置也应该不同。
- 本地层:开发者自己的 IDE / 命令行。这里 Lint 和 Detekt 可以跑「快速模式」,只检查本次修改的文件,目标是秒级反馈。我习惯在 git hooks 里挂一个 pre-commit 脚本,跑 Detekt 的 quick 配置,超过阈值就直接拒绝提交。
- CI 构建层:一般指 push 后触发的 Jenkins / GitLab CI / GitHub Actions。这里跑全量扫描,输出 SARIF 或 HTML 报告,结果存入制品库。我曾经吃过亏——有一次局部扫描没发现问题,全量跑才发现一个废弃的 Activity 引用了即将废弃的 API,差点酿成线上 bug。
- PR 门禁层:代码评审阶段。这里只对比 PR 分支与目标分支的差异,新增的 issue 必须全部清零才能合并。Detekt 可以用 baseline 功能忽略历史遗留问题,只关注增量。
- 代码仓库层:合并到主分支后,可以跑一次全量长时间扫描,生成质量趋势图,用于团队复盘。
我用一个图把这四层的关系画了出来,你看一眼就明白了:
看到这张图,你应该已经理解了我说的「分层」是什么意思。每一层虽然都在跑 Lint 和 Detekt,但规则集、扫描范围、触发时机完全不同。嗯,这里要特别提一句:不要试图用一个配置打天下。我见过有的团队把本地检测的规则开得特别严,结果开发同学每天被几百个警告淹死,最后直接关掉了整个检测。分层就是为了解决这种「过度反馈导致免疫」的问题。
课程适用人群:谁该来听这门课?
说实话,这门课不是给所有人准备的。如果你是刚入行的 Android 新手,我建议你先了解基本的代码规范就好。但如果你符合下面任何一条,这堂课你应该会感兴趣:
- Android 开发工程师(2年以上):你已经被代码审查里的风格问题折磨过了,想通过自动化工具解放自己。
- CI/CD 工程师或 DevOps 角色:你正在搭建或优化 Android 项目的流水线,想加入代码质量门护。
- 技术负责人或架构师:你需要为团队制定代码规范落地方案,并且希望引入可度量的质量指标。
- 质量保证 / 自动化测试工程师:你想拓宽自己的技能树,把静态分析作为质量保障体系的一部分。
一个小建议:如果你还没在项目里用上 Git 钩子或者 CI,我建议课前花 30 分钟了解 Git Hooks 和 GitHub Actions / GitLab CI 的基本概念。不是必须,但能让你更快跟上后面的实操。我个人习惯是提前准备好几份不同场景的配置文件,课上直接带你过一遍配置的坑。
课程目标:学完你能带走什么?
我大概列出了几个核心交付物——等 30 章学完,你应该能:
- 理解 Lint 和 Detekt 的底层规则引擎,不再怕自定义规则。
- 搭建一套覆盖本地 - CI - PR 的分层静态分析流水线,并且能根据团队实际情况调整各个层的规则严度。
- 学会使用 Detekt 的 baseline 机制,平滑处理历史代码,不被遗留问题卡住。
- 把 Lint/Detekt 的报告集成到 Code Review 流程中,让审查者只看增量问题,而不是整个项目报告。
- 通过质量趋势图衡量团队代码改进效果,用数据推动规范落地。
说白了,这门课的目标就是让你不再纠结「代码规范怎么落地」——把工具配好、把流程打通,剩下的交给机器。
一个常见的误区:有些人认为引入 Lint/Detekt 会拖慢 CI 速度。我曾经在一个老项目里加全量 Detekt,构建时间直接多了 8 分钟。后来我改用增量模式 + 分层缓存,把额外时间压缩到了 30 秒以内。后面我会专门用一章讲如何优化检测性能,所以你先别急着关掉它。