如何解决用Kotlin编写的自定义IssueRegistry的“过时的自定义棉绒检查”并使之正常工作(Android)

时间:2019-04-23 13:22:19

标签: android kotlin lint

我正在尝试实施自定义棉绒检查(使用Kotlin)。我已经为自定义检查设置了一个模块,并添加了一些类来测试我的第一次淫荡检查,主要是遵循这两个教程herehere

所以我现在有一个模块,有一个自定义的IssueRegistry,我已经为其创建了一个问题和一个Detector类。到目前为止,它似乎已经完成。我添加了一个测试来检查我的皮棉检查是否有效,并且看起来还不错。

我已经通过在settings.gradle中引用它来将我的模块添加到项目中,如下所示:include ':app', ':somemodule', ':mylintmodule'

现在,如果我使用./gradlew lint运行linter,则会得到一个皮棉结果文件,告诉我:

Lint found an issue registry (com.myproject.mylintmodule) which requires a newer API level. That means that the custom lint checks are intended for a newer lint version; please upgrade
Lint can be extended with "custom checks": additional checks implemented by developers and libraries to for example enforce specific API usages required by a library or a company coding style guideline.

The Lint APIs are not yet stable, so these checks may either cause a performance degradation, or stop working, or provide wrong results.

This warning flags custom lint checks that are found to be using obsolete APIs and will need to be updated to run in the current lint environment.

It may also flag issues found to be using a newer version of the API, meaning that you need to use a newer version of lint (or Android Studio or Gradle plugin etc) to work with these checks.
To suppress this error, use the issue id "ObsoleteLintCustomCheck" as explained in the Suppressing Warnings and Errors section.

所以它告诉我在自定义棉绒检查中使用的是较新的API版本,对吗?这是我自定义的IssueRegistry(减去与该问题无关的某些部分):

class MyCustomIssueRegistry : IssueRegistry() {
    override val issues: List<Issue>
        get() = listOf(ISSUE_NAMING_PATTERN)

    override val api: Int = com.android.tools.lint.detector.api.CURRENT_API
    override val minApi: Int = 1 
}

通过谷歌搜索这个问题并发现this问题,我认为我必须像上面所做的那样通过覆盖这些属性来覆盖并设置正确的API版本(也许是最小API?)(此版本是我的最后一次尝试) ,直接从该问题中获取)。 因此,可以将此属性设置为-1到5之间的值(即从lint.detector.api类中删除):

/** Describes the given API level */
fun describeApi(api: Int): String {
    return when (api) {
        5 -> "3.5+" // 3.5.0-alpha07
        4 -> "3.4" // 3.4.0-alpha03
        3 -> "3.3" // 3.3.0-alpha12
        2 -> "3.2" // 3.2.0-alpha07
        1 -> "3.1" // Initial; 3.1.0-alpha4
        0 -> "3.0 and older"
        -1 -> "Not specified"
        else -> "Future: $api"
    }

我已经尝试了所有方法,再加上上面的方法,也添加了minApi覆盖,并且我对每个方法都得到了完全相同的结果。

我也无法找到与之比较的其他API版本。在Android项目中是否有为常规短绒棉设置的地方?

我也不清楚我该怎么做才能确保应用所做的更改-足以更改一些代码,然后运行lint,还是我必须先编译项目,或者编译并清理? >

在教程之后,我通过将其添加到应用程序的build.gradle中来添加了自定义的lint检查:lintChecks project(":mylintmodule") 这样还对吗无论是否像这样引用(并希望使用)我的棉绒检查,都会出现我的注册表类中的API问题。我还尝试了第一个教程中介绍的其他方法,将此任务添加到了linter模块build.gradle中:

defaultTasks 'assemble'

task copyLintJar(type: Copy) {
    description = 'Copies the lint jar file into the {user.home}/.android/lint folder.'
    from('build/libs/')
    into(System.getProperty("user.home") + '/.android/lint')
    include("*.jar")
}

// Runs the copyLintJar task after build has completed.
build.finalizedBy(copyLintJar)

但是由于我无法弄清楚如何查看我的自定义检查是否真正在运行,所以我也不知道它是否按预期工作。

那么我该如何解决此警告(因为我将文本解释为“只要版本不匹配,我就不会尝试运行您的皮棉检查”),如何确定我的皮棉检查是实际是由短绒棉呢?

0 个答案:

没有答案