如何为@Nullable注释启用Android lint检查?

时间:2017-01-27 15:39:10

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

我注意到Android Studio会验证代码中@Nullable是否被忽略:

离。

@Nullable MyObject getMyObject();
...

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

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

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

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

2 个答案:

答案 0 :(得分:9)

如果有问题的检查是lint,那么有一种方法可以在lintOptions内配置build.gradle,以强制构建失败,如this question here的答案

但是,您所讨论的检查是由Android Studio中的IDE本身提供的。根据{{​​3}},目前无法停止这些检查的构建。这是IntelliJ提供的静态代码分析的this canonical answer from a IntelliJ developer。在文档中解释的分析中,具体名称是" Constant conditions&例外":

  

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

我认为您可以做的最好的事情就是更改其严重性,使其显示为警告(IDE中的红色下划线)。这样做,转到首选项/检查/可能的错误,并改变"恒定条件&的严重性。例外"警告:

link to the documentation

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

the probable bugs section of Inspections in Android Studio

您必须对其进行设置,以便您的团队共享相同的Android Studio代码检查设置。您可以使用red underline on calling get on the result of a method that is @Nullable

执行此操作

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

settings repository

当您单击提交时,它会先执行分析并找到您一直在讨论的警告:

commit changes dialog in Android Studio

请注意,如果NPE在项目中出现问题,强制团队使用此类检查可能不是最佳选择。相反,您可以尝试选择公开讨论返回null生成的问题和可能的解决方案。 Google Guava wiki中的code analysis dialog box in Android Studio是一个很好的起点。

答案 1 :(得分:1)

如果您希望lint在源代码中的某些规则被破坏时抛出错误,您肯定可以以源编译暂停的方式配置项目。我本来可以写完整个过程,但这个链接或多或少总结了整个过程 - http://www.kiodev.com/android-studio-lint-options/

另请浏览Android链接文档 - https://developer.android.com/studio/write/lint.html

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