首页 > 解决方案 > 来自命令行和 Android Studio 的 Android Lint 不匹配

问题描述

我有一个模块,我知道它包含一些未使用的颜色资源。当我从 Android Studio 运行 lint 时,它包含了我期望的输出。但是,当我从命令行运行它时,它找不到这些未使用的资源。

如何让命令行报告这些未使用的资源(最好作为警告)?


从 Android Studio 运行 lint

按名称运行检查:

在此处输入图像描述

输出:

在此处输入图像描述

从命令行运行 lint(使用 gradle)

我的 build.gradle 配置:

lintOptions {
    check 'UnusedResources'
}

实际运行任务:

$ ./gradlew :lib:lint

> Task :lib:lint
Ran lint on variant release: 0 issues found
Ran lint on variant debug: 0 issues found

BUILD SUCCESSFUL in 2s

我知道 gradle 配置正在“工作”,因为如果我删除该check 'UnusedResources'行,它会发现其他问题(check使其只运行一次检查)。还值得注意的是,指定check 'ThisIsObviouslyNonsense'给出了相同的输出(发现零问题的“成功”运行)。


重现问题

我无法提供真正的源代码,但在新项目中重现问题非常简单。

  1. 使用 Android Studio 向导创建一个新项目。(我选择了“Empty Activity”、Kotlin 和 19 的最小 API。)
  2. 将此添加到您的 colors.xml 中:<color name="unused">#f00</color>
  3. 打开app/build.gradle并执行以下操作:
    1. 更改apply plugin: 'com.android.application'apply plugin: 'com.android.library'
    2. 删除该applicationIddefaultConfig
    3. 将此lintOptions块添加到android块中:
lintOptions {
    check 'UnusedResources'
}

现在转到命令行并运行./gradlew lint. 您将看到 0 个问题。

值得注意的是,在将模块转换为库之前,一切似乎都可以正常工作(运行 lint 可以很好地检测到未使用的颜色资源)。这可能与图书馆资源被认为是“公共的”这一事实有关......但在我的真实图书馆中,我们已经明确声明资源默认是私有的。

标签: androidandroid-studiogradlestatic-analysis

解决方案


推荐阅读