Lint没有检测到在旧版本上调用新方法" - 可以做什么?

时间:2014-09-30 19:39:47

标签: android intellij-idea intellij-13

最近,我想研究一下将我的应用从API 16向后兼容性提高到14的可能性。

我尝试了什么:

要查看可能需要修复的内容,我将清单中的android:minSdkVersion更改为14并重建项目。令我惊讶的是,它构建得很好(有点可疑),所以我将minSdkVersion设置为1以查看会发生什么。此时,在Attribute unused on older versions类型的清单中出现了一些警告,但在尝试重建项目时,它已成功完成。我试着Analyze > Inspect code...并发现没有这种性质的错误(即使应该有很多)。我还尝试禁用并重新启用过滤器(见图)并重新启动IntelliJ - 但无济于事。

Inspection settings

我的问题:

  1. 这可能是一个错误,还是我做错了什么?
  2. 有更好的方法来测试向后兼容性吗?
  3. 其他信息:

    • 如果重要,我正在使用代码存储库与该项目的其他几个人合作(我以为我可能已经下载了一些损坏的设置文件,但我认为我已经排除了这种情况)。
    • 我的IntelliJ版本是13.1.4

    谢谢!

1 个答案:

答案 0 :(得分:4)

确保将检验范围设置为整个项目:

example

你仍然可以正常编译的原因是,如果你通过版本检查专门保护你的呼叫,那么调用这些新方法绝对可以接受。例如:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    myView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
    // Hardware acceleration not supported -- do nothing!
}

为防止出现任何警告,您可以使用@TargetApi注释调用方法,例如:

@TargetApi(Build.VERSION_CODES_HONEYCOMB)
public void setLayerType(View view, int layerType) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        myView.setLayerType(layerType, null);
    } else {
        // Hardware acceleration not supported -- do nothing!
    }
}

编辑:此外,要获取内联警告,请确保在项目默认检查配置文件中启用此检查:

example

最终编辑:此外,请确保某处未定义lint.xmllint-rules.xml,这可能会覆盖这些问题的预期严重性级别。有关详细信息,请参阅the following link