如何使用 -Xlint:deprecation 重新编译

How to recompile with -Xlint:deprecation

我不使用 Android Studio,但我使用 build.gradle 从命令行构建所有内容。我生成这样的 Lint 报告:

./gradlew lint

这正确地生成了一个 Lint 报告,但它也这样说:

Note: MyActivity.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

这让我想知道我该怎么做?我试过以下方法:

./gradlew lint -Xlint:deprecation

但是没有用。它说:

Problem configuring task :app:lint from command line.
Unknown command-line option '-X'.

那么如何通过 gradle 将 -Xlint:deprecation 传递给 Lint?

要回答我自己的问题,您需要将以下内容添加到您的项目级 build.gradle 文件中:

allprojects {
    ...

    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:deprecation"
        }
    }   
}

我添加了应用内级别 build.gradle 并解决了问题

aaptOptions { cruncherEnabled = false }

自从我最近 运行 关注这个问题以来,我只是更新一下:

您可以按照@Andreas 在接受的答案中建议的方式获取有关此弃用问题的详细信息。如果您使用的是 Kotlin,真正的解决方案是(在 build.gradle 中):

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs.add("-Xlint:deprecation")
        }
    }
}

另一个解决方案是更新您的 AndroidSDK。问题在于 SDK 方法覆盖了已弃用的功能。在您的 build.gradle 文件中,您可以更改 compileSdkVersion:

android {
    compileSdkVersion 29 //Change this to the latest release
    ...
    ...

    defaultConfig {
        ...
        targetSdkVersion 29 //Change this too
        ...
    }
}

使用最新版本的 SDK 可能会解决您的问题。 Android 很好地解决了版本之间的弃用问题。如果它仍然存在,您可能只需要等到下一个 SDK 版本。如果问题不在 AndroidSDK 中,而是在您下载的包中,您应该查看该包是否需要升级或联系该包的管理员。

is an accepted answer but solved this with Gradle Java plugin如下。
如果还没有添加 java 插件到 build.gradle 文件。

plugins {
    // Apply the java plugin to add support for Java
    id "java"
}

然后根据您的需要添加任务 compileJava and/or compileTestJava 以仅检查 java 主要源代码或 java 测试源代码的弃用。
您可以添加列出的各种编译选项 here

compileTestJava {
   // options.incremental = true
   // options.fork = true
   // options.failOnError = false
    options.compilerArgs.add("-Xlint:deprecation")
}

此外,我们可以将主要和测试源代码项目指定为

tasks.withType(JavaCompile) {
    options.compilerArgs.add("-Xlint:deprecation")
}

将此代码添加到 build.gradle 解决了我的问题

gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:deprecation"
        }
    }

Kotlin(build.gradle.kts)版本的其他答案:

allprojects {    
    gradle.projectsEvaluated {

        tasks.withType<JavaCompile> {
            options.compilerArgs.addAll(arrayOf("-parameters", "-Xlint:deprecation"))
        }
    }
}