外观
自定义 Lint 规则怎么写,怎样控制误报和漏报?
标准回答
选一条真实规则说明:要防的缺陷是什么、如何从代码结构识别、什么场景属于合法例外。然后用正例、反例和边界样本验证,并根据风险决定提示还是阻断。不要把示范规则当作自己写过的规则。
通俗例子
示范:要求某类资源在结束时释放,不能仅搜索有没有出现 close 字样;要考虑资源对象是否同一个、异常路径是否覆盖。真实规则可能更简单,按你的实现讲。
深入解释
**从缺陷模式开始:**说清危险调用、缺失约束或资源使用错误,以及会造成的实际后果;规则必须能解释为什么命中。
**选择合适分析方式:**Java/Kotlin 代码可按实际需要使用语法或语义分析,资源类问题则看 XML 等输入。纯文本匹配容易受注释、别名和重载影响。
**让规则可维护:**提示要给出位置、原因和修复方向;为误报保留有依据的处理机制,并测试新增规则不会把正常代码大面积拦住。
追问与回答
为什么不用正则?
简单固定格式可以用;涉及方法归属、类型和调用关系时,需要更可靠的代码分析。
误报导致大家直接忽略怎么办?
先降低噪声、提供可操作提示,再按风险逐步阻断;豁免应有说明和可追踪记录。
易混淆点
不要声称所有规则都做了完整数据流分析,除非确实实现并验证。
进一步举证
- 准备一条真实规则的检测入口、命中代码和正常代码。
- 补齐规则测试、运行成本与误报反馈处理。
内容来源
- Android · AI Agent 知识手册 · 原条目
resume-R19