【问题标题】:How to enable Android lint check for the @Nullable annotation?如何为@Nullable 注释启用Android lint 检查?
【发布时间】:2017-01-27 15:39:09
【问题描述】:

我注意到 Android Studio 将验证 @Nullable 没有在代码中被忽略:

例如

@Nullable MyObject getMyObject();
...

MyObject o = getMyObject();
o.method();

^ Method invocation 'method' may produce 'java.lang.NullPointerException'

这是由NullableProblems IntelliJ 警告强制执行的。

我想在构建时通过 lint 规则从 gradle 强制执行此规则。有谁碰巧知道是否可以通过 gradle 启用类似的功能?

【问题讨论】:

  • 也就是说,如果项目中有这样的警告,你想让gradle拒绝构建?或者您只想让 gradle 将其记录在日志输出中?
  • 第一步是让 gradle 承认这种情况。我的命令行版本不会对此发出警告。但是,是的,如果您不检查可空值,我最终会拒绝构建。
  • 所以如果遇到 lint 错误,您有点想中止编译?
  • 我希望发生以下情况:1) 开发人员将 @Nullable 添加到代码中的方法 2) 另一个开发人员使用该方法而不检查 null 3) lint 检查捕获错误(就像它已经在 Android Studio 检查中所做的那样)4)构建失败
  • 你好丹尼尔。您会考虑findbugsPMD 解决方案吗?如果是这样,也许您可​​以编辑您的问题以注意这一点,然后包含这些标签?我不确定这是否可能,但它可能比我在答案中给出的更接近您正在寻找的内容。

标签: android android-studio gradle android-gradle-plugin lint


【解决方案1】:

如果有问题的检查是 lint,则可以在 build.gradle 中配置 lintOptions 以强制构建失败,就像对 this question here 的回答一样

但是,您所说的检查是由 Android Studio 中的 IDE 本身提供的。目前没有办法停止这些检查的构建,根据this canonical answer from a IntelliJ developer 这是 IntelliJ 提供的此静态代码分析的link to the documentation。在文档中解释的分析中,具体名称为“Constant conditions & exceptions”:

此检查分析方法控制和数据流,以报告始终为真或假的可能条件、其值被静态证明为常量的表达式以及可能导致可空性合同违规的情况。 标记为@Nullable 或@NotNull 的变量、方法参数和返回值被视为可空(或分别为非空),并在分析期间用于检查可空性合同,例如报告可能的 NullPointerException 错误。

我认为您能做的最好的事情就是更改其严重性,使其显示为警告(IDE 中的红色下划线)。这样做,转到 Preferences / Inspections / Probable Bugs 并将“Constant conditions & exceptions”的严重性更改为警告:

如果您忽略该警告,您的项目仍会构建,但看起来不太好:

您必须进行设置,以便您的团队共享相同的 Android Studio 代码检查设置。您可以使用settings repository 来做到这一点。

另请注意,您也可以启用“提交更改/执行代码分析”复选框,这将在团队提交之前强制进行代码分析。

当你点击commit时,它会先执行分析,找到你一直在说的警告:

还请注意,如果 NPE 在项目中出现问题,强制团队使用这样的检查可能不是最佳选择。相反,您可以尝试公开讨论返回null 产生的问题和可能的解决方案等选项。 Google Guava wiki 中的This excellent article on avoiding null 是一个很好的起点。

【讨论】:

  • 只是想补充一下,我猜 Android Studio Analyze 选项利用 lint 和内置 IDE 代码检查来检查代码错误。
  • 编写自定义 lint 规则怎么样?
【解决方案2】:

如果您希望 lint 在源代码中的某些规则被破坏时抛出错误,您绝对可以将项目配置为源代码编译停止的方式。我本可以写下整个过程,但这个 link 或多或少总结了整个过程

也可以通过安卓链接doc

注意:Android Studio 菜单中的Analyze 选项主要使用 Lint 和内置 Intellij Idea Code inspection

【讨论】:

  • 感谢@Dibzmania。但是我仍然认为没有任何方法可以停止构建以进行非 lint 检查,对吗?如果有请告诉我
  • 如果非 lint 检查是指 Intellij IDE 检查,则不会因检查错误而失败。作为参考,请查看此 SO 链接 -stackoverflow.com/questions/13291432/…
  • 谢谢 - 我在回答中添加了指向该问题的链接。我认为这可以一劳永逸地解决问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 2023-04-04
  • 2017-03-01
  • 1970-01-01
  • 2012-07-03
相关资源
最近更新 更多