如何抑制已弃用的Android功能的特定Lint警告?

JJD*_*JJD 15 android lint gradle deprecation-warning

我使用版本开关来支持较旧的Android版本.

int sdk = Build.VERSION.SDK_INT;
if (sdk < Build.VERSION_CODES.HONEYCOMB) {
    ColorDrawable colorDrawable = new ColorDrawable(shapeColor);
    //noinspection deprecation
    viewHolder.shape.setBackgroundDrawable(colorDrawable);
} else {
    viewHolder.shape.setColor(shapeColor);
}
Run Code Online (Sandbox Code Playgroud)

从命令行使用Gradle构建项目时,Lint会输出以下警告:

app/src/main/java/com/example/MyApp/CustomListAdapter.java:92: warning: 
[deprecation] setBackgroundDrawable(Drawable) in View has been deprecated
            viewHolder.shape.setBackgroundDrawable(colorDrawable);
                            ^
Run Code Online (Sandbox Code Playgroud)

我可以注释特定的行或方法来静音警告(因为我是故意这样做的)吗?我希望禁用所有警告.

Ab_*_*Ab_ 8

新功能:不确定Android Studio,但是,要从此行中删除此警告,您可以使用:

//noinspection deprecation
Run Code Online (Sandbox Code Playgroud)

这将从下一行中删除警告.例如:

//noinspection deprecation
e.setBackgroundDrawable(editTextDrawable);
Run Code Online (Sandbox Code Playgroud)

它不会显示错误.但是,正如@JJD所说,这仍然会向控制台输出警告.但至少你可以拥有一个很好的无错误代码,这对于Git来说非常有用.并且,这可以防止问题@SupressWarnings,即忽略方法中的所有警告.因此,如果你有一些你不知道的东西被弃用,@SupressWarnings它会隐藏它并且你不会被警告.这就是优点//noinspection


Cod*_*sed 6

大小写很重要,使用以下内联或全类:

@Suppress("DEPRECATION")
Run Code Online (Sandbox Code Playgroud)

这是在科特林。

  • 在 Java 中,大小写也很重要!在 Java 中,您 **需要使用小写** 来表示弃用关键字 `@SuppressWarnings("deprecation")` (2认同)

use*_*er1 5

我遇到了类似的问题。首先我收到一个编译器警告:

:compileDebugJava
Note: /path/file.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Run Code Online (Sandbox Code Playgroud)

您可以使用@SuppressWarnings("deprecation")它来抑制或忽略它,因为它是一个警告并且确实会导致您的构建失败。此外,我还收到了 lint 错误(详情见build/lint-results.html):

Call requires API level 13 (current min is 9)
Run Code Online (Sandbox Code Playgroud)

这可以通过添加@SuppressLint("NewApi"). 或者,您可以使用@TargetApi(13)暗示方法/类可能使用依赖于 API 版本 13 的方法,而不是您设置的方法minSdkVersion(例如 9)。

注释只能在类或函数级别完成,而不能在一行中完成。另请注意,“弃用”不应大写,而“NewApi”似乎无关紧要。


Mar*_*ler 5

我注意到,@SuppressLint("deprecated")内联注释将不再被拾取- @SuppressWarnings("deprecation") 而是被拾取。

可以在模块级文件中禁用对DeprecationGradle linter 的检查;虽然没有机会定义这样的单个文件:lintOptionsbuild.gradle

android {
    lintOptions {
        disable 'Deprecation'
    }
}
Run Code Online (Sandbox Code Playgroud)

可以lint.xml使用LintOptions:lintConfig分配一个相当详细的配置文件(当设置时showAll true,无论提供的XML配置如何,它仍将显示警告):

android {
    lintOptions {
        lintConfig file("lint.xml")
        showAll false
    }
}
Run Code Online (Sandbox Code Playgroud)

通过添加路径,可以添加单个文件:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <issue id="Deprecation" severity="Error">
        <ignore path="app/src/main/java/com/example/MyApp/CustomListAdapter.java" />
    </issue>
</lint>
Run Code Online (Sandbox Code Playgroud)

的源代码com.android.builder.model.LintOptions可能会解释那里实际发生的情况(并确认约占我所写内容的50%)。

为了摆脱Android Studio中的内联警告...该linter似乎是另一个linter-并且这些注释不会影响Gradle构建的linter(可能需要将其与所述方法之一结合使用以上,以忽略已知不推荐使用的类和方法):

//noinspection deprecation
Run Code Online (Sandbox Code Playgroud)

更新 Android Studio 2.3发行说明提到了一项新功能:

棉绒基线:使用Android Studio 2.3,您可以将未解决的棉绒警告设置为项目中的基线。从那时起,Lint将仅报告新问题。如果您的应用程序中有许多旧的皮棉问题,而只想专注于解决新问题,这将很有帮助。了解有关Lint基准以及此版本中添加的新Lint检查和注释的更多信息。

此处说明了如何创建Lint警告baseline- 如何将检测到的警告记录到XML文件中,然后将其静音(这比将代码注释内联并遍及整个位置更好)。我会假设,即期权lintConfigbaseline应结合起来,能够(根据需要)。

android {
    lintOptions {
        baseline file("lint-baseline.xml")
    }
}
Run Code Online (Sandbox Code Playgroud)


bes*_*ver 2

您需要创建一个 lint.xml 文件来告诉 lint 要忽略什么。

http://tools.android.com/tips/lint/suppressing-lint-warnings请参阅此了解更多详细信息

你的可能看起来有点像这样

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <!-- Disable the given check in this project -->
    <issue id="Deprecation">
        <ignore path="app/src/main/java/com/example/MyApp/CustomListAdapter.java" />
    </issue>
</lint>
Run Code Online (Sandbox Code Playgroud)

要在源代码中处理这个问题,您应该使用类似的东西

 @SuppressLint("Deprecation")
Run Code Online (Sandbox Code Playgroud)

  • 我不想禁用所有弃用警告。我更愿意向代码中的特定行添加 Lint 注释。 (2认同)
  • 我按照文档中的建议尝试了“//noinspection AndroidLintDeprecation”,但警告仍然出现。我不确定 **id** 是什么意思。`lintId` 被提取,如[此处](https://android.googlesource.com/platform/tools/adt/idea/+/jb-mr2-dev/android/src/org/jetbrains/android/检查/lint/SuppressLintIntentionAction.java),第 169 行。 - 如果我理解正确的话,只能在方法级别设置`@SuppressLint("Deprecation")`。 (2认同)
  • 最简单的解决方案难道不是将该 if 语句分解为一个单独的方法,并用抑制 lint 注释进行标记吗? (2认同)