外观
自定义 Lint 规则怎样降低误报?
标准回答
自定义规则首先明确要阻止的具体危险模式、适用模块和例外条件。例如可观察某个 API 是否在不合适的上下文调用,或者资源使用是否缺少约定的释放路径。仅按方法名匹配会命中同名无关方法,应结合符号、类型与上下文。
规则需要考虑 Java 与 Kotlin 的表示差异、继承与扩展调用、空安全写法和编译变体。对于跨方法、跨线程或反射行为,静态推断的能力有限;无法证明不安全时,不应强行输出确定性结论。严重级别要与证据强度和后果一致。
保留最小正例、反例、合理例外与曾经误报的样例,规则升级时检查结果变化。修复建议应说明原因与安全替代方案,自动修复只用于边界明确的转换,不能为减少告警改变业务语义。
追问与回答
IDE 能提示空指针,Lint 为什么未必能复现
两者检查器、数据流、编译上下文和配置可能不同。先确认是哪个检查项产生提示,再判断能否通过对应工具或自定义规则覆盖。
能否用 Lint 保证没有运行时异常
不能。它只能覆盖可静态识别的子集,实际时序、设备差异和输入组合仍需其他验证。
易混淆点
- 用文本搜索规则宣称完整跨过程语义分析。
参考资料
内容来源
- Android 与 AI 工程 Wiki · 原条目
q127